DEV Community

Discussion on: Pitch me on Ruby

Collapse
 
pinotattari profile image
Riccardo Bernardini
  • Minimal surprise and a very consistent structure.
  • It has a flexible syntax that allows you to use the best solution depending on the context, for example,
a.each {|x| puts(x)}
Enter fullscreen mode Exit fullscreen mode

vs.

a.each do |x|
   puts(x)
end
Enter fullscreen mode Exit fullscreen mode

or

if foo 
   return
end
Enter fullscreen mode Exit fullscreen mode

vs.

return if foo
Enter fullscreen mode Exit fullscreen mode
  • Moderately strongly typed; not as much as Ada, but at least it does not try to be "smart" converting everything to everything else (yes, JS and PHP, I am looking at you...)
  • Duck typing is maybe the best middle ground for a language like Ruby: it offers you some protection, while allowing some flexibility
  • Strong reflection features. Although I wouldn't use them for critical code, they are too fun to use 😄
  • yield allows for some nice construct like the File.open do ...
  • It does not make spaces significant... well, almost. If you put some space between a procedure name and the parenthesis, you could have some trouble; but at least it is not like in Python or Occam where white space plays a critical role
  • Really nice for programs that are too complex for a shell script, but that would be an overkill to write them in something more structured (e.g., Ada, C, C++)
  • Regexp make really easy to process text files. For a small script to extract data from a text file, Ruby is my first choice

On the cons side, I would not suggest it for medium complexity code and/or code with a "long life" that will require maintenance in the future. Duck and dynamic typing is nice for its flexibility, but when the code is too complex it gets difficult to keep track of the type of the different variables and this makes maintenance more difficult (at least, according to my experience)