Tutorial de Bosque. Bloqueo de alcance. Características destacadas
Características destacadas
El lenguaje de programación Bosque está diseñado para escribir código que sea simple, obvio y fácil de razonar tanto para humanos como para máquinas. El diseño fue impulsado en gran medida por la identificación y eliminación de varias fuentes de complejidad accidental y puntos de vista sobre cómo se pueden aliviar a través del diseño del lenguaje reflexivo.
Esta sección destaca y contiene información sobre muchas de las características y opciones de diseño más notables y / o únicas en el lenguaje de programación de Bosque.
Valores inmutables
¡Todos los valores en el lenguaje del bosque son inmutables!
El razonamiento y la comprensión del efecto de una declaración o bloque de código se simplifica enormemente cuando no tiene efectos secundarios. Los lenguajes funcionales se han beneficiado durante mucho tiempo de las simplificaciones al desarrollo de programas, herramientas sofisticadas y optimizaciones agresivas del compilador que este modelo permite. Desde esta perspectiva, la elección natural para el lenguaje Bosque es adoptar un modelo funcional puro con datos inmutables solamente.
Bloqueo de alcance
Las variables locales con código de bloque estructurado son un modelo muy atractivo para estructurar código. El lenguaje Bosque fusiona la programación funcional con ámbitos de bloque y {...} llaves permitiendo múltiples asignaciones a variables actualizables var! (6.3 Asignación de variables). Esto admite la programación de estilo funcional en un lenguaje de ámbito de bloque y permite a los desarrolladores escribir código como:
function abs(x: Int): Int {
var! sign = 1; //declare updatable variable with initial value
if(x < 0) {
sign = -1; //update the variable
}
return x * sign;
}
Roscado de parámetros de referencia
Además de permitir múltiples asignaciones a variables, el lenguaje Bosque también permite a los desarrolladores enlazar parámetros a través del paso de argumento ref. Esta alternativa a los valores de retorno múltiple simplifica los escenarios donde se pasa una variable (a menudo, algún tipo de entorno) a un método que puede usarla y actualizarla. Al permitir la actualización en el parámetro se elimina la administración adicional del valor de retorno que de otro modo se necesitaría:
function internString(ref env: Map
if(env.has(str)) { //use the ref parameter
return env.get(str);
}
env = env.add(str, env.size()); //update the ref parameter
return env.size();
}