PortalPortal  InícioInício  FAQFAQ  BuscarBuscar  Registrar-seRegistrar-se  Conectar-se  

Compartilhe|

Apostila RGSS/RGSS2 | Cap.3 - Manipulando e Verificando Dados

Ver o tópico anterior Ver o tópico seguinte Ir em baixo
AutorMensagem
zecomeia
avatar
RPG Maker
RPG Maker

Masculino Postagens : 51
Data de inscrição : 20/08/2009


Ver perfil do usuário http://colmeia-do-ze.blogspot.com/
MensagemAssunto: Apostila RGSS/RGSS2 | Cap.3 - Manipulando e Verificando Dados Ter Dez 01, 2009 4:26 pm

3.Manipulando e Verificando Dados


Começaremos agora a colocar em prática o pouco que aprendemos.
No decorrer do capítulo aprenderemos alguns métodos de Ruby utilizados para verificar valores; comentários; e conheceremos as palavras que a linguagem Ruby reserva para si.

Palavras Reservadas

A seguir a lista de palavras reservadas, ou seja, palavras que Ruby reserva para si e portanto não podem ser usadas para dar nome ao outro objeto.

BEGIN class ensure nil self when

END def false not super while

alias defined for or then yield

and do if redo true

begin else in rescue undef

break elsif module restry unless

case end next return until



Comentários

Comentários são trechos de código que não interferem na execução do programa, então podemos usá-los para fazer anotações em trechos do programa quando precisamos dar atenção especial àquele trecho ou simplesmente para descrever o que o mesmo faz. Esse recurso é muito útil e ajuda muito a organizar o programa, e também ajuda a relembrar o “porquê daquela linha”, por exemplo, imagine que estava desenvolvendo um programa e por algum motivo teve que parar por um bom tempo, se deixou comentário em seu código será mais fácil de relembrar o que cada coisa faz.
Para comentar uma linha do código, coloque # antes da mesma. Lembre-se esse tipo de comentário é válido para apenas uma linha. Exemplo:


OBS:
Perceba ao escrever no editor de scripts do RPGMaker, o texto fica colorido conforme a sintaxe. No caso, uma linha comentada recebe a coloração verde como na imagem acima. Isso acontece com outras partes da sintaxe também, como por exemplo, palavras reservadas ficam em azul.

Existe também um comando para comentários multi-linhas, usada para fazer comentários longos(com várias linhas). Mas este comando não é usada apenas para isso, também serve para documentação embutida pela ferramenta rdtool, mas isso não será abordado(talvez futuramente).
O comando é composto por delimitadores, um para indicar o início e outro para o fim, são eles =begin e =end, respectivamente. O que estive escrito entre esses delimitadores será considerado comentário e não irão interferir do programa. Mas existem alguns cuidados a tomar. É obrigatório escrever o delimitador no início da linha(colado no início da linha), e para cada =begin tem que existir um =end, lembrando que se ao colocar =begin dentro de um outro comentário também o torna um comentário. Exemplo:



OBS: escrever qualquer coisa com exceção da palavra =end no início, pois isso encerraria o comentário.


print( ) puts( ) p( )

Bom, até agora usamos o método printvárias vezes. O que o método fez foi nos mostrar em uma message box o valor de uma variável, ou até mesmo um dado escrito diretamente(sem precisar de variável). E é isso mesmo que ele faz, assim como o método p( ). Veja os exemplos

Embora com ou sem parênteses funcione, é recomendável utilizá-los

Já o método puts( ), não dos mostra a janela com o valor. Bom normalmente os métodos print( ) e p( ) , do ruby, também não, mas com modificações feitas neles pelo RGSS os valores são exibidos na janela. Também é possível alterar o método puts( ) de ruby para mostrar a mensagem em uma janela, mas não veremos isso agora para não “embolar” a cabeça de ninguém. Resumindo estes três métodos nos retorna o valor empregado como argumento(o valor dentro do parênteses ou na frente do método) à eles na saída padrão, mas que pode ser alterada para uma message box por exemplo.

Operadores

Os operadores são utilizados para manipular os dados , por exemplo, construir expressões matemáticas, operações lógicas, comparar valores, etc. É essencial o uso destes para construir nosso programas e portanto


Operadores aritméticos


Veremos a seguir operadores aritméticos e suas funções.

OperadorFunçãoExemploRetorno
+Adição1+12
-Subtração1-10
*Multiplicação1*11
/Divisão1/11
%Resto da Divisão1%10
+Mais(unário)+11
-Menos(unário)-(1)-1
**Exponenciação2**38

Atente para as coluna “Exemplo" e "Retorno”, ela mostra exemplos do que o operador faz, onde "Exemplo" é a expressão utilizando o operador em questão, e "Retorno" é o resultado da expressão, ou seja, o valor que será retornado pela expressão, e que podemos usá-lo de imediato ou *armazená-lo em uma variável para uso posterior.

*A partir deste ponto sempre irei colocar, em relação a variável, como armazenar informação na variável e não fazer referência como anteriormente, pois a explicação do capítulo 2 sobre variáveis foi para fins didáticos e após ter entendido não é preciso ficar se referindo desta forma à função de uma variável, assim facilitamos o trabalho daqui em diante.

Os operadores anteriormente mostrados são operadores aritméticos, para expressões matemáticas, mas o operador “+” pode ser usado na concatenação de strings também.

O código acima abrirá uma janela do Windows com os três trechos juntos escritos.

Operadores relacionais

Agora uma tabela com alguns operadores relacionais, eles servem para comparar valores. Lembre-se aí não estão todos.
OperadorFunção
>Maior que
>=Maior que ou igual a
<Menor que
<=Menor que ou igual a
!=Diferente de
==Diferente de

Exemplos:

Repare que todos retornam valores booleanos(TrueClass ou FalseClass).

Operadores condicionais ou lógicos

OperadorFunção
and“e” lógico/condicional
&&“e” lógico/condicional
or“ou” lógico/condicional
||“ou” lógico/condicional
notNegação
&“e”
|“ou”
^“ou exclusivo”!Negação

Não é necessário usá-los em conjunto com operadores relacionais, embora sejam comumente usados.
São conhecidos como operadores condicionais porque impõem uma condição para o retorno, onde cada operador tem uma condição diferente.

and :
Este operador avalia duas expressões, uma que o precede e a que vem a frente do and, e verifica se as duas expressões retornam true para então a operação retorna true também, se pelo menos uma das expressões retornar false, a operação também retornará false independente da outra expressão retornar true ou false.Exemplos:
[img width=437 height=500]http://img686.imageshack.us/img686/1828/img5cap3.jpg[/img]
*Perceba que foram necessários parênteses no código, sem eles não seria possível ver o verdadeiro efeito do operador direto como foi feito.

&& :
Tem o mesmo efeito do operador and.

or :
Avalia duas expressões da mesma forma que o operador and, porem este verifica se a primeira expressão ou a segunda expressão tem valor true para o operador poder retornar true, ou seja, pelo menos uma das expressões tem que ser verdadeira para a operação retornar true, consequentemente, se nenhuma das expressões forem true a operação retornará false. Exemplos:
[img width=430 height=500]http://img163.imageshack.us/img163/928/img6cap3.jpg[/img]
*Perceba que foram necessários parênteses no código, sem eles não seria possível ver o verdadeiro efeito do operador direto como foi feito.

|| :
Tem o mesmo efeito do operador or.

not :
Este operador avalia apenas uma expressão. Como descrito na função, ele é um operador de negação, portanto ele nega o valor, e essa negação é simplemente uma inversão do valor, ou seja, se o valor for true será invertido para false, e se for false será invertido para true. Exemplos:

*Perceba que foram necessários parênteses no código, sem eles não seria possível ver o verdadeiro efeito do operador direto como foi feito.

! :

Tem o mesmo efeito do operador not.

& :
Este é um pouco mais complicado. Quando se trabalha apenas com lógica(true ou false) o operador tem a mesma função do &&. Veja os exemplos:


Ao trabalhar com números, as coisas mudam um pouco. Primeiro os números envolvidos na operação são transformados em números binários para o operador iniciar uma operação lógica do tipo and bit a bit, ou seja, vai verificar aplicar a lógica and comparando cada dígito do número para formular uma resposta de retorno que será transformada para decimal novamente. Exemplos:

Antes de iniciar a análise dos exemplos, devo citar que é preciso ter em mente que um número em binário é apresentado apenas pelos números 0 e 1, e que para efeito de calculo, considere 1 como true e 0 como false, isso para facilitar o entendimento do operação and bit a bit.

*OBS: O bit pode ser encarado como o número de dígitos do número binário.
*OBS: Conversões de decimal para binário e vice-versa são necessárias porque a linguagem que a máquina utiliza é diferente da humana, e usa um outro sistema numérico conhecido como binário que utiliza apenas de 0 e 1 para construção de seus números. Então a comunicação homem-máquina-homem com maior facilidade implica nestas conversões.

Vamos analisar a primeira operação. Primeiro os números foram transformados de decimais para binários:
DECIMALBINÁRIO
151111
11

Em seguida é feita a operação lógica and bit a bit:

1111 and 0001 => 1111
0001
-------
0001

O resultado agora é convertido para decimal novamente e impresso na janela gerada pelo comando printpara podermos ver o valor de retorno:
BINÁRIODECIMAL
00011

Ao testar o código verá que será exatamente 1 o valor retornado.

Agora demonstrando o segundo exemplo:
Primeiro os números foram transformados de decimais para binários:
DECIMALBINÁRIO
111011
141110

Em seguida é feita a operação lógica and bit a bit:

1011 and 1110 => 1011
1110
-------
1010

O resultado agora é convertido para decimal novamente e impresso na janela gerada pelo comando print para podermos ver o valor de retorno:
BINÁRIODECIMAL
101010

Ao testar o código verá que será exatamente 10 o valor retornado.

*OBS: Escrever 0001 ao invés de escrever apenas 1, foi apenas uma forma mais simples de explicar.

Mesmo hoje em dia ser muito fácil encontrar calculadoras que façam essas conversões para você(geralmente qualquer computador vem com um software de uma calculadora do tipo), seria legal como é feita estas conversões na mão.

DECIMAL para BINÁRIO

Simplesmente deve dividir o número que deseja converter para binário, dividendo, por 2(porque que números binários são de base 2, lembre-se BI=2), divisor, não se importando com o resto da divisão(o resto será 1 quando existir) caso exista(ele será usado depois), evitando assim números com vírgula. O resultado da divisão(quociente) será o nosso novo dividendo desde que ele não valha 1. Este processo deve ser repetido até o quociente valer 1. Então é preciso juntar o valor deste quociente final que sempre será 1 com os valores de resto das divisões anteriores, seguindo da última para a primeira. Uma ilustração para ajudar a entender:


BINÁRIO para DECIMAL

Para essa conversão é preciso conhecer exponenciação. Primeiro um exemplo em seguida um explicação, será melhor fazer desta forma para explicar:

*OBS: o sinal ** representa elevar a uma potencia, portando, 2**2 é o mesmo que 2², ou 2 elevado a 2.

Passando 1111 para decimal:

1 x 2**3 + 1 x 2**2 + 1 x 2**1 + 1 x 2**0 = 15

Passando 1110 para decimal:

1 x 2**3 + 1 x 2**2 + 1 x 2**1 + 0 x 2**0 = 15

Pelos exemplo acima, é possível perceber que é somado o valor resultante de cada bit, e o valor de cada bit muda conforme sua “posição”(qual digito) no número, da mesma forma que no sistema decimal o primeiro digito vale unidades, o segundo dezenas, terceiro centenas, etc. Só com os números binários o primeiro digito vale 2 elevado a 0, o segundo 2 elevado a 1, o terceiro 2 elevado a 2, e assim segue.
Assim como nos decimais, 0(zero) dezenas significa que não tem dezenas, nos binários o bit 0 significa que não tem aquele digito, então não vamos incluí-lo no cálculo, para isso bastou multiplicar por 0(zero) o valor da potencia resultante da casa em questão.
Isso é o básico sobre a conversão entre estes dois tipos, ainda existem alguns detalhes com relação a conversão do número quando há virgula. Para não continuar a prolongar está explicação que foge um pouco do assunto em questão é melhor que os interessados em saber mais sobre essas conversões tentem “andar por suas próprias pernas“, pesquisando por conta própria, ou até mesmo, para os mais empolgados, tentar descobrir sozinho apenas analisando o que já foi passado.

Continuando com o operador &, não utilize para trabalhar diretamente com objetos do tipo string, pois isso ocasionará erros.

Existe uma situação onde este operador age diferente das situações anteriormente vistas. Quando está trabalhando com objetos do tipo array.
Nessa situação, ele busca a intersecção entre as duas arrays avaliadas, ou seja, valores em comum entre elas. Então não importa o tipo de objetos armazenados nessa array já que o operador não precisa “mexer“ nestes valores.
Ao final, o operador retorna como resposta uma array com os valores em comum entre as duas arrays avaliadas, organizadas conforme os valores estão organizados na primeira array da operação e sem repetir valores iguais mesmo que exista a repetição do mesmo valor várias vezes nas duas arrays avaliadas. Se não houver valores em comum a função retorna uma array vazia. Exemplos:


Na imagem do código acima foi colocado na frente de cada operação um comentário seguido do valor que será retornado(como vem sendo feito em todos exemplos), mas é importante ressaltar que o valor retornado é um array carregada com os valores citados(isso ajuda a explicar o porque do “13“, por exemplo, que na verdade é “1” e “3”).

| :
Funciona da mesma forma que o operador &, porém, ao invés de fazer a operação lógica and executa-se a operação or, tanto para o bit a bit, como para valores lógicos(true e false), tanto para arrays. Exemplos:

Perceba como o resultado é idêntico ao resultado dos exemplo com operador or(||).


O procedimento é idêntico ao do operador &, porém, a operação bit a bit usou a lógica or ao invés de and. Veja:
DECBIN
141110
30011

1110 or 0011 => 1110
0011
------
1111

DECBIN
111115


Ao trabalhar com arrays, ao contrario do operador & que buscava a intersecção entre as arrays, o operador “|” busca a união entre elas, formando uma nova array seguindo as mesmas regras de organização do operador &: ordem em que aparecem os valores da primeira array da operação; sem valores repetidos mesmo que hajam vários iguais nas duas arrays; o valor retornado é um array com os valores dos dois operandos. Caso a array retorne vazia, significa que não existem valores em nenhuma das arrays da operação(nil).

*OBS: também não é possível operar valores do tipo string com este operador.

^ :
Funciona da mesma forma que os operadores & e |, porém, executa-se a operação lógica conhecida como ou exclusivo, tanto para o bit a bit, como para valores lógicos(true e false).
O operador ou exclusivo, quando usado com valores lógicos(true e false), retorna verdadeiro quando as duas expressões avaliadas forem diferentes(uma true e a outra false), e retorna false quando as duas expressões são iguais(as duas são true ou as duas são false). Exemplos:


Para a operação bit a bit, assim como foi visto anteriormente, considere nos números binários “0” como false e “1” como true para a comparação bit a bit da operação com números, seguindo aquele mesmo processo dos anteriores.


Resolução:
DECBIN
141110
30011

1110 ou exlusivo 0011 => 1110
0011
------
1101

BINDEC
110113


*OBS: também não é possível operar valores do tipo string com este operador.
*OBS: não é possível operar arrays com este operador.


Operadores de deslocamento

OperadorFunção
>>Desloca bits a direita
<<Desloca bits a esquerda


Eles servem para deslocamento de bits. Assim como os operadores bit a bit vistos anteriormente, estes também necessitam de conhecimento sobre binário e decimal.

O operador “>>“ avalia duas expressões, uma que o precede e outra logo em seguida do operador(EX: A>>B). Onde B é o número de bits que serão deslocados a direita em A, isso significa que B representa quantos dígitos serão “empurrados” para fora do número em binário. Exemplo:


O que aconteceu foi o seguinte:
DECBIN
151111



Simplesmente é isso o que é feito. Lembre-se, este operador só funciona com dados do tipo Integer(números inteiros).

O operador “<<“ também avalia duas expressões, uma que o precede e outra logo em seguida do operador(EX: A>>B). Onde B é o número de bits que serão deslocados a esquerda em A, isso significa que B representa quantos dígitos serão “adicionados” ao número em binário(os bits adicionados tem valor “0“). Exemplo:


O que aconteceu foi o seguinte:
DECBIN
151111



Simplesmente é isso o que é feito. Lembre-se, este operador só funciona com dados do tipo Integer(números inteiros).

[size=12pt]
Operadores de Atribuição
[/size]

O principal operador de atribuição é o “=“, ele serve para atribuir valor a um objeto.
Para entender os outros operadores é preciso entender este, que por sinal é muito simples. Já vimos ele em funcionamento no capítulo 2 quando atribuímos valores as nossas variáveis. É importan ressaltar que o operador = não é a mesma coisa que o sinal = que usamos na matemática, este ultimo diz que duas coisas são iguais, já aqui nosso operador, de forma curta e grossa, diz para a expressão da esquerda ter o valor da expressão da direita. Exemplos:


Dando atenção especial para a linha:

var = var + 2

Podemos começar a entender os outros operadores de atribuição.
O que acontece é que o novo valor da variável var é igual a “var + 2”.
E existe uma operador equivalente a isto, o operador “+=“, veja como ficaria o exemplo acima utilizando este operador:

var += 2

O resultado será o mesmo. O único cuidado que deve ser tomado é a certeza do objeto var ser do tipo que o operador funcione.
A tabela a seguir mostra vários operadores seguem a mesma linha, a diferença está na operação que eles executam:

ExemploEquivalente
var += 2var = var + 2
var -= 2var = var - 2
var *= 2var = var * 2
var /= 2var = var / 2
var %= 2var = var % 2
var **= 2var = var ** 2
var &= 2var = var & 2
var &&= 2var = var && 2
var |= 2var = var | 2
var ||= 2var = var || 2
var >>= 2var = var >> 2
var <<= 2var = var << 2

Comentários:
Os códigos estão sendo escritos no editor de scripts do RPGMakerXP e em seguida é tirado uma screenshot do código para servir de exemplos na apostila, ou seja, sendo uma imagem o leitor não poderá copiar os códigos para testar os exemplo. A idéia e fazer com que o leitor escreva ele mesmo os códigos ao invés de apenas copiar e colar. A partir do próximo capítulo os códigos começaram a ser escritos, pois a esta altura o programador já deve ter se familiarizado um pouco com o editor e percebido que as vezes quando estamos escrevendo acabamos errando e isso interfere em nosso programa, desta forma aprendeu como corrigir alguns erros.

Agradecimentos:
zecomeia
livro “Ruby: Investigando a Linguagem” por Ivan Mecenas (Editora Alta Books)




scripts RGSS, Resources, Tutorials and Translations by zecomeia is licensed under a
Creative Commons Atribuição-Uso Não-Comercial-Compartilhamento pela mesma Licença 2.5 Brasil License.
Permissions beyond the scope of this license may be available at Santuário RPG Maker
Voltar ao Topo Ir em baixo
Angel Warrior
avatar
Intermediário
Intermediário

Masculino Postagens : 98
Data de inscrição : 09/05/2009
Emprego/lazer : O meu lazer é mexer no maker e conversar com outros makers pelo menos uma das coisas que costumo fazer ^^
Mensagem Pessoal : Não sou muito humorado, são pouquíssimas as brincadeiras que eu aceito, pouquíssimas mesmo.


Ver perfil do usuário
MensagemAssunto: Re: Apostila RGSS/RGSS2 | Cap.3 - Manipulando e Verificando Dados Qui Jan 21, 2010 1:34 pm

Parabéns pelo trabalho bem feito, assim não tem como não aprender o básico de RGSS ^^ eu sei que talvez eu não possa dar rep+ mais rep+ pra você meu amigo.
Voltar ao Topo Ir em baixo

Apostila RGSS/RGSS2 | Cap.3 - Manipulando e Verificando Dados

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo
Página 1 de 1

Permissão deste fórum:Você não pode responder aos tópicos neste fórum
The World of EverGrand :: Programação em Linguagens :: Ruby Game Scripting System :: Programação-