segunda-feira, 29 de setembro de 2008

[Unit-1 | Lição-5] Os possíveis valores das variáveis

As variáveis podem ter vários tipos diferentes de valores, cada tipo de variável pode conter qualquer tipo de valor desejado. Os principais tipos de valores que as variáveis podem conter são: Valores Numéricos, Strings, Expreções Regulares, Arrays, Hashes, Ranges, Símbolos e Pseudo-variáveis, entre outras classes.

Valores Numéricos
Valores Numéricos são aquelas variáveis que representam números, exatamente igual as variáveis do RPGMaker, elas podem representar números inteiros, decimais e até mesmo negativos. É importante lembrar que as variáveis do RPGMaker são alojadas numa variável global pelo RGSS, exatamente por isto que é possível a mudança do valor das variáveis do RPGMaker através dos scripts, logo, tudo que o comando “Alterar Variáveis” dos eventos faz é mudar o valor de uma variável global (algo que também poderia ser feito pelo comando “Chamar Script”, já que tudo que ele faz é alterar o valor de uma variável).
Exemplo de Valor Numéricos:

0
16
-42
# Todos estes acima são valores Numéricos dados à variáveis.
OBS: O Ruby ignora qualquer underline(_) que esteja no meio de um valor numérico, isso pode ser útil para separar valores grandes, como no exemplo a seguir:
1_000_000_000 # Ambas as formas de escrever
1000000000 # resultarão no valor de um bilhão.

Strings
Strings são, basicamente, textos (expreções literárias). As strings podem ser usadas colocando-se aspas ou aspas-duplas ( ‘ e “ ) entre o texto.
Exemplos de Strings:
‘Esta é uma String’
“Esta também é uma string”

A diferença de usar aspas ou aspas-duplas é que com aspas-duplas podem ser utilizados códigos dentro das strings, já textos em aspas comuns irão mostrar exatamente o que está dentro das aspas.
Para melhor compreender a diferença entre um e outro crie um novo projeto no RMXP ou RMVX, abra o editor de scripts neste projeto e crie um novo script acima de todos os outros, então cole o exemplo a seguir:
Exemplo:
sabor = "doce."
print 'Suco #{sabor}'
print "Suco #{sabor}"

OBS: Note que também aproveitei para testar o método print da aula anterior.
Ao testar o projeto aparecerão duas janelinhas do windows uma após a outra, cada uma com uma única opção("OK"), istoa contece por que o método print foi utilizado duas veses no exemplo acima. Cada uma das veses que esta janelinha apareceu foi para mostrar a string que está logo após o método print no exemplo acima. Na primeira aparecerá "Suco #{sabor}" e na segunda "Suco doce", isso acontece porque da primira vez foi utilizado uma string com uma única aspa e na segunda uma string de aspas duplas, possibilitando o uso do comando '#{sabor}'(comando que será esplicado futuramente, por agora basta saber a diferença entre strings com uma aspa e strings de aspas duplas).


Expressões Regulares
Qualquer texto representado dentro de barras ( / ) são consideradas Expreções Regulares. Expressões Regulares são valores muito complexos, mas muito importantes para criação de determinaods scripts, e portanto, serão melhor esplicados somente em aulas futuras.
Exemplo de expressão regular:
/meu nome é DarkChocobo, e não Dark Chocobo u_u/

Array
Array é um tipo de valor muito interessante, pois ele em si não tem qualquer valor, na verdade as Array servem para guardar vários valores em uma única variável, incluindo outras Arrays. As Arrays podem guardar uma quantidade ilimitada de valores em uma única variável, colocando estes valores numa ordem específica dentro de chaves, cada valor é separado por uma vírgula.
OBS: É importante lembrar que na da array pode-se guardar qualquer tipo diferente de valor, incluindo outras Arrays.
Exemplo de Array:
[0, 16, -42]
['Esta é uma String', "Esta também é uma string", 'E esta é ' + 'outra string.']
[16, "Suco doce.", -42, 1_000_000_000]
# Todas estas acima são Arrays.
# Note como cada valor é separado por vírgula independente do tipo de valor.

Como os valores da Array ficam em grupo, cada um deles tem um ID (é o número de sua ordem na lista, começando do 0)
Exmeplo 1:

[0, 16, -42]
# Nesta Array, 0 (zero) tem ID 0, pois é o primeiro da lista.
# 16 tem ID 1, pois é o segundo.
# -42 tem ID 2, pois é o terceiro.
# Agora vamos para uma outra Array:
[16, "Suco doce.", -42, 1_000_000_000]
# Nesta Array, 16 tem ID 0, pois é o primeiro da lista.
# "Suco doce." tem ID 1
# -42 tem ID 2
# 1_000_000_000 tem ID 3

Exemplo 2:
[4, [0, 16, -42], 'Suco doce.', 1_000_000_000]
# Preste bem atenção no valor de ID 1 desta Array.
# O valor de ID 1 é: [0, 16, -42]
# É uma Array dentro da própria Array.
# Neste caso ela funcionará do mesmo jeito, sem qualquer problema.
OBS: Note que, como as Arrays não têm limite de tamanho, uma Array pode conter quantas Arrays você quiser dentro dela, e estas Arrays podem, por sua vez, ter outras Arrays dentro de si e assim por diante (apesar de isso não ser nem um pouquinho comum de encontrar ^^)


Hash
Hashes são muito parecidas com as Arrays pelo fato delas também guardarem vários valores dentro de si, porém, as Hashes, diferente das Arrays, tão têm uma ordem fixa por IDs, cada um de seus valores é representado por um número ou uma string.
Para criar uma hash é utilizado chaves( "{" e "}" ), diferente de colchetes como é com arrays. Deve-se colocar, para cada valor, o número ou string que vai representar o calor e depois um "=>" e então o valor a guardar na hash. A princípio parece ser um tanto complicaod mas com o tempo acostuma.
Exemplos de Hash:
{ 0 => 0, 1 => 16, 2 => -42 }
{ "string" => 36, 45 => [1_000_000] }

Se você não entendeu muito sobre hash não se preocupe, hashes são mais complexas, e seu uso não é tão comum, hashes serão melhor esplicadas em aulas futuras.


Range
Range são operadores utilizados entre dois valores para determinar um novo valor que seria todos os valores entre os dois valores determinados. Simplificando, uma range é todo o valor entre um início e um fim especificado. Uma range é identificada por reticências (...) ou dois pontos finais (..), no caso da reticências, a range terá o valor inicial até o final menos 1, mas nos dois pontos duplos a range terá o valor exato entre os dois especificados. (Eu sei que está meio difícil para entender, mas tudo ficará mais simples após o exemplo)
Exemplo:
1 ... 20 # Neste caso, a range terá o valor ENTRE 1 e 20 (de 1 a 19)
1 .. 20 # Neste caso, a range terá todo o valor de 1 à 20

Símbolos
Símbolos são o único tipo de valor com que vocês
não devem ter qualquer tipo de preocupação, eles são instâncias de uma
classe interna do RGSS e são os únicos objetos (do RGSS) que irão
voltar exatatamente da forma que são sempre que forem chamados.
Exemplos de Símbolos:
:class
:lvar
:method
:$gvar
:@ivar
:+

Pseudo-Variáveis
Diferentes dos valores vistos acima, estes são valores especiais conhecidas como Pseudo-Variáveis.
Pseudo-Variáveis não podem ser alteradas. As Pseudo-Variáveis são:
self, nil, true e false.
Self: Self é o próprio objeto, exemplo:
as variáveis tambémpodem representar classes(mas isso será visto na
próxima aula), então quando você escreve ‘self’ dentro desta classe,
está se referindo à variável que está representando esta classe. Não
irei me aprofundar neste tipo de valor, pois para isso, primeiro você
deve saber sobre classes, que só serão dadas na próxima aula.
Nil: Sempre que uma variável não declarada for chamada, ela será
considerada Nil, logo, nil pode ser considerado como um NADA!, como se
a variável não tivece nenhum valor (nem zero).
True/False: São valores especiais que significam simplesmente Verdadeiro (true) ou
Falso (false), são usados em ocasiões especiais, como em condições para
definir coisas como por exemplo se uma janela de comando estiver ativa
ou não. Estes valores são utilisados em uma variável global para
representar as Switches do RPGMaker (true = ON, false = OFF), logo,
tudo que o comando “Alterar Switches” dos eventos faz eh alterar o
valor de uma variável global de true para false(e vice-versa) do mesmo
jeito que o comando “Alterar Variáveis” já citado acima.