Javadoc for Ruby!

Parece que há problemas com a documentação do Ruby do ponto de vista da praticidade.

:arrow: Situação: Gostaria de imprimir um inteiro no formato binário, ou seja, 2 = 10. Isso depois de sacar que vc pode fazer assim:

2[0] = 0 # bit at pos 0
2[1] = 1 # bit at pos 1

Pensei assim: deve haver alguma função each para eu loopar por todos os bits, daí eu monto o binário tranquilamente.

Ou melhor ainda, talvez um método to_b.

C:\eclipse\workspace>ri Fixnum
------------------------------------------------ Class: Fixnum < Integer
     A +Fixnum+ holds +Integer+ values that can be represented in a
     native machine word (minus 1 bit). If any operation on a +Fixnum+
     exceeds this range, the value is automatically converted to a
     +Bignum+.

     +Fixnum+ objects have immediate value. This means that when they
     are assigned or passed as parameters, the actual object is passed,
     rather than a reference to that object. Assignment does not alias
     +Fixnum+ objects. There is effectively only one +Fixnum+ object
     instance for any given integer value, so, for example, you cannot
     add a singleton method to a +Fixnum+.

------------------------------------------------------------------------
     Enhance the Fixnum class with a XML escaped character conversion.

------------------------------------------------------------------------


Includes:
---------
     Precision(prec, prec_f, prec_i)


Constants:
----------
     XChar: Builder::XChar if ! defined?(XChar)


Class methods:
--------------
     induced_from


Instance methods:
-----------------
     %, &, *, **, +, -, -@, /, <, <<, <=, <=>, ==, >, >=, >>, [], ^,
     abs, dclone, div, divmod, id2name, modulo, power!, quo, rdiv,
     rpower, size, to_f, to_s, to_sym, xchr, zero?, |, ~

Talvez não, então apelei para o Google, e achei que para fazer isso basta simplesmente fazer:

2.to_s(2) # => 10

O problema é que a documentação me deixou totalmente na mão, e não é a primeira vez que ela faz isso.

Me parece importante como esse caso demonstra ter os parametros na assinature do método. Se eu tivesse visto to_s(base=10), eu não precisaria ter apelado para o Google.

O Javadoc me parece perfeito, porque ele mostra o método, sua assinature e uma sucinta descrição. Daí se vc quer a história completa vc clica no método e vai para a documentação completa.

Simplesmente fazer assim:

Instance methods:
-----------------
     %, &, *, **, +, -, -@, /, <, <<, <=, <=>, ==, >, >=, >>, [], ^,
     abs, dclone, div, divmod, id2name, modulo, power!, quo, rdiv,
     rpower, size, to_f, to_s, to_sym, xchr, zero?, |, ~

não ajuda muito. Pra que serve -@ ?

Outro problema é a falta de organização das classes no RDoc. Em java temos tudo organizado em pacotes, o que faz total sentido. Em Ruby temos tudo numa lista só.

Exemplo trivial: Vá aqui e tente abrir a documentação da classe Object e me diga quantos CTRL + F vc teve que dar: http://www.ruby-doc.org/core/

Me parece sensato organizar as 134213423423 classes em modulos e mostrar isso organizado na documentação.

Acho que tudo isso pede um projeto para xupar toda a documentação do Ruby e cuspir ela em JavaDoc. Os 1231231321213 programadores Java que estão querendo aprender Ruby agradeceriam.

  1. O rdoc tem os parametros na “assinatura” do metodo. Voce so precisa ler um pouquinho mais.
  2. Desde quando usar um mecanismo de busca pra sanar a sua duvida eh “apelacao”?
  3. Ao inves de tentar mapear tudo que esta em Java para conceitos do Ruby, pq nao aprender Ruby da mesma forma que vc aprendeu Java, ou seja, comecando do comeco?

Conceitos a parte (eu tb estou aprendendo Ruby ainda) concordo com o cv.
Eu estou aprendendo Ruby do mesmo jeito que eu aprendi Java pela segunda vez (porque da primeira eu sabia seguir o framework da empresa na qual eu fiz estágio).
Me parece que vc, por ser um programador Senior, está querendo reinventar a roda em outr alinguagem, independente de existir frameworks como o Rails ou não. Vc está tentando portar um código Java para o Ruby, com os mesmo conceitos, com os mesmos nomes e tudo. São mundos totalmente diferentes… Vc e eu somos Seniors em Java, mas muito Jr em Ruby… e isso não é uma critica destrutiva não, os conceitos de arquitetura nós entendemos. Precisamos pegar o pulo do gato no Ruby ainda…

Olá

Poie eu concordo com o Sérgio. O javadoc da API Java a gente baixa em arquivo zip e lê com facilidade sem precisar estar conectado à Internet. A documentação do Ruby quase presume que se usa Internet 99% do tempo.

[]s
Luca (que estudou Ruby em Paraty)

Luca, vc tb pode baixar os rdocs de tudo (ou gerar novamente, ja que o treco eh opensource e o codigo vem com o rdoc la :wink: )

O rubygems quebra esse galho pra vc sem nem ter que fazer nada: todos os gems vem com rdoc prontinho, tambem.

Alem do mais, nao se esqueca que vc pode brincar no irb caso a documentacao ainda assim nao esteja por perto… ou, eh claro, vc pode abrir o codigo dos modulos e classes :wink:

[quote=RTFM]-fix => integer
Negates fix (which might return a Bignum).[/quote]

http://www.ruby-doc.org/core/classes/Fixnum.html#M001072

Eu acho que como o JavaDoc deveríamos ter um resumo rápido de todos os métodos em ordem alfabética. Estou falando de bater o olho num resumo e avistar o parametro.

O que vc sugeriu é que eu saísse lendo a documentação e a assinatura de todos os métodos para tentar descobrir o que eu queria. Eu não tinha nem idéia que isso estava no to_s!

De novo veja o resumo dos métodos do JavaDoc e veja o do Ruby. JavaDoc = assinatura + parametros + short description / Ruby = methods names

Se eu tenho que dar mais de 2 ou 3 CTRL+F eu acho apelação. Em java eu vou saber que o Object está em java.lang, listo as classes de java.lang e simplesmente faça apenas UM CTRL+F. Por isso que eu acho que organizar as coisas por pacotes ou módulos é muito importante.

Qual é o pecado de olhar os pontos fortes e fracos de uma coisa que é usada por muitas pessoas (Java) e levar esse aprendizado para Ruby? Ou tudo em Ruby é melhor do que Java?

Calma, respira! Amigo, ok?

Nao, o que eu sugeri eh que vc desse uma olhada na documentacao com um pouco mais de carinho, ja que estava esperando tanto dela, antes de vir pro GUJ chorar as pitangas e enfiar palavras na minha boca. O que tem de tao dificil em olhar o indice de metodos, clicar num deles, ver que nao eh aquilo que vc queria, apertar ‘back’ e ir pro proximo?

Lembre-se, vc tem sempre o irb e dezenas de outras coisas legais pra olhar alem de uma documentacao estatica.

Nesse caso eu não tinha idéia por onde começar. Qual o método que me retornaria o binário? Pensei em to_b, mas não tinha. Pensei em each ou each_bit para construir o binário. Nem pensei em to_s porque to_s pra mim não deveria ter parametro. Agora já sei que ele as vezes pode ter um parametro default.

Acho que ao invés do resumo de métodos ser um monte de nomes, poderia ser como Java: nomes + parametros + short description.

(Sem falar da questão dos módulos…)

Sim, o irb ajuda muito.

Olá

Obrigado, não sabia disto. O link é http://www.ruby-doc.org/download/ruby-1.8.6-core-rdocs.tgz

[]s
Luca

Ué, mas o que voce queria em ruby tem exatamente a mesma forma em java. Na documentação do BigInteger tem um método toString(radix) que faz isso, não?

Ao menos nisso, o ruby tem o procedimento que voce quer de forma semelhante a java

http://www.exampledepot.com/egs/java.math/ConvertNum2.html

T+

Eu só queria ter avistado esse parametro mais facilmente, sem quer que passar pela documentação de todos os métodos. Estou comparando as documentações e não as linguagens.

Resumindo:

JavaDoc vc tem Method Summary e Method Details.

http://java.sun.com/javase/6/docs/api/java/lang/Integer.html

Ruby vc tem “uma lista com os nomes e só os nomes” e Method Details.

Ok, não é o fim do mundo… :slight_smile:

Sem comentários… No Flames, It’s only my opinion, BUT…