Que Métodos/Classes vc acha que o JAVA ja deveria ter?

[quote=quikkoo]
dentro das regras atuais da linguagem java existe a excelente joda time que faz oq o luiz aguiar mencionou[/quote]
O joda-time tem melhorias bem legais compradas a API padrão do Java que realmente é um lixo completo, mas ainda não tem essas “mágicas” como em lingagens scripts como Ruby, são coisinhas bestas que depois que se usa uma vez, é difícil viver sem depois.

[]s

Algumas APIs simplicistas e suporte a literais como estão fazendo com o Visage :slight_smile:

[quote=Luiz Aguiar]Date.today() + 1.year + 10.weeks + 2.day - 8.hours;

[/quote]

Não seria isso ?

Calendar objeto = Calendar.getInstance();
objeto.add(Calendar.YEAR, 1);
objeto.add(Calendar.WEEK_OF_YEAR, 10);
objeto.add(Calendar.DAY_OF_YEAR, 2);
objeto.add(Calendar.HOUR_OF_DAY, -8);

Eu gostaria que a API de criteria do hibernate fosse assim:

criteria.Where(obj => obj.Idade > 18).toList();

Usando Lambda e Propriedades assim, parecido com as queries LINQ.

[quote=Luiz Aguiar][quote=quikkoo]
dentro das regras atuais da linguagem java existe a excelente joda time que faz oq o luiz aguiar mencionou[/quote]
O joda-time tem melhorias bem legais compradas a API padrão do Java que realmente é um lixo completo, mas ainda não tem essas “mágicas” como em lingagens scripts como Ruby, são coisinhas bestas que depois que se usa uma vez, é difícil viver sem depois.

[]s[/quote]

Verdade, não é à toa que em um dos projetos pessoais meu, eu a utilizei fazendo inúmeras alterações. Mas mesmo assim, valeu a pena.

Uma classe decente pra trabalhar com datas é um pedido antigo dos usuários, houveram várias JSRs sobre isso, mas a Sun nunca chegou num consenso.

Outra coisa que gostaria é uma classe própria pra manipular dinheiro. E uma classe pra se criar serviços ou daemons, é um absurdo o Java até hoje não possuir uma nativa.

A última que eu sempre quis, foi atendida no Java 6, uma classe pra criar e manipular ícones da taskbar.

“May the Scala be with you” :lol:

hehe, vendo alguns “pedidos” desta ultima pagina, todos me remeteram a coisas que vi em scala, ou em frameworks scala, como lift, vejam algumas facilidades do Lift:
Lift Utilities:

10 seconds                                        1 
1 hour                                               2 
 
1. Results in net.liftweb.util.Helpers.TimeSpan = 10 seconds 
2. Results in net.liftweb.util.Helpers.TimeSpan = 1 hour 

Sim, no teu código voce escrevera exatamente assim: “10 seconds” sem ponto mesmo, ja q em certos casos o “.” nao é obrigatorio em scala.

outras facilidades

[code]
md5(“hello world”) 1

  1. Results in a java.lang.String with the value XrY7u+Ae7tCTyyK7j1rNww== [/code]

Persistencia basica do Lift, Mapper, basica por que tem outras opcoes:

[code]
User.find(By(User.email, "foo@bar.com")) 1

User.find(By(User.birthday, new Date(“Jan 4, 1975”))) 2 [/code]

Sobrecarga de operadores, ta, isto nao é sobrecarda ja q nao tem operadores em scala, tudo é objeto, mas ficaria assim:

case class IntPoint(x: Int, y: Int) {

  def +(a: IntPoint) = IntPoint(a.x + x, a.y + y)
}

val a = IntPoint(1, 2)
val b = IntPoint(2, 3)

val c = a+b

//resultado:
c: IntPoint = IntPoint(3,5)

Porque isto é possivel? Porque tudo é objeto, logo “+” é apenas um metodo da classe IntPoint. Pra quem não sabe, em Scala, são raríssimas as excessões quanto ao uso de caracteres para nomes de metodos e classes, ou seja /, , | *, +, $, %, &, @, :, ::, :::, !, ~, etc, são todos nomes validos para metodos e classes!

Estes são alguns exemplo que me lembrei que ja vi em meus estudos, isso pq ainda me considero bem leigo em Scala.
Realmente quando a linguagem facilita, as possibilidades são muitas!

O problema do Java é o mesmo de qualquer outra linguagem derivada do Algol (incluindo C++, Ruby, Python, etc). A sintaxe é fixa, e você é limitado pelo que o criador achou que seria útil. Geralmente quando algum usuário de Ruby cita “metaprogramação” ele não está se referindo a definir novas palavras reservadas, mas apenas a poder alterar objetos em tempo de execução, adicionando-se novos métodos e tal. O que adiciona um nível de flexibilidade a um custo maior em tempo de execução e de segurança.

Talvez haja alguma forma de se tratar em um linguagem como Java a possibilidade de se incluir novas construções sintáticas, como por exemplo receber uma árvore sintática e retornar outra que será transformada em código, mas eu não conheço. Eu não consigo imaginar como isso seria “fácil” do ponto de vista do desenvolvedor.

Linguagens derivadas do Lisp permitem esse tipo de personalização porque o próprio código já é uma árvore. Portanto transformar árvores em tempo de compilação é bem simples. Em termos práticos não há limites para o que o desenvolvedor possa fazer, pois ele pode extender a linguagem como bem entender.

Por exemplo, em Lisp se você quisesse integrar AOP bastaria extender a linguagem para utilizá-la. A mesma coisa se quisesse uma sintaxe especial para operações com DB ou qualquer outra coisa. A linguagem não te limita.

Um

"minhaString".reverse();

seria legal :slight_smile:

[quote=j0nny]Um

"minhaString".reverse();

seria legal :)[/quote]

po T-Bag, não é tão complicado vai :lol:

StringUtils.reverse("minhaString");

O problema do Java é o mesmo de qualquer outra linguagem derivada do Algol (incluindo C++, Ruby, Python, etc). A sintaxe é fixa, e você é limitado pelo que o criador achou que seria útil. Geralmente quando algum usuário de Ruby cita “metaprogramação” ele não está se referindo a definir novas palavras reservadas, mas apenas a poder alterar objetos em tempo de execução, adicionando-se novos métodos e tal. O que adiciona um nível de flexibilidade a um custo maior em tempo de execução e de segurança.

Talvez haja alguma forma de se tratar em um linguagem como Java a possibilidade de se incluir novas construções sintáticas, como por exemplo receber uma árvore sintática e retornar outra que será transformada em código, mas eu não conheço. Eu não consigo imaginar como isso seria “fácil” do ponto de vista do desenvolvedor.

Linguagens derivadas do Lisp permitem esse tipo de personalização porque o próprio código já é uma árvore. Portanto transformar árvores em tempo de compilação é bem simples. Em termos práticos não há limites para o que o desenvolvedor possa fazer, pois ele pode extender a linguagem como bem entender.

Por exemplo, em Lisp se você quisesse integrar AOP bastaria extender a linguagem para utilizá-la. A mesma coisa se quisesse uma sintaxe especial para operações com DB ou qualquer outra coisa. A linguagem não te limita.[/quote]

O preprocessador da linguagem c ou da c++ te permite fazer isso. Você pode construir qualquer palavra chave com ele.

Nesse exemplo existe a implementação de um “foreach” primitivo.
http://www.cakoose.com/wiki/c_preprocessor_abuse

A linguagem c e a c++ são linguagens de sistema(linguagens para criar compiladores). Existe uma moderna que também é de sistema, a linguagem d.

O JAVA tem algum aplicativo para instalar em servidores web para que possa rodar classes em JAVA ??

tipo uma maquina virtual ou um TomCat da vida ??

[quote=kiq095]O JAVA tem algum aplicativo para instalar em servidores web para que possa rodar classes em JAVA ??

tipo uma maquina virtual ou um TomCat da vida ?? [/quote]

Você quer dizer, algo como Java WebStart ?

[]'s

Nao sei … por isso q perguntei nunca ouvi dizer que o Sun tinha feito algo assim …

pra mim isso e novo vou pesquisar aqui…!!!

Muito interessante, em groovy é um pouco diferente, pois se tem o seguinte mapeamento:

  •  a.plus(b)
    
  •  a.minus(b)
    
  •  a.multiply(b)
    

/ a.divide(b)
% a.modulo(b)
| a.or(b)
& a.and(b)
a[b] a.getAt(b)
a << b a.leftShift(b)

Ou seja, quando você quser fazer sobrecarga de operadores, você implementa um dos métodos correspondentes. :lol:

Isso é o equivalente ao código java se este suportasse sobrecarga de operadores. C# e C++ fazem isso muito bem.
poderia até sobrecarregar o operador << para um stream para algum arquivo ou outra saída.

ex:

File x = new File("c:\teste.mtxt"); x << "teste para um arquivo...."; x.close();

Esse tipo de sobrecarga ajeita a vida de qualquer pessoa.

Outra coisa que julgaria importante seria uma espécie de “delegates” turbinados que existem no Qt chamado Signal. Ele permite implementar o padrão observer de uma maneira muito simples.

connect(slider, SIGNAL(value(int)), progressbar, SLOT(setValue(int)));

Você não precisa implementar as interfaces porque o compilador já entende e cria em tempo de compilação. Fica muito fácil atualizar componentes da interface, além de facilitar a escrita de componentes não somente para interface gráfica, mas qualquer tipo deles.

http://doc.trolltech.com/4.7/signalsandslots.html

[quote=alucardeck][quote=j0nny]Um

"minhaString".reverse();

seria legal :)[/quote]

po T-Bag, não é tão complicado vai :lol:

StringUtils.reverse("minhaString");

Pois é, mas fica meio procedural dessa maneira ^^

[quote=j0nny][quote=alucardeck][quote=j0nny]Um

"minhaString".reverse();

seria legal :)[/quote]

po T-Bag, não é tão complicado vai :lol:

StringUtils.reverse("minhaString");

Pois é, mas fica meio procedural dessa maneira ^^[/quote]
O engraçado é que o método reverse() existe na classe StringBuilder, não sei qual a justificativa para não existir na classe String.

poderia ter um conversor mais pratico tambem

int Numero=95;
String Numero2="";
Float Numero3;

Convert  Numero2.String(Numero);

Convert  Numero3.Float(Numero2);

Convert  Numero2.Int(Numero3);


Numero= 95

Numero2= "95"

Numero3=95,00

e podendo formatar os valores…

por ex duas cassas depois da virgola , sem casas depois da virgola, 0 a esquerda …

por exe um numero real ou um string convertida pra int com 0 a esquerda o 0 permanecesse

Este faz tempo que queria nativo na linguagem, de uma maneira simples, tipo:

"123456".leftPad("0",5) //00000123456
"123456".rightPad("0",5) //12345600000