Pour ce qui est de la différence entre Python et Ruby, c'est surtout une affaire de goût. Personnelement j'adore le pouvoir d'expression de Ruby. Ça me fait penser (à raison puisque que c'était le but) à la syntaxe de SmallTalk en ajoutant tout un tas de bonnes idées d'autres langages plus convientionnel (Perl pour l'intégration des expressions régulières^Wrationnelles par exemple).
Je trouve la page Wikipédia sur Ruby pas trop mal faite car elle montre assez simplement les petits plus du langage http://fr.wikipedia.org/wiki/Ruby(...) . Par exemple, je trouve l'utilisation des blocs et itérateurs super simple et beaucoup plus lisible que les structures du style 'for ...'. Sans compter le pouvoir de surcharge des classes de base comme en SmallTalk. Je cherchais le moyen de pouvoir ajouter la méthode 'sum' sur un tableau d'entier (pour sommer tous les éléments du tableau), une petite recherche sur Internet m'a donné le code inspiré de SmallTalk suivant :
class Array
def inject(n)
each { |value| n = yield(n, value) }
return n
end
def sum
inject(0) { |n, value| n + value }
end
def mult
inject(1) { |n, value| n * value }
end
end
puts [1, 20, 5, 7].sum # 33
puts [1, 20, 5, 7].mult # 700
puts (1..10).to_a.sum # 55
puts (1..10).to_a.mult # 3 628 800 = 10!
Ce n'est pas grand chose mais c'est toujours agréable d'avoir une si grande liberté d'expression dans un langage interprété. Un autre exemple sympa, c'est la possibilité de récupéré les messages non compris par une classe (method_missing) :
require 'singleton'
class Roman
include Singleton
@@values= {" "=>0, "I"=>1, "V"=>5, "X"=>10, "L"=>50, "C"=>100, "D"=>500, "M"=>1000}
def romanToInt(str)
result=0; str+=" "; flag=0
(0..str.size-2).each do
|i|
if flag==1 then
flag=0
next
end
if @@values[str[i+1,1]]>@@values[str[i,1]] then
result+=@@values[str[i+1,1]]-@@values[str[i,1]]
flag=1
else
result+=@@values[str[i,1]]
end
end
return result
end
def method_missing(methId)
str = methId.id2name
romanToInt(str.upcase)
end
end
puts Roman.instance.DCCCLXXXVIII # 888
puts Roman.instance.MMII # 2002
puts Roman.instance.MDXV # 1515
puts Roman.instance.MCMLXXV # 1975
puts Roman.instance.LXXXVIII # 88
puts Roman.instance.MMMCMXCIX # 3999
puts Roman.instance.MMMDDDCCCLLLVVVIII # 4968
J'ai écris le code 'romanToInt' vite fait, y'a surement moyen de faire beaucoup mieux niveau lisibilité.
Après, je ne connais pas assez Python pour faire une comparaison objective, mais personnelement j'ai tout de suite accroché à Ruby alors que je rechigne toujours à modifier du code Python :/.
[^] # Re: Différence avec Python ?
Posté par pifou . En réponse à la dépêche Sortie de Ruby 1.8.2. Évalué à 2.
class Array def inject(n) each { |value| n = yield(n, value) } return n end def sum inject(0) { |n, value| n + value } end def mult inject(1) { |n, value| n * value } end end puts [1, 20, 5, 7].sum # 33 puts [1, 20, 5, 7].mult # 700 puts (1..10).to_a.sum # 55 puts (1..10).to_a.mult # 3 628 800 = 10!Ce n'est pas grand chose mais c'est toujours agréable d'avoir une si grande liberté d'expression dans un langage interprété. Un autre exemple sympa, c'est la possibilité de récupéré les messages non compris par une classe (method_missing) :require 'singleton' class Roman include Singleton @@values= {" "=>0, "I"=>1, "V"=>5, "X"=>10, "L"=>50, "C"=>100, "D"=>500, "M"=>1000} def romanToInt(str) result=0; str+=" "; flag=0 (0..str.size-2).each do |i| if flag==1 then flag=0 next end if @@values[str[i+1,1]]>@@values[str[i,1]] then result+=@@values[str[i+1,1]]-@@values[str[i,1]] flag=1 else result+=@@values[str[i,1]] end end return result end def method_missing(methId) str = methId.id2name romanToInt(str.upcase) end end puts Roman.instance.DCCCLXXXVIII # 888 puts Roman.instance.MMII # 2002 puts Roman.instance.MDXV # 1515 puts Roman.instance.MCMLXXV # 1975 puts Roman.instance.LXXXVIII # 88 puts Roman.instance.MMMCMXCIX # 3999 puts Roman.instance.MMMDDDCCCLLLVVVIII # 4968J'ai écris le code 'romanToInt' vite fait, y'a surement moyen de faire beaucoup mieux niveau lisibilité. Après, je ne connais pas assez Python pour faire une comparaison objective, mais personnelement j'ai tout de suite accroché à Ruby alors que je rechigne toujours à modifier du code Python :/.