Registrarse

[RPG - Scripting] [Escuela]Base Scripting Essentials - Clase 3

Estado
Cerrado para nuevas respuestas.

Jessie

What goes around, comes around

Clase 3 : Variables


Objetivo​

El objetivo de la clase es enseñar la manera correcta de definir y utilizar variables.

Introducción​

Como ya hemos visto funciones/métodos, class y module en clases anteriores, ahora toca ver algo importante, variables. Las variables pueden ser nombradas de diferentes maneras y son de gran utilidad, pueden tener diversos valores ya sean String, Integer, Symbol u otros tipos de objetos.
En la clase anterior vimos como crear mensajes de cuadro de texto, ahora veremos como facilitar su uso al emplear variables.
Para mejorar la comprensión del tema, he agregado temas adicionales al temario.

3.1 Variable y Constante​

Antes que nada, necesitamos definir la diferencia entre una variable y una constante. Tanto una variable como una constante son objetos tipo Symbol que son capaces de almacenar información. La diferencia entre estos dos, es la manera en que se emplea, las variables, como su nombre lo indica, pueden tener un valor que puede variar, mientras que una constante siempre tendrá el mismo valor bajo cualquier circunstancia.

Para evitar que el valor de una constante pueda ser modificada, esta no puede estar definida dentro de una función o método. Las variables pueden ser definidas de manera global o local, las variables globales pueden ser definidas y utilizadas desde cualquier método, mientras que las variables locales pueden ser definidas y utilizadas únicamente dentro del método al cual pertenecen, y una vez que este método es finalizado, esas variables locales son eliminadas.

3.2 Constantes​

Las constantes, al ser objetos Symbol, estas pueden ser definidas sin tener que pertenecer a alguna instancia. Funciones, métodos, class y module son ejemplos de instancias.


En el ejemplo 1 vemos como se han definido dos constantes antes de definir la función. Para crear una constante, solamente se debe escribir el nombre que se desea que tenga, por comodidad se suele nombrar a las constantes con nombres en mayúsculas, aunque también pueden ser nombradas con solo teniendo el primer caracter en mayúscula; luego de escribir el nombre, se escribe el operador = para darle un valor a la constante. En el ejemplo, la constante nombrada CONSTANTE_1 obtuvo el valor de un String, mientras que la constante nombrada Constante_2 obtuvo el valor de un Integer.


En el caso de los class y module, si una constante es definida dentro de uno de estos, solamente puede ser utilizada por los métodos dentro del mismo class o module, ya que de lo contrario marcará error al intentar usar esa constante desde otra función o instancia.

3.3 Variables locales​

Las variables locales son las variables que solo pueden ser definidas y utilizadas dentro de la misma instancia, ya sea class, module, función o método, pero no pueden ser usadas de manera externa.


En el ejemplo 4 y en el ejemplo 5 vemos como las variables pueden usar operadores para modificar su valor o para brindar un valor a una variable nueva.

Una variable, comúnmente suele tener el valor de un String(texto) o un Integer(Número), pero también puede guardar otro tipo de valores y objetos, como por ejemplo un class iniciado.


En el ejemplo 6 vemos como se ha usado la variable paises para guardar el class Paises ya iniciado, luego se usó otras dos variables para guardar los Strings que regresan los métodos de ese class.

3.4 Variables globales​

A diferencia de las locales, las variables globales pueden ser usadas tanto dentro como fuera de las instancias donde han sido creadas y/o editadas. Existen diferentes tipos de variables globales, pero para mantener la explicación simple, solo veremos dos tipos diferentes de variables globales. A estos dos tipos de variables globales las conoceremos como variables globales por instancia y variables globales de sistema.

Las variables globales por instancia, como su nombre lo indica, son aquellas que solo pueden ser utilizadas por todos los métodos dentro de una misma instancia. Este tipo de variable global es nombrada usando un @ (Arroba/At) seguido del nombre de esta variable.


En el ejemplo 7 vemos como al definir la variable global @hp esta puede ser usada como condicional y modificada dentro de los otros métodos que se encuentran en la misma instancia.

De igual manera, al usar este tipo de variables en un class, pueden ser definidas automáticamente utilizando el método attr_accessor el cual viene definido en el RGSS dentro del class Class, por esa razón este método solo aplica para los class. El RGSS trae definido tres métodos para crear variables globales por instancia, el attr_accessor, attr_reader y el attr_writer, para mantener la explicación simple, solamente nos enfocaremos en el método attr_accessor.

Al usar el método attr_accessor para definir variables globales, nos brinda una ventaja en comparación de tener que definir directamente su valor, esta ventaja nos permite llamar y manipular ese valor como si fuera un método del mismo class.


En el ejemplo 8 hemos creado dos variables globales mediante el método attr_accessor en el mismo class, mientras que desde una función hemos iniciado y guardado ese class en una variable local para poder manipular su contenido.
Debido a que la variable global fue creada usando el método attr_accessor, podemos manipular esta variable como si fuera un método que depende del class.

Nunca se debe usar este tipo de variables globales fuera de un método, class o module, ya que al momento de guardar la partida del juego, terminará corrompiendo el archivo debido a que se estaría guardando información que no pertenece a alguna instancia.


En el ejemplo 9 y 10 hemos definido un nuevo tipo de variable, estas son las que conoceremos como variables globales de sistema, aunque para quienes tienen más experiencia en programación, las conocen simplemente como variables globales.
Este tipo de variable se definen usando el símbolo $ al inicio del nombre y pueden ser tanto definidas como modificadas dentro y fuera de cualquier instancia.
Cuando este tipo de variable es definida fuera de una instancia, será definida solamente una vez al inicio del juego.

Si iniciamos un class dentro de este tipo de variables, podremos usar y modificar los métodos de este en otras instancias. Esto último es importante ya que esa es la manera en que Essentials carga y guarda mucha de la información que maneja, incluyendo la información de la mochila, el equipo pokémon, datos del entrenador, entre muchas otras cosas.


En el ejemplo 11 vemos la manera en la cual Essentials crea y guarda información. Primero se inicia y guarda la información de un class en una variable global de sistema, luego vemos que mediante funciones simples podemos modificar la información de las variables globales dentro de ese class.

3.5 Variables y Switches (RMXP)​

En Rpg Maker XP, existen definidas variables e Interruptores llamados "Globales", que guardan información y que pueden ser tanto llamados como modificados desde los eventos (NPC).
Para usarlos desde un script, es necesario conocer como están formados.

En la siguiente clase veremos Arrays con un poco más de detalle para poder entender mejor estas variables e interruptores.

Tanto las variables como interruptores definidos por Rpg Maker XP, funcionan mediante Arrays y variables globales de sistema. Estas son guardadas en las siguientes variables, las variables globales se guardan en $game_variables, mientras que los interruptores en $game_switches. Y cada uno de los valores se guarda en un Array, un Array es, en pocas palabras, una lista de valores que se guardan y ordenan en [](corchetes).


Para manipular el valor de las variables y de los interruptores globales de Rpg Maker XP desde scripts se necesita escribir el nombre de la variable global de sistema que guardará esa información, $game_variables para las variables y $game_switches para los interruptores, y ya que el valor de estas son Arrays, se necesita escribir entre [](Corchetes) el número de index, osea el número de esa variable o de ese interruptor, quedando por ejemplo $game_variables[1] para la variable 1 y $game_switches[1] para el interruptor 1.

Técnicamente, tanto las variables como los interruptores de Rpg Maker XP pueden almacenar cualquier tipo de información. Pero, de manera predefinida, los interruptores han sido creados para almacenar solamente dos valores posibles, true o false, que son utilizados para condicionales.

3.6 Operadores​

Los operadores son los que le permitirán a las variables modificar su valor. Existen diferentes tipos y en combinaciones especiales dan diferentes efectos, pero por ahora, para mantener la simpleza de la explicación, solo usaremos los básicos que aplican para Integer y String.

Los Integer son capaces de usar todos los operadores posibles para realizar operaciones matemáticas como suma (+), resta (-), multiplicación (*), división (/) entre otros más.


Los Strings, al igual que los Integer, son capaces de usar diversos operadores.


Por supuesto, existen más métodos y operadores que funcionan tanto con Strings como con Integer, pero para iniciar, estos serán suficientes.

3.7 Mensajes con variables​

En la clase anterior vimos varias formas de realizar mensajes de cuadro de texto, ahora solo para completar la información vista, aprenderemos como usar variables para facilitar el uso de mensajes de cuadro de texto.


Gracias a la ayuda de variables, podemos ordenar de mejor manera las diferentes opciones y usando el comando elsif podemos continuar comprobando el valor de la variable que guarda la respuesta. El comando elsif funciona de la misma manera que el comando if, solo que se basa en prioridades, si el primer condicional no se cumple, te revisará el siguiente, y si no se cumple continuará hasta que alguno o ninguno lo haga.

Tarea de la clase 3​

Durante esta clase, vimos como definir y manipular diferentes tipos de variables.

Con el propósito de reforzar lo aprendido, se deberá realizar lo siguiente :

  • Crear en una instancia, ya sea función, class o module, un mensaje que realice una pregunta, pero tanto la pregunta como las opciones a elegir deben provenir de argumentos. Es importante tener en cuenta que el uso de variables facilitará la lectura de los argumentos.
  • Crear un class en el cual se demuestre el uso de variables locales y cualquier tipo de variables globales.

Ambas tareas se entregarán desde discord, ya sea por el canal #tareas en el servidor CreadoresEssentials o mediante un mensaje privado.
Pueden usar capturas de pantalla para mostrar el código que han creado o mediante un archivo de texto con el código. Todos los archivos deberán ser mandados juntos en un archivo .rar para poder facilitar su manejo.
Tienen como plazo límite el día Jueves 21 de marzo antes de que la siguiente clase sea publicada.

 
Última edición:
Estado
Cerrado para nuevas respuestas.
Arriba