youkaiMiér Abr 03, 2013 3:17 am
Moderador
Bueno, como lo prometido es deuda, he aquí otra versión mas de "Manejo básico de scripts" (?)
En esta oportunidad voy a hablar sobre los bloques de códigos y la sintaxis de cada uno de ellos. Si me inspiro y sigo con otros temas, estará en dependencia de como me de el loco xDD
Bloques de Códigos:
Como expliqué en el encuentro anterior un bloque de códigos es una secuencia de lineas de código agrupadas bajo un mismo parámetro o condición. Casi todos los comandos de programación dan lugar a bloques de códigos, pero de todas formas voy a presentar lo que pienso explicar en esta ocasión.
Estos comandos están divididos en diferentes clasificaciones, las cuales son:
Operadores de Ruby:
Operadores matemáticos:
Condicionales:
Condicional if:
Ejemplo:
Sintaxis:
if expr [then]
expr ...
[elsif expr [then]
expr ... ]
...
[else
expr ... ]
end
Siempre que la condición sea verdadera ejecutara el bloque de códigos que le sigue a la condicional. En caso de ser falsa, evaluará la condición escrita en elsif. Se pueden especificar varios elsif. En caso de que no se cumpla ninguna de las condiciones escritas, se evaluará el bloque correspondiente a else, en caso de que haya alguno.
Debo de decirles que no es obligado que existan bloques elsif o else. Uno los agrega a conveniencia y cuando no exista ninguno de ellos y no se cumpla la condición simplemente pasara del if y continuara compilando.
Condicional unless:
Sintaxis:
Este bloque funciona casi exactamente igual a if, la diferencia está en que es lo contrario. Me explico: como había dicho, en if cuando la condición es verdadera se evalúa el bloque correspondiente al if; de lo contrario se recurre a elsif o else en caso de que existan.
En el caso de unless, se evaluara su bloque solo cuando la condición NO SE CUMPLA, o sea, que sea falsa. También debo aclarar que en este bloque NO SE PUEDEN ESPECIFICAR elsif, solo admite a else.
Condicional case:
Sintaxis:
Esta condicional es un poco mas pesada de explicar...asi que perdonen si entienden poco/nada xD
En este caso se crea un bloque de códigos que funciona como condicional para UNA SOLA expresión(la que se especifica en case) Los valores con los cuales se va a comparar se especifica mediante los when. Cuando uno la condición se cumpla en uno de los when, se ejecutara el bloque correspondiente a ese when. En esta condicional también se puede especificar else, el cual correrá si no se cumple ningún when.
En pocas palabras, case funciona parecido a: (este ejemplo no tiene que ver con el case del ejemplo inicial, se parece pero no es lo mismo)
Bucles:
En programación un bucle no difiere mucho de esto. Se le llama bucle a aquellos comandos que lo que provocan es la evaluación de un o unos determinados bloques de códigos X cantidad de veces.
También debo decirles que los bucles son mucho mas complejos que las condicionales y, por tanto, un poco mas pesados de explicar en un lenguaje que todos puedan entender ^^
for
Sintaxis:
Este comando lo que provoca es la evaluación del definido en su interior la cantidad de veces especificada en la expresión expr La variable que especifiques como localvariable sera la encargada de ser el indice del for, o sea, tomara el valor por el cual vaya el for. Para una mejor comprensión pueden poner el ejemplo dentro de un evento en el maker y correr ese evento,; ahí verán lo que les quiero decir.
while
Ejemplo:
Sintaxis:
Clases y Métodos:
Clases: class
Ejemplo:
class Foo < Super
def test
:
end
:
end
Sintaxis:
class identificador ['<' superclase ]
expr ..
end
Ruby es un verdadero lenguaje Orientado a Objetos en donde todo lo creado representa un nuevo objeto. Crear una clase no es mas que dar los planos de un nuevo objeto. Al igual que un ingeniero diseña los planos de un carro o un edificio con todos sus detalles; nosotros diseñamos una clase con todas las características, accesorios y eventos que realizara ese objeto. Debo repetir que una clase NO ES UN OBJETO, solo son "planos" del objeto que se creara después.
Hablando ahora de clases:
Este comando es el encargado de crear una clase. El nombre de la misma no es mas que un identificador que empiezan con letra inicial mayúscula. La creación de una clase le asigna esa clase a una constante especificada en un identificador.
Ejemplo:
Módulos: module
Ejemplo:
Sintaxis:
Los módulos funcionan casi igual a las clases. El modulo se le asigna a un identificador cuyo nombre será el nombre del modulo. Cuando un módulo se define un modulo con el mismo nombre a uno ya existente, se le agregan al anterior los métodos y otras definiciones del nuevo metodo al anterior.
Ejemplo:
Syntax:
La sintaxis de los métodos no quise cambiarla para que vean hasta que punto de complejidad pueden llegar. Seguro que les resultara raro cosas como rescue y ensure puesto que en el maker casi nunca se usan. Esos comandos solo se ven en scripts que modifiquen avanzadamente métodos y clases internas de Ruby o RGSS o que trabajen con archivos.
Bueno, está es la sintaxis para definir métodos. En otras palabras, define un método correspondiente a la clase o modulo en que fue creado. Los métodos, en su forma sencilla de creación, pueden ser llamados desde cualquier parte de su clase. Para hacerles llamados desde lugares externos a la clase en la cual han sido definidos, es necesario primero crear el objeto correspondiente a la clase y luego hacerles el llamado usando la sintaxis:
Los métodos pueden tener distintos tipos de llamados. El citado en el ejemplo anterior es básico: llamado sin argumentos. Estos tipos de llamados son:
- Sin argumentos.
- Con argumentos.
- Con argumentos predefinidos.
- Aceptando todos los argumentos que le pases.
Sin argumentos:
Ejemplo:
Con argumentos:
Con argumentos predefinidos:
Ejemplo:
Aceptando todos los argumentos que le pases:
Ejemplo:
Con todos los tipos de argumentos:
- Primero los argumentos que arbitrariamente requieren que le pasemos un valor
- Luego los argumentos predefinidos, aquellos que le pasamos valores si queremos(xD)
- Finalmente, el argumento que recoge todo lo demás y lo agrupa en un Array
Lógicamente es imposible organizarlos de otra manera.
Errores clásicos del tema:
Dicho esto, pues nos vemos en la próxima lección de "Manejo Básico de Scripts" la cual tratará de Arrays, Hash y Strings.
Y pues este es el fin de esta parte del tuto. ^^
Saludos,
¥oukai
PD2: Hice un pase rápido ortográfico corrigiendo lo que me dijo Chrome...el resto perdónenlo XDD
En esta oportunidad voy a hablar sobre los bloques de códigos y la sintaxis de cada uno de ellos. Si me inspiro y sigo con otros temas, estará en dependencia de como me de el loco xDD
Bloques de Códigos:
Como expliqué en el encuentro anterior un bloque de códigos es una secuencia de lineas de código agrupadas bajo un mismo parámetro o condición. Casi todos los comandos de programación dan lugar a bloques de códigos, pero de todas formas voy a presentar lo que pienso explicar en esta ocasión.
- Código:
if for while def
class module unless case
Estos comandos están divididos en diferentes clasificaciones, las cuales son:
NOTA:
En todas las sintaxis, lo que este encerrado entre corchetes ([]) significa que no es de uso obligatorio
Operadores de Ruby:
- Código:
> Mayor
>= Mayor o igual
< Menor
<= Menor o igual
== Igual
!= Distinto
Operadores matemáticos:
- Código:
+ Mas
- Menos
* Multiplicación
/ División
% Resto
** Potencia
- Código:
var = 5 + 9 #=> 14
var = 5 - 9 #=> -4
var = 5 * 9 #=> 45
var = 45 / 9 #=> 5
var = 9 % 5 #=> 4 (es el resto de dividir 9 / 5)
var = 5 ** 2 #=> 25
Condicionales:
- Código:
if unless case
Condicional if:
Ejemplo:
- Código:
ex = 5
if ex == 5 # Como ex es igual a 5, se cumple
p "Es 5"
elsif ex > 5
p "Es mayor que 5"
else
p "Es menor que 5"
end
Sintaxis:
if expr [then]
expr ...
[elsif expr [then]
expr ... ]
...
[else
expr ... ]
end
Siempre que la condición sea verdadera ejecutara el bloque de códigos que le sigue a la condicional. En caso de ser falsa, evaluará la condición escrita en elsif. Se pueden especificar varios elsif. En caso de que no se cumpla ninguna de las condiciones escritas, se evaluará el bloque correspondiente a else, en caso de que haya alguno.
Debo de decirles que no es obligado que existan bloques elsif o else. Uno los agrega a conveniencia y cuando no exista ninguno de ellos y no se cumpla la condición simplemente pasara del if y continuara compilando.
Condicional unless:
- Código:
ex = true
unless ex # Esto es lo mismo que decir: ex == true
p "Es falso"
else
p "Es verdadero"
end
Sintaxis:
- Código:
unless expr [then]
expr ...
[else
expr ... ]
end
Este bloque funciona casi exactamente igual a if, la diferencia está en que es lo contrario. Me explico: como había dicho, en if cuando la condición es verdadera se evalúa el bloque correspondiente al if; de lo contrario se recurre a elsif o else en caso de que existan.
En el caso de unless, se evaluara su bloque solo cuando la condición NO SE CUMPLA, o sea, que sea falsa. También debo aclarar que en este bloque NO SE PUEDEN ESPECIFICAR elsif, solo admite a else.
LOS VALORES nil Y false SON CONSIDERADOS FALSOS, ¡TOOOOOODOOOOSSS! LOS DEMÁS SON CONSIDERADOS VERDADEROS
Condicional case:
- Código:
ex = 5
case ex
when 0, 1, 2, 3, 4
p "Está entre 0 y 4"
when 5
p "Es 5"
when 6..20
p "Está entre 6 y 20"
end
Sintaxis:
- Código:
case expr
[when expr [, expr] ... [then]
expr ..]..
[else
expr ..]
end
Esta condicional es un poco mas pesada de explicar...asi que perdonen si entienden poco/nada xD
En este caso se crea un bloque de códigos que funciona como condicional para UNA SOLA expresión(la que se especifica en case) Los valores con los cuales se va a comparar se especifica mediante los when. Cuando uno la condición se cumpla en uno de los when, se ejecutara el bloque correspondiente a ese when. En esta condicional también se puede especificar else, el cual correrá si no se cumple ningún when.
En pocas palabras, case funciona parecido a: (este ejemplo no tiene que ver con el case del ejemplo inicial, se parece pero no es lo mismo)
- Código:
if ex == 5
....
elsif ex == 6
....
elsif ex == 7
....
end
Bucles:
- Código:
for while
En programación un bucle no difiere mucho de esto. Se le llama bucle a aquellos comandos que lo que provocan es la evaluación de un o unos determinados bloques de códigos X cantidad de veces.
También debo decirles que los bucles son mucho mas complejos que las condicionales y, por tanto, un poco mas pesados de explicar en un lenguaje que todos puedan entender ^^
for
- Código:
for var in 0..6
p var
end
Sintaxis:
- Código:
for localvariable ... in expr [do]
expr ..
end
Este comando lo que provoca es la evaluación del definido en su interior la cantidad de veces especificada en la expresión expr La variable que especifiques como localvariable sera la encargada de ser el indice del for, o sea, tomara el valor por el cual vaya el for. Para una mejor comprensión pueden poner el ejemplo dentro de un evento en el maker y correr ese evento,; ahí verán lo que les quiero decir.
Como el Ace es un poco estúpido(o lo hicieron estúpido) y antiRuby, tienen que usar este ejemplo para que les funcione:
Repito, esto es solo en el caso del Ace...hay que cambiar p por msgbox...En el resto de los makers eso no tiene problema.
- Código:
for var in 0..6
msgbox var
end
while
Ejemplo:
- Código:
i = 0
while i < 6
p i
i += 1
end
Sintaxis:
- Código:
while expr [do]
...
end
Clases y Métodos:
Clases: class
Ejemplo:
class Foo < Super
def test
:
end
:
end
Sintaxis:
class identificador ['<' superclase ]
expr ..
end
Ruby es un verdadero lenguaje Orientado a Objetos en donde todo lo creado representa un nuevo objeto. Crear una clase no es mas que dar los planos de un nuevo objeto. Al igual que un ingeniero diseña los planos de un carro o un edificio con todos sus detalles; nosotros diseñamos una clase con todas las características, accesorios y eventos que realizara ese objeto. Debo repetir que una clase NO ES UN OBJETO, solo son "planos" del objeto que se creara después.
Hablando ahora de clases:
Este comando es el encargado de crear una clase. El nombre de la misma no es mas que un identificador que empiezan con letra inicial mayúscula. La creación de una clase le asigna esa clase a una constante especificada en un identificador.
Cuando una clase ya está definida y creamos otra definición de clases con el mismo nombre que la antes creada, se le agregaran los métodos y otras definiciones de la clase nueva a la anterior.Un identificador es una secuencia de caracteres que comiencen con una linea baja(_) o cualquier otro caracter alfabético y consiste en una secuencia de lineas bajas u otros caracteres alfanuméricos(letras y números). No tiene límite de longitud.
Ejemplo:
- Código:
variable Constante Scene_Title cualquier_otra_COSA
Ejemplo:
- Código:
class Foo < Array
def foo
end
end
class Foo
def bar
end
end
Resultado:
class Foo < Array
def foo
end
def bar
end
end
Módulos: module
Ejemplo:
- Código:
module Foo
def test
:
end
:
end
Sintaxis:
- Código:
module identifier
expr ..
end
Los módulos funcionan casi igual a las clases. El modulo se le asigna a un identificador cuyo nombre será el nombre del modulo. Cuando un módulo se define un modulo con el mismo nombre a uno ya existente, se le agregan al anterior los métodos y otras definiciones del nuevo metodo al anterior.
Y AHORA AL PLATO FUERTE:
Métodos: defEjemplo:
- Código:
def fact(n)
if n == 1 then
p 1
else
p n * fact(n-1)
end
end
Syntax:
- Código:
def method_name ['(' [arg ['=' default]] ... [',' '*' arg] ')']
expr ..
[rescue [error_type,..] [then]
expr ..]..
[ensure
expr ..]
end
La sintaxis de los métodos no quise cambiarla para que vean hasta que punto de complejidad pueden llegar. Seguro que les resultara raro cosas como rescue y ensure puesto que en el maker casi nunca se usan. Esos comandos solo se ven en scripts que modifiquen avanzadamente métodos y clases internas de Ruby o RGSS o que trabajen con archivos.
Bueno, está es la sintaxis para definir métodos. En otras palabras, define un método correspondiente a la clase o modulo en que fue creado. Los métodos, en su forma sencilla de creación, pueden ser llamados desde cualquier parte de su clase. Para hacerles llamados desde lugares externos a la clase en la cual han sido definidos, es necesario primero crear el objeto correspondiente a la clase y luego hacerles el llamado usando la sintaxis:
- Código:
class Test
def arg
p 600
end
end
class Other
def num
test = Test.new # Aquí hemos creado el objeto y almacenado en una variable local test
test.arg # Aquí llamamos el método arg correspondiente al objeto
# almacenado en la variable test
end
end
Los métodos pueden tener distintos tipos de llamados. El citado en el ejemplo anterior es básico: llamado sin argumentos. Estos tipos de llamados son:
- Sin argumentos.
- Con argumentos.
- Con argumentos predefinidos.
- Aceptando todos los argumentos que le pases.
Sin argumentos:
Ejemplo:
- Código:
def foo
....
end
Con argumentos:
- Código:
def foo(arg, arg2)
p arg, arg2
end
foo(5, "Hola") #=> 5, "Hola"
Con argumentos predefinidos:
Ejemplo:
- Código:
def foo(arg = 5, arg1 = "Hola")
p arg, arg1
end
foo #=> 5, "Hola"
foo("NOO") #=> "NOO", "Hola"
foo(99, 66) # => 99, 66
Aceptando todos los argumentos que le pases:
Ejemplo:
- Código:
def foo(*arg)
p arg
end
foo(1,14,56,235,2,5,25,25,124) #=> [1,14,56,235,2,5,25,25,124]
foo("", "Aquí", 8, [6]) #=> ["", "Aquí", 8, [6]]
foo() #=> [] NOTA: decir foo() es lo mismo que foo
Con todos los tipos de argumentos:
- Código:
def foo(arg, arg1 = 69, *resto)
...
end
- Primero los argumentos que arbitrariamente requieren que le pasemos un valor
- Luego los argumentos predefinidos, aquellos que le pasamos valores si queremos(xD)
- Finalmente, el argumento que recoge todo lo demás y lo agrupa en un Array
Lógicamente es imposible organizarlos de otra manera.
Errores clásicos del tema:
- Código:
NameError
Undefined local variable or method 'nombre del identificador' for
#Objeto
- Código:
ArgumentError
wrong number of arguments([numero pasado] for [numero que acepta])
- Código:
NoMethodError
Undefined method 'nombre del identificador' for #Objeto
- Código:
ex()
Dicho esto, pues nos vemos en la próxima lección de "Manejo Básico de Scripts" la cual tratará de Arrays, Hash y Strings.
Y pues este es el fin de esta parte del tuto. ^^
Saludos,
¥oukai
PD2: Hice un pase rápido ortográfico corrigiendo lo que me dijo Chrome...el resto perdónenlo XDD
Última edición por youkai el Miér Abr 03, 2013 9:32 pm, editado 1 vez (Razón : Agregado Clases y Métodos)