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/