:: Topo :: doCoding :: Linguagens de Programação :: Ruby :: FORPC101 ::

Week-01

Apesar dos textos referirem-se sobretudo à versão 1.8.6 do Ruby (MRI) também foi dito que todo o código é compatível com a versão 1.9.

É mencionado usar-se como ambiente de aprendizagem o Windows, com o Ruby - One-Click Installer - que por omissão vem como o SciTE.

Aprendizagem

A cópia do código das lições para o Geany - ou outro editor - vem com cada linha prefixada com ”# ”, o que é uma chatice para remover. Isto porque os comentários Ruby também começam com o caracter ”#”. Além disso, aconteceu em algumas ocasiões, em vez de ”# ” vir prefixada cada linha com o número de linha, alinhado à esquerda.

  1. Para já, o Ruby parece-me uma boa linguagem orientada a objectos, sem as “limitações” ou “constrangimentos” de outras - tais como C++ ou Java. Tudo são objectos, incluindo números. E sendo uma linguagem “aberta” é possível - e fácil - extender mesmo as classes core da linguagem.
  2. Com Ruby não tenho problemas em esquecer-me de terminar um statement (”;”) - nem devo, sequer - e também posso quebrar uma linha comprida em várias “sub-linhas” (“\”).
  3. A precedência de operadores é algo complexa, mas rapidamente entendida. É um bom ponto a favor da linguagem mas também pode induzir “novatos” em erro.
  4. A classe String é muito poderosa e flexível. Uma das melhores, pelo menos é a melhor que conheço, e tal como em Java são “mutáveis”.
  5. Os operadores de incrementar (++) e decrementar (–) não estão disponíveis em Ruby.
  6. printf() - idêntico a C ou a Perl. Muito bom.
  7. Equivalente loop for:

    step

    1.step(100, 10) {|i| print i, " " }
  8. local_variables() - imprime as variáveis de scope local.
  9. system() - para executar comandos “shell”. Muito bom.

Exercícios

Exercício 1

exercise-01.rb

=begin
What do you think is the output of this program? Why?
Goal: Understanding operator precedence and association.
=end
 
y = false
z = true
 
x = y or z
puts x
# outputs false, because "=" (assignment) has higher precendence than "or"
 
(x = y) or z
puts x
# outputs false
 
x = (y or z)
puts x
# outputs true, because "(...)" has the highest precedence.
 
x = y || z
puts x
# outputs true, because "||" has higher precendence than "=" (assignment).

Exercício 2

exercise-02.rb

=begin
The following program prints the value of the variable. Why?
Read up the Ruby documentation and try and find the answer.
=end
 
my_string = 'Hello Ruby World'
 
def my_string
	'Hello World'
end
 
puts my_string
# outputs Hello Ruby World
 
puts my_string()
# outputs Hello World

Exercício 3

exercise-03.rb

=begin
Read up the sprintf documentation and find out the output being printed by this Ruby code.
Goal: To realize that the Ruby documentation is at times incomplete or not clear.
=end
 
puts "%05d" % 123
# outputs 00123: number formatted with 5 digits and padded left with zero's.
 
puts "%05d" % 12.3
# outputs 00012: decimal part is disregarded when printing an integer.

Exercício 4

exercise-04.rb

=begin
Write a Ruby program that displays how old I am, if I am 979000000 seconds old.
Note: To format the output to say 2 decimal places, we can use the Kernel's format method.
For example, if x = 45.5678 then format("%.2f", x) will return a string 45.57
=end
 
# age_in_years = age_in_seconds / 60 / 60 / 24 / 365
age_in_seconds = 979000000
age_in_minutes = age_in_seconds / 60
age_in_hours = age_in_minutes / 60
age_in_days = age_in_hours / 24
 
age_in_years = age_in_days / 365
puts 'I am ' + format("%.2f", age_in_years) + ' years old...'
# Without an explicit Float all calculation are done with integers.
 
age_in_years = age_in_days / 365.00
puts 'I am ' + format("%.2f", age_in_years) + ' years old...'
# With an explicit Float the result is more accurate.

Exercício 5

exercise-05.rb

=begin
Write a Ruby program that tells you how many minutes are there in a year (do not bother right now about leap years etc.).
=end
 
# minutes_in_year = 365 * 24 * 60
days_in_year = 365
hours_in_days = days_in_year * 24
minutes_in_days = hours_in_days * 60
puts 'There are ' + minutes_in_days.to_s + ' in a year'

Questionário

Referências

Considerações

Pontos Altos

Esta secção regista o que considero serem os pontos altos da linguagem Ruby quando comparada com outras linguagens que conheço.

Pontos Baixos

Esta secção regista o que considero serem os pontos baixos da linguagem Ruby quando comparada com outras linguagens que conheço.

 
docoding/languages/ruby/forpc101/week-01.txt · Modificado em: 2008/09/25 10:10 por straider     Voltar ao topo