Welcome to Scribd, the world's digital library. Read, publish, and share books and documents. See more
Download
Standard view
Full view
of .
Look up keyword
Like this
2Activity
0 of .
Results for:
No results containing your search query
P. 1
Exploracion del Lenguaje Script Boo

Exploracion del Lenguaje Script Boo

Ratings: (0)|Views: 83 |Likes:
Published by Aprender Libre
Boo es un lenguaje de script diseñado para Mono y .NET. Esta extraña mezcla de Python y C# podria ser justo lo que se necesita para comenzar con la plataforma .NET.
Boo es un lenguaje de script diseñado para Mono y .NET. Esta extraña mezcla de Python y C# podria ser justo lo que se necesita para comenzar con la plataforma .NET.

More info:

Published by: Aprender Libre on Jun 30, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

02/01/2013

pdf

text

original

 
53
Número 25
WWW.LINUX
-
MAGAZINE.ES
UNA HISTORIA DEFANTASMAS
R
odrigo Barreto de Oliveiraestaba frustrado; no podíaencontrar un lenguaje deprogramación que fuera adecuadopara su próximo proyecto. Python noposeía la clase de comprobación detipos estáticos que necesitaba y notenía una buena integración con.NET. C# estaba bien integrado con.NET, pero requería demasiadascomprobaciones de tipos. Estosinconvenientes le llevaron adesarrollar su propio lenguaje descript. Se basaría en Python ydependería de CLI (Common Lan-guage Infrastructure) en el marcoDotnet. El resultado lo aliñó con unpoco de C# y con los principios dediseño de Ruby, y finalmente obtuvoel lenguaje orientado a objetos Boo[1], disponible para Linux gracias alentorno Mono.
Boo es un lenguaje de script diseñado para Mono y .NET. Esta extraña mezcla de Python y C# podría ser justolo que se necesita para comenzar con la plataforma .NET.
POR TIM SCHÜRMANN
Exploración del Lenguaje de Script Boo
Despedida
Como el típico “Hola Mundo” con sulínea
 print(“Hola Mundo”)
es tan trivial,el Listado 1 proporciona una variante enGTK#.Boo no encierra simplemente bloquesde código continuos entre llaves, sinoque utiliza el sangrado, del mismo modoque lo hace Python. De hecho, nisiquiera se permite escribir
end
parafinalizar un bloque. Tampoco utiliza lospuntos y comas para finalizar las senten-cias, que sólo deberían utilizarse pararesolver las ambigüedades. Por otro lado,Boo soporta los dos tipos de comentariosde Python, los que comienzan por
y lostípicos de C y C++,
 /*
y
 // 
.@ZT:VariablesAl contrario que Python, Boo utilizatipos estáticos; es decir, hay que estable-cer el tipo de una variable antes de utili-zarla por primera vez. Una ventaja deesta solución es que el compilador detec-tará las asignaciones incorrectas entiempo de compilación y se quejará deello. Para evitar que los programadoresse tengan que pelear con los tipos dedatos, el compilador inteligente de Booautomáticamente derivará el tipo
Boo •
DESARROLLO
01 import Gtk0203 Application.Init()04 window = Window(“Hola Mundo”,DefaultWidth: 300,DefaultHeight: 200)0506 window.DeleteEvent += def():07 Application.Quit ()0809 window.ShowAll()10 Application.Run()
Listado 1: Hola GTK#
 
54
Número 26
WWW.LINUX
-
MAGAZINE.ES
DESARROLLO
• Boo
correcto en un proceso conocido comoinferencia de tipos:
a as int // a es un enteroa= 3b=aprint b
Está bastante claro que
b
debe ser unnúmero. De hecho, la primera línea deeste ejemplo es redundante, ya que elcompilador posee toda la informaciónque necesita a partir del
3
. Los progra-madores sólo tienen que declarar lasvariables explícitamente cuando la infe-rencia de tipos no vaya a funcionar. Lis-tas, arrays y tablas hash son fáciles demanejar. Para rellenar una lista,
a
, conlos números del 1 al 5, hay que crear unobjeto lista:
a= List(range(1,5))
o bien utilizar una nota-ción reducida:
a=[1,2,3,4,‘cinco’]print(a[:3])
range()
es una funcióninterna que proporcionavalores dentro de unrango dado. Comomuestra el ejemplo, esposible mezclar tiposdentro de una lista. EnBoo, la abreviaturausada en el comando
 print 
se denomina ope-ración de troceado; eneste caso, devuelve lostres primeros valores de
a
. Boo también soportalas expresiones regula-res, incluyendo el operador de corres-pondencia (=~):
ejemplo= “Esto es un test”if ejemplo=~ @/te.t/:print(“contenido”)
En este ejemplo se busca la cadena
test 
en la variable
ejemplo
, donde la
s
entre la
e
y la
podría ser cualquier carácter. Laexpresión regular tiene que ir entre
@/.../ 
.
Funciones
Los fans de Python se sentirán como encasa con las definiciones de funciones:
def Hola(nombre as string):return “Tu nombre:${nombre}”print Hola(“Pepe”)
Boo gestiona las funciones como objetosde primera clase, un concepto que surgiócon los lenguajes de programación funcio-nales. Las funciones soportan cualquieracción que sea soportada por el lenguajede programación, así se pueden almace-nar en variables o pasarse como argumen-tos a otras funciones. Y, por supuesto, sepueden devolver como resultado:
def function1(item as int):return item // no hace nadadef function2():return function1
Hoy Cerramos
Boo incluso permite la definición de unafunción dentro de otra:
def outer():inner = def():print(“inner ha
sido llamada”)inner()outer()
Esta técnica está a un paso de los cierres.De nuevo, Boo toma este concepto de laprogramación funcional. Un cierre o blo-que es una porción de código o el cuerpode una función donde las variables loca-les de la función que las encierra sonvisibles, y por tanto pueden usarse.Boo soporta dos formas sintáctica-mente diferentes: la sintaxis basada enbloques, como la del ejemplo que acaba-
Existen tres opciones para ejecutar losscripts de Boo. Independientemente dela que se elija, antes de comenzar habráque instalar el entorno Mono y descom-primir el paquete Boo de [1]. En primerlugar, se puede utilizar el compilador
booc.exe 
, para compilar un script:
mono bin/booc.exe -out:
hello.exe hello.boo
El binario generado a partir del script
hello.boo 
puede ejecutarse con elcomando
mono hello.exe 
. La opción
-r 
incluirá cualquier DLL adicional que senecesite:
mono bin/booc.exe -r:
gtk-sharp -out:hellogtk.exe
hellogtk.boo
Cuando se distribuyan programas comoeste habrá que incluir la librería
Boo.Lang.dll 
del directorio
bin 
con elpaquete de distribución.Además del compilador de Boo, elpaquete también incluye el intérprete
booi.exe 
, que puede ejecutar los scriptsde Boo directamente, como
mono bin/booi.exe hello.boo 
. Por otro lado,también disponemos de una shell inter-activa
booish.exe 
que soporta la entradadirecta de comandos en un estilo similara Python.Por último, se puede utilizar la API deBoo para ejecutar el código Boo. Losobjetos Dotnet que proporciona la APIincluso permitirán ejecutar un script deBoo dentro de otro (Listado 5).
Compilación
01 def function():02 a = 0 # new variable03 inc = { a+=1 }04 show = {return a}05 return inc, show0607 i,s=function()08 print(s())09 i()10 print(s())
Listado 2: Sintaxis deBloque
Figura 1: El sitio web del proyecto Boo proporciona fragmentosde código y una introducción muy útil al lenguaje Boo.
 
mos de ver, o la sintaxis basada en lla-ves, como se muestra en el Listado 2.En este caso, los cierres aparecen entrellaves, y su código utiliza la variable
a
dela función que la engloba. Incluso sepueden invocar los cierres aunque elentorno, y por ello las variables, hayandejado de existir.
Un Poco de Picante
Como Boo soporta el concepto deretorno de funciones, son posible expre-siones como la siguiente:
power = { x as int | return
{ y as int | return x ** y }}
// ** representa una potencia
 power 
espera una función cierre que, dehecho, devuelve una nueva función. Sinembargo, la función que produce tambiénespera una entrada. De hecho podría lla-marse a este dúo de la siguiente forma:
power(5)(2)
Como se puede ver, el 5 se pasa primero ala función
 power 
, que devuelve una fun-ción (la función
{ y as int | return 5 ** y}
para ser precisos). El 2 se pasa luego a lanueva función, que devuelve el resultado.La última línea se entiende como que, envez de tener una única función con dosargumentos, se tienen dos funciones conun argumento cada una. Los arquitectosde software se refieren a esta técnica como
currying 
.
Generadores
Además de los cierres, Boo tambiénsoporta generadores: funciones que pro-ducen una serie de resultados. Sinembargo, no simplemente generan ydevuelven una lista completa, sino queel siguiente elemento de la lista no secalcula a menos que sea realmente nece-sario. Boo se refiere a estas funcionescomo métodos generadores (Listado 3).El generador
 MyGenerator 
se ejecutahasta el siguiente
 yield
, a continuaciónextrae el valor de la variable que encuen-tra allí y se para. Cuando la función quelo ha llamado (
 List 
en el ejemplo) nece-site el siguiente valor, el generador conti-nuará justo en el punto donde lo dejó.Como el siguiente valor sólo se genera sise necesita, esta solución requiere menosmemoria bajo condiciones ideales; des-pués de todo, un único número ocupa
Boo •
DESARROLLO
01 def MyGenerator():02 i = 103 yield i04 for x in range(10):05 i += 206 yield i0708 print(List(MyGenerator()))
Listado 3: Generadores
01 class Chair:02 Color as string:03 get:04 return _color05 set:06 _color = value0708 _color as string0910 woodenchair = Chair()11 woodenchair.Color = ‘Brown’
Listado 4: Propiedades

You're Reading a Free Preview

Download
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->