Souza Lucas - Ruby: Aprenda a programar na linguagem mais divertida стр 5.

Шрифт
Фон

Por ser uma linguagem com inferência de tipos, muitos pensam que o tipo não im-

porta para o interpretador como acontece com o PHP. Confuso? Vamos ver isso na

prática.

Se criarmos duas variável em um código PHP qualquer, sendo uma contendo

uma String, como valor 27 e outro de

tipo numérico com valor 2:

<?php

$idade = 27;

$multiplicador = "2";

$idade * $multiplicador;

?>

Ao executarmos o código acima, o resultado será 54. Para o interpretador do

PHP, quando executamos uma operação matemática envolvendo uma variável do

tipo int e uma do tipo String, os valores das variáveis podem ser automatica-

mente convertidos para outros tipos, a fim de possibilitar a operação.

Se executarmos exatamente o mesmo código em Ruby:

idade = 27

multiplicador = "2"

idade * multiplicador

10

Casa do Código

Capítulo 1. Uma introdução prática à linguagem Ruby

Opa! Não funcionou. O interpretador retornou TypeError: String can't

be coerced into Fixnum. O Ruby não permite que uma variável Fixnum seja

somada com outra do tipo String, diferentemente do que ocorre no PHP, que

permite este tipo de operação. Isso acontece porque para o interpretador Ruby é

impossível multiplicar um número com um texto.

Essa característica da linguagem de realizar operações em variáveis de tipos di-

ferentes é o que chamamos de tipagem fraca ou forte. No caso do Ruby, onde o tipo

é determinante para o sucesso da operação, dizemos que a linguagem tem tipagem

forte.

Tendo a tipagem forte em mente, vamos ir mais além. Execute o seguinte código:

idade = 27

idade = "27"

Funcionou?

Este código funciona normalmente, porque não estamos fazendo nenhuma ope-

ração que misture os tipos. O código acima apenas atribui um Fixnum à variável

idade e depois atribui um outro valor, só que do tipo String. Quando a linguagem

permite que o tipo da variável possa ser alterado durante a execução do programa,

dizemos que ela tem tipagem dinâmica.

Em contrapartida, outras linguagens possuem tipagem estática, ou seja, uma vez

que a variável é criada como um int, ela só poderá ser um int. Esse é o caso do

Java, onde o compilador cuida de fazer essa checagem.

Esta é uma das características mais criticadas pelos desenvolvedores que prefe-

rem linguagens com tipagem estática, uma das alegações é que em linguagem com

tipagem estáticas podemos descobrir erros durante a compilação. Porém, veremos

durante o livro que a tipagem dinâmica é uma das características mais poderosas da

linguagem, trazendo tamb;em muitos benefícios.

Vale lembrar que os conceitos forte, fraca, dinâmica e estática não são tão simples

assim. É mais fácil falar se uma linguagem é mais ou então menos fortemente tipada

que outra, por exemplo. Nesse capítulo apenas tocamos de leve nesse assunto.

1.5

Uma linguagem interpretada e com classes aber-

tas

Ruby é uma linguagem interpretada, ou seja, não existe um processo de compilação

para um binário executável, como acontece na linguagem C, por exemplo. Em Ruby,

11

1.5. Uma linguagem interpretada e com classes abertas

Casa do Código

existe um arquivo com a extensão .rb e um programa cujo papel é interpretar o

conteúdo deste arquivo, transformando-o em instruções de máquina e executando

o comportamento esperado.

Vamos para um exemplo prático que precisamos resolver: descobrir o plural de

todas as palavras, por exemplo.

Um caminho natural para solucionar este problema, é criar um método que re-

cebe uma String como entrada e adicione um s após a sua última letra (sim, estou

pensando apenas nos casos mais simples).

Vamos ao código que soluciona este problema:

def plural(palavra)

"#{palavra}s"

end

puts plural("caneta") # canetas

puts plural("carro") # carros

Não se preocupe ainda com o significado do # dentro da String no método

plural, vamos falar bastante dela durante o livro. O puts é um método simples

que pega o argumento passado e joga para a saída padrão. Dentro do IRB, bastaria

escrever plural("caneta") que automaticamente o interpretador joga o resul-

tado no console. Faça o teste!

Olhando este código com cuidado, ele não nos parecerá tão orientado a objetos

assim. Repare que os dados e os comportamentos estão separados, mas podemos

tentar melhorar isso. Já que o método plural age somente na própria String,

nada mais

natural que ele esteja na classe String, assim usaríamos:

puts "caneta".plural

puts "carro".plural

Porém, ao executarmos o código acima receberemos o seguinte erro como re-

torno:

NoMethodError: undefined method `plural' for "caneta":String

Isso significa que objetos do tipo String não possuem o comportamento

plural. Mas espera aí... e se escrevêssemos o método plural dentro da classe

String?

12

Casa do Código

Capítulo 1. Uma introdução prática à linguagem Ruby

class String

def plural

"#{self}s"

end

end

Agora tente executar o código que coloca a String caneta no plural:

puts "caneta".plural # canetas

Agora funciona! O que fizemos foi abrir a classe String durante a execução

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке