Translate
martes, 28 de enero de 2020
El lenguaje de programación V, Parte 6
Seguimos con V
V tiene funciones de orden superior :
fn sqr(n int) int {
return n * n
}
fn run(value int, op fn(int) int) int {
return op(value)
}
fn main() {
println(run(5, sqr)) // "25"
}
Si un argumento de función es inmutable, V puede pasarlo por valor o por referencia. El compilador toma la decisión, y el desarrollador no necesita pensar en ello.
Ya no necesita recordar si debe pasar la estructura por valor o por referencia.
Hay una manera de garantizar que la estructura siempre se pase por referencia agregando &:
fn (foo &Foo) bar() {
println(foo.abc)
}
En general, las referencias V son similares a los punteros Go y las referencias C ++. Por ejemplo, una definición de estructura de árbol se vería así:
struct Node<T> {
val T
left &Node
right &Node
}
Las variables globales no están permitidas, por lo que esto puede ser realmente útil.
Al nombrar constantes, se debe usar snake_case. Muchas personas prefieren todos las letras en mayúsculas: TOP_CITIES. Esto no funcionaría bien en V, porque los consts son mucho más poderosos que en otros lenguajes. Pueden representar estructuras complejas, y esto se usa con bastante frecuencia ya que no hay globales:
println('Top cities: $TOP_CITIES.filter(.usa)')
vs
println('Top cities: $top_cities.filter(.usa)')
Con println podemos imprimir lo que se nos de la gana:
println(1) // "1"
println('hi') // "hi"
println([1,2,3]) // "[1, 2, 3]"
println(User{name:'Bob', age:20}) // "User{name:'Bob', age:20}"
Dejo link: https://vlang.io/