Hoje vamos conhecer os primos menores dos buggles: as tartarugas. Na verdade, as tartarugas são muito mais velhas que os buggles. Elas foram inventadas nos anos 70 por um cientista do MIT chamado Seymour Papert para ajudar no ensino de programação e os buggles são uma variação da idéia seguinte de Lyn Turbak do Wellesley College.
Tartarugas então, são meio parecidas com buggles, mas menores. Como os buggles, pode mandar que elas se movam para a frente, virem, se movam para trás, etc. Como os buggles, elas deixam uma linha no caminho por onde passam (mas a linha é muito menor).
A principal diferença é que enquanto os buggles podem se mover apenas em ângulos retos, as tartarugas podem se mover em qualquer ângulo especificado por um número real (um double). Isto dá-lhes muito mais liberdade nos movimentos deles. Já os buggles podem fazer vários outros truques, como ler e escrever mensagens, apanhar e soltar objetos e às vezes lidar com paredes existentes nos mundos (mas isto está totalmente além da capacidade das tartarugas).
De um ponto de vista prático, a maioria dos métodos que conhece sobre
buggles ainda funciona com tartarugas, com pequenas adaptações. Em
particular, o método forward()
leva a quantidade de passos a
dar não como inteiro, mas como [!python]point
number[/!][!java|scala|c]double[/!] (veja "Sobre este mundo" para maiores
detalhes).
double x = 3.72; x + 1.234 // Valor = 4.954 x + 2. // Valor = 5.72 (2. significa 2.0) x + 2 // [!java|c]Value = 5.72 (2 convertido automaticamente em 2.0)[/!][!scala]Erro de tipo (o operador + não mistura Double e Int); é obrigatória a conversão manual[/!] x * 2. // Valor = 7.44 x / 2. // Valor = 1.86 [!java|c](int) x[/!][!scala]x.asInstanceOf[Int][/!] // Valor = 1 (“a fazer cast para int”, convertido para integer a truncar) Math.round(x) // Valor = 2 (1.86 arredondado ao inteiro mais próximo) Math.floor(x) // Valor = 1 (1.86 rounded toward minus infinity) Math.floor(-5.12) // Valor = -6 (rounded toward minus infinity) Math.ceiling(x) // Valor = 2 (1.86 rounded toward plus infinity) Math.ceiling(-5.12) // Valor = -5 (rounded toward plus infinity) [!java|c](double) 17[/!][!scala]17.asInstanceOf[Double][/!] // Valor = 17.0 (“feito cast para double”, convertido para double)[/!]
Mesmo este a ser o primeiro exercício da lição de recursividade, o código que tem que escrever não é recursivo. O objetivo é se familiarizar com o mundo da tartaruga antes da coisa começar a ficar séria.
Deve reproduzir uma pintura geometricamente simples de quatro quadrados de comprimento de 100 passos (veja o mundo objetivo para mais detalhes). É obviamente uma boa ideia escrever um método para desenhar um quadrado e então usá-lo no nosso código.