Microsoft Small Basic es un lenguaje de programación , intérprete y entorno de desarrollo integrado (IDE) asociado . Es la variante simplificada de BASIC de Microsoft y está diseñada para ayudar a los estudiantes que han aprendido lenguajes de programación visual como Scratch a aprender programación basada en texto. [8] El IDE asociado proporciona un entorno de programación simplificado con funciones como resaltado de sintaxis , finalización inteligente de código y acceso a documentación en el editor. [9] El lenguaje tiene solo 14 palabras clave. [10]
Microsoft anunció Small Basic en octubre de 2008, [3] y lanzó la primera versión estable para distribución el 12 de julio de 2011, [20] en un sitio web de Microsoft Developer Network (MSDN), junto con un plan de estudios de enseñanza [22] y una guía introductoria. [23] Entre el anuncio y el lanzamiento estable, se realizaron varios lanzamientos de Community Technology Preview (CTP).
El 27 de marzo de 2015, Microsoft lanzó la versión 1.1 de Small Basic, [21] que corrigió un error y actualizó la versión de .NET Framework de la versión 3.5 a la versión 4.5, convirtiéndola en la primera versión incompatible con Windows XP .
Microsoft lanzó la versión 1.2 de Small Basic el 1 de octubre de 2015. [5] La versión 1.2 fue la primera actualización después de una pausa de cuatro años para introducir nuevas funciones en Small Basic. La actualización agregó clases para trabajar con los sensores de movimiento Kinect de Microsoft , [5] aumentó la cantidad de idiomas admitidos por el objeto Dictionary incluido y corrigió una serie de errores. [6]
El 19 de febrero de 2019, Microsoft anunció Small Basic Online (SBO). Se trata de un software de código abierto publicado bajo licencia MIT en GitHub . [24] [25]
En Small Basic, se escribe el programa ilustrativo "¡Hola, mundo!" de la siguiente manera:
TextWindow.WriteLine ( " ¡Hola, mundo! " )
Microsoft Small Basic es Turing completo . Admite ramificaciones condicionales , estructuras de bucle y subrutinas para el manejo de eventos . Las variables tienen tipos débiles y son dinámicas sin reglas de alcance.
El siguiente ejemplo demuestra la ramificación condicional. Se le pide al usuario que indique en grados Celsius o Fahrenheit y luego se comenta la respuesta en la unidad de temperatura correspondiente.
' Un programa que da consejos a una temperatura solicitada. TextWindow . WriteLine ( "¿Usas 'C'elsius o 'F'ahrenheit para la temperatura?" ) TextWindow . WriteLine ( "Ingresa C para Celsius y F para Fahrenheit:" ) question_temp : ' Etiqueta para volver a la entrada si se proporcionó una entrada incorrecta tempunit = TextWindow . Read () ' Definiciones de temperatura en Celsius: tempArray [ "caliente" ] = 30 ' 30 °C equivale a 86 °F tempArray [ "bonito" ] = 20 ' 20 °C equivale a 68 °F tempArray [ "frío" ]= 15 ' 15 °C equivale a 59 °F Si tempunit = "C" O tempunit = "c" Entonces TextWindow . WriteLine ( "¡Celsius seleccionado!" ) tempunit = "C" ' Puede estar en minúsculas, por lo tanto, conviértalo en mayúsculas. De lo contrario, si tempunit = "F" O tempunit = "f" Entonces TextWindow . WriteLine ( "¡Fahrenheit seleccionado!" ) ' Calculamos los valores de temperatura para Fahrenheit en función de los valores Celsius tempArray [ "hot" ] = (( tempArray [ "hot" ] * 9 ) / 5 ) + 32 tempArray [ "pretty" ] = (( tempArray [ "pretty" ] * 9 ) / 5 ) + 32 tempArray [ "cold" ] = (( tempArray [ "cold" ] * 9 ) / 5 ) + 32 tempunit = "F" ' Puede estar en minúsculas, por lo tanto, conviértalo en mayúsculas Else GOTO question_temp ' Entrada incorrecta, retroceda a la etiqueta "question_temp" EndIf TextWindow . Write ( "Ingrese la temperatura de hoy (en " + tempunit + "): " ) temp = TextWindow . ReadNumber () If temp >= tempArray [ "hot" ] Then TextWindow . WriteLine ( "Hace bastante calor." ) ElseIf temp >= tempArray [ "bonito" ] Then TextWindow . WriteLine ( "Hace bastante calor." ) ElseIf temp >= tempArray [ "frío" ] Then TextWindow .WriteLine ( "No olvides tu abrigo." ) De lo contrario TextWindow.WriteLine ( "Quédate en casa." ) FinSi
Small Basic no admite una If
declaración en línea como lo hace Visual Basic , por ejemplo:
Si la temperatura es > 50 entonces TextWindow . WriteLine ( "Es bastante agradable." )
Este ejemplo muestra un bucle que comienza en uno y termina en diez, multiplica cada número por cuatro y muestra el resultado de la multiplicación.
TextWindow . WriteLine ( "Tablas de multiplicar" ) Para i = 1 a 10 TextWindow . Write ( i * 4 ) EndFor
While
También se admiten bucles , y el For
bucle demostrado se puede ampliar mediante el uso de la Step
palabra clave. La Step
palabra clave se utiliza para establecer el valor con el que i
se incrementa la variable de contador, , en cada iteración.
Small Basic admite tipos de datos básicos , como cadenas , números enteros y decimales , y convertirá fácilmente un tipo en otro según lo requiera la situación. En el ejemplo, tanto el método Read
como ReadNumber
el método leen una cadena desde la línea de comandos, pero ReadNumber
rechazan cualquier carácter no numérico. Esto permite que la cadena se convierta a un tipo numérico y el operador la trate como un número en lugar de una cadena +
.
TextWindow . WriteLine ( "Ingrese su nombre: " ) nombre = TextWindow . Read () TextWindow . Write ( "Ingresa tu edad: " ) edad = TextWindow . ReadNumber () TextWindow . WriteLine ( "Hola, " + nombre + "!" ) TextWindow . WriteLine ( "Dentro de 5 años, tendrás " + ( edad + 5 ) + " años!" )
Como Small Basic convierte fácilmente entre tipos de datos, los números se pueden manipular como cadenas y las cadenas numéricas como números. Esto se demuestra mediante el segundo ejemplo.
TextWindow . WriteLine ( Math . log ( "100" )) 'Imprime 2 TextWindow . WriteLine ( "100" + "3000" ) ' Imprime 3100 TextWindow . WriteLine ( "Windows " + 8 ) ' Imprime Windows 8 TextWindow . WriteLine ( Text . GetLength ( 1023.42 )) ' Imprime 7 (longitud de la representación decimal, incluido el punto decimal)
En el segundo ejemplo, ambas cadenas se tratan como números y se suman, produciendo el resultado 3100. Para concatenar los dos valores, produciendo el resultado 1003000, es necesario utilizar el método.Text.Append(text1, text2)
La biblioteca estándar de Small Basic incluye clases básicas para matemáticas, manejo de cadenas y entrada/salida , así como clases más exóticas que tienen como objetivo hacer que el uso del lenguaje sea más divertido para los estudiantes. Algunos ejemplos de estas incluyen una clase de gráficos Turtle , una clase para recuperar fotos de Flickr y clases para interactuar con sensores Microsoft Kinect. [26]
Para que los alumnos puedan usar las clases con mayor facilidad, se han simplificado. Esta simplificación se demuestra mediante el código utilizado para recuperar una imagen aleatoria de Flickr con temática de montaña:
Para i = 1 a 10 pic = Flickr . GetRandomPicture ( "montañas" ) Desktop . SetWallPaper ( pic ) Program . Delay ( 10000 ) EndFor
Small Basic incluye una biblioteca de gráficos "Turtle" que toma elementos de la familia de lenguajes de programación Logo . Por ejemplo, para dibujar un cuadrado utilizando la tortuga, esta se mueve hacia adelante una cantidad determinada de píxeles y se rota 90 grados en una dirección determinada. Esta acción se repite cuatro veces para dibujar los cuatro lados del cuadrado.
Para i = 1 a 4 Tortuga . Mover ( 100 ) ' Avanzar 100 píxeles Tortuga . Girar ( 90 ) ' Girar 90 grados a la derecha FinPara
Se pueden realizar dibujos más complejos modificando el ángulo de giro de la tortuga y el número de iteraciones del bucle. Por ejemplo, se puede dibujar un hexágono estableciendo el ángulo de giro en 60 grados y el número de iteraciones en seis.
Small Basic permite el uso de bibliotecas de terceros. Estas bibliotecas deben estar escritas en un lenguaje compatible con CLR y los binarios compilados deben apuntar a una versión compatible de .NET Framework. Las clases proporcionadas por la biblioteca deben ser estáticas , marcadas con un atributo específico y deben usar un tipo de datos específico.
A continuación se proporciona un ejemplo de una clase que se utilizará en Small Basic, escrita en C# .
[SmallBasicType] clase pública estática ExampleClass { clase pública estática Primitivo Agregar ( Primitivo A , Primitivo B ) => A + B ; público estático Primitivo SomeProperty { obtener ; establecer ; } público estático Primitivo Pi => ( Primitivo ) 3.14159 ; }
Si está disponible, el entorno de desarrollo Small Basic mostrará la documentación de las bibliotecas de terceros. El entorno de desarrollo acepta documentación en forma de archivo XML , que se puede generar automáticamente a partir de comentarios del código fuente mediante herramientas como Microsoft Visual Studio y MonoDevelop . [27]