C# utiliza valores de segunda classe(valores que são usados com restrições)? Se utilizar ele viola o princípio da completude de tipo que diz que [quote]Nenhuma construção de linguagem deve ser arbitrariamente restringida pelo tipo dos valores envolvidos na mesma[/quote]
E ai? oq vcs acham?
cara, aqui é um forum de Java, vai no site da msdn que talvez eles te ajudam!
boa sorte!
Já tentei la velho… não acho nada relacionado… eu sei q eh forum java… mas eu postei a duvida no fórum de outras linguagens
Ele está se referindo a isto aqui:
http://www.cs.jcu.edu.au/Subjects/cp2003/1997/foils/moreTypes/moreTypes.html
Se for isso, tanto C# quanto Java não têm valores de segunda classe, porque structs, classes e tipos primitivos podem ser passados de/para métodos, etc.
Como a tal página é velha (1997), então ela não considerou a evolução das linguagens. O exemplo dado (Pascal não poder retornar em um método um “record”) não vale mais.
hahahaha engracado que se alguem pergunta alguma coisa sobre C ia ter 20 nego respondendo.
Como eh C# sempre aparece alguem “reclamando” que aqui eh forum de Java
[quote=mcbarsotti]cara, aqui é um forum de Java, vai no site da msdn que talvez eles te ajudam!
boa sorte![/quote]
Não senhor, esse aqui é o forum “Outras linguagens”, que fica na seção de mesmo nome que abriga também o forum de Ruby. E mesmo antes de existir essa seção específica o GUJ sempre foi aberto à praticamente qualquer assunto referente ao desenvolvimento de software.
E ai? oq vcs acham?[/quote]
Tipos escalares suportam as mesmas operações que tipos por referência. Poderia citar exemplos de quais operações são restritas? Conheço a CLR razoavelmente bem e não tenho um exemplo disso. Não é o caso dos tipos primitivos do Java, por exemplo.
Bem galera… vlw pela ajuda ai!
Pesquisando um pouquinho e lendo um livro aqui sobre Paradigmas de Linguagens de Programação cheguei a seguinte conclusao
Em C# temos valores de segunda classe como por exemplo no código abaixo, uma abstração de procedimento.
public void oiMundo() {
Console.write("oiMundo");
}
Onde viola o princípio da completude de tipo pois uma abstração de procedimento não pode ser um argumento para um abstração de função.
Eu desconehcia esse principio:
Lendo mais cheguei nesse afirmação:
Se nenhuma operação nao deve ser restringida pelo tipo de valores envolvidos em Java a sobrecarga d metodos não violaria esse principio?
Tipo:
System.out.println(double value) , System.out.println(boolean value) , System.out.println(int value)
Ou entendi errado?.. :roll:
Acho que falei a besteira qnto a sobrecarga.
A sobrecarga de metodos é um caracteristica da Orietancao a Objetos.
Mas mudando o tipo da pergunta linguagens orientada a objetos que suportam a sobrecarga não violaria esse principio?
Eu entendi nenhuma construção da linguagem.
Por exemplo, o switch do Java é restrito a tipos primitivos e enums. Obedecer esse princípio significaria que Strings, BigDecimals e qqr outro objeto que implemente comparações poderia ser usado no switch.
É a minha opinião.
Em C# é possível, mas com um pouco de trabalho, receber e retornar referências a métodos também.
Este código foi testado com o Visual Studio 2008.
// Requer .NET Framework 3.5 (Visual Studio 2008) para rodar
class Exemplo
{
// Teste para procedimentos
public void oiMundo()
{
Console.WriteLine("Oi, mundo!");
}
public void adeusMundoCruel()
{
Console.WriteLine("Adeus, mundo cruel!");
}
public Action retornaAcao(int n)
{
switch (n)
{
case 1: return oiMundo;
case 2: return adeusMundoCruel;
default: return null;
}
}
public void executaAcao(Action act)
{
act();
}
// Teste para funções
public int max(int x, int y)
{
return x > y ? x : y;
}
Func<int, int, int> min = (x, y) => x < y ? x : y;
public int executaFuncao(Func<int, int, int> f, int x, int y)
{
return f(x, y);
}
public Exemplo()
{
retornaAcao(1)();
executaAcao(retornaAcao(2));
Console.WriteLine("Maximo de 10 e 20 eh " + executaFuncao(max, 10, 20));
Console.WriteLine("Minimo de 10 e 20 eh " + executaFuncao(min, 10, 20));
}
}
[quote]Em C# é possível, mas com um pouco de trabalho, receber e retornar referências a métodos também.
Este código foi testado com o Visual Studio 2008. [/quote]
Qual o problema disso? Se tem algum
Só falei “um pouco de trabalho” porque não é intuitivo.
O tipo de uma variável ou parâmetro que recebe uma referência a um método sem parâmetros e que não retorna nada é Action.
O tipo de uma variável ou parâmetro que recebe uma referência a um um método com parâmetros (int, short) e que não retorna nada é Action<int,short>
O tipo de uma variável ou parâmetro que recebe uma referência a um um método sem parâmetros e que retorna um double é Func<double>
O tipo de uma variável ou parâmetro que recebe uma referência a um um método com parâmetros (string, long, decimal) e que retorna um DateTime é Func<string,long,decimal,DateTime>
Veja o programa de exemplo que preparei acima.
A saída esperada dele, se você instanciar um elemento da classe Exemplo, é
Oi, mundo!
Adeus, mundo cruel!
Maximo de 10 e 20 eh 20
Minimo de 10 e 20 eh 10
[quote=raffccc]Bem galera… vlw pela ajuda ai!
Pesquisando um pouquinho e lendo um livro aqui sobre Paradigmas de Linguagens de Programação cheguei a seguinte conclusao
Em C# temos valores de segunda classe como por exemplo no código abaixo, uma abstração de procedimento.
public void oiMundo() {
Console.write("oiMundo");
}
Onde viola o princípio da completude de tipo pois uma abstração de procedimento não pode ser um argumento para um abstração de função.
[/quote]
Em C# 3.0 é possível converter qualquer expressão em dados:
static void If (Func<bool> cond, Action then, Action else_) {
if (cond())
then();
else
else_();
}
static void Main () {
If (()=> true , ()=> Console.WriteLine ("Oi Mundo"), ()=> Console.WriteLine ("Nada no else") );
}
C# 3.0 tem closures, ainda não existe conversão automática de código em closures, mas isso é outra história.
[quote=pcalcado][quote=mcbarsotti]cara, aqui é um forum de Java, vai no site da msdn que talvez eles te ajudam!
boa sorte![/quote]
Não senhor, esse aqui é o forum “Outras linguagens”, que fica na seção de mesmo nome que abriga também o forum de Ruby. E mesmo antes de existir essa seção específica o GUJ sempre foi aberto à praticamente qualquer assunto referente ao desenvolvimento de software.[/quote]
opaa, é a força do habito!! :lol:
mas se a idéia é abragir qualquer assunto relacionado ao desenvolvimento, não deveriam trocar o slogan do guj “e o maior forum brasileiro sobre Java” por “e o maior forum brasileiro sobre Desenvolvimento e Java” ou algo do tipo :roll:
abraços!
Continuamos sendo o maior forum sobre Java. O slogan nao diz que o forum eh somente sobre Java