Script.NET o S # es un lenguaje de metaprogramación que proporciona funcionalidad de scripting en aplicaciones Microsoft .NET , lo que permite la ejecución en tiempo de ejecución de funcionalidad personalizada, similar a VBA en aplicaciones de Microsoft Office . La sintaxis de Script.NET es similar a JavaScript . Está diseñado para ser un lenguaje de scripting simple y eficiente que permite personalizar aplicaciones .NET. El lenguaje tiene un verdadero intérprete en tiempo de ejecución y se ejecuta sin generar ensamblados en memoria adicionales.
Paradigma | imperativo , meta , scripting |
---|---|
Desarrollador | Microsoft |
Disciplina de mecanografía | dinámica |
Plataforma | .NET Framework |
Licencia | Libre |
Sitio web | www |
Influenciado por | |
JavaScript |
Script.NET es un proyecto de código abierto.
Funciones de metaprogramación
Script.NET tiene un operador de cotización especial <[ programa ]> que devuelve el AST de un programa dado. Además, se puede acceder al AST del programa actual con el objeto prog .
Aquí hay un ejemplo:
// Crea un AST para MessageBox.Show ('Hola'); programa ast = < [ MessageBox . Show ( 'Hola' ); ] > ; // Agregue este AST al final del programa actual prog . AppendAst ( ast );
El operador <[ ... ]> y los objetos prog permiten que Script.NET genere nuevos scripts o modifique scripts existentes en tiempo de ejecución.
Objetos generalizados
Script.NET incluye el llamado "Mutantic Framework" que introduce un tipo especial de "meta" objetos para controlar objetos de cualquier tipo. Se compone de un conjunto de clases, además de la clase "DataMutant". Implementa varios principios de objeto mutante:
Definición
Un mutante es un objeto especial que puede tener todas las propiedades (campos, métodos, etc.) y puede convertirse a cualquier tipo (o asignarse a un objeto de cualquier tipo). La semántica de tal conversión (o asignación) es pragmáticamente condicional.
Hay un operador especial : = llamado asignación mutantica o generalizada. Su propósito es asignar valores de campos DataMutant a los campos correspondientes de un objeto de cualquier tipo.
Ejemplo . Creación y uso de MObject:
// Crear objeto mutante de datos mobj = [ Texto -> 'Hola desde mutante' ]; // Establecer campos adicionales mobj {{ No es un error tipográfico | .}} Arriba = 0 ; mobj {{ No es un error tipográfico | .}} Izquierda = 0 ; // Establecer los campos correspondientes del objeto de Windows Form // (Asignación mutantica) form : = mobj ;
Ejemplos de
Hola Mundo
MessageBox . Show ( '¡Hola mundo!' );
Clasificación de burbujas sin función de salida
a = [ 17 , 0 , 5 , 3 , 1 , 2 , 55 ]; para ( i = 0 ; i < a . Longitud ; i = i + 1 ) para ( j = i + 1 ; j < a . Longitud ; j = j + 1 ) si ( a [ i ] > a [ j ] ) { temp = a [ i ]; a [ i ] = a [ j ]; a [ j ] = temp ; }s = 'Resultados:' ; para ( i = 0 ; i < a . Longitud ; i ++ ) s = s + ',' + a [ i ];MessageBox . Mostrar ( s );
Lector de RSS
a = nuevo XmlDocument (); a . Cargar ( 'http://www.codeplex.com/scriptdotnet/Project/ProjectRss.aspx' ); MessageBox . Show ( 'CodePlex Script.NET RSS ::' ); foreach ( n en a . SelectNodes ( '/ rss / channel / item / title' )) MessageBox . Mostrar ( n . Texto interno );
Apilar
Pila limitada a 20 elementos utilizando el Diseño por contrato función
function Push ( item ) [ // Limitar a 10 elementos pre ( me {{ Not a typo | .}} Count < 10 ); publicar (); invariante (); ] { // yo es un objeto mutado, // apila en este caso yo . Empuje ( elemento ); }function Pop () [ // Comprobar vacío hardik pre ( me {{ No es un error tipográfico | .}} Recuento > 0 ); publicar (); invariante (); ] { Volver conmigo . Pop (); }pila = nueva pila <| int |> ();// Crea Mutant hardik // 1. Establecer funciones, anular pila {{No es un error tipográfico |.}} Push mObject = [ Push -> Push , PopCheck -> Pop ]; // 2. Capturar objeto mObject . Mutar ( apilar );para ( i = 0 ; i < 5 ; i ++ ) mObject . Empuje ( i );Consola . WriteLine (( cadena ) mObject . PopCheck ());
Ver también
- L Sharp: lenguaje de secuencias de comandos similar a Lisp para .NET
- Boo : un lenguaje similar a Python para la plataforma .NET
- IronPython : una implementación de Python para la plataforma .NET, similar a Jython .
- Nemerle : un lenguaje de alto nivel para la plataforma .NET.