Skip to content

Commit 2985d65

Browse files
committed
feat: add functions comparison section
1 parent ad0c4f4 commit 2985d65

File tree

3 files changed

+94
-2
lines changed

3 files changed

+94
-2
lines changed

src/es/SUMMARY.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@
77
- [Punto de entrada](./quick-comparisons/entry-point.md)
88
- [Tooling](./quick-comparisons/tooling.md)
99
- [Tipos escalares](./quick-comparisons/scalar-types.md)
10-
- [Tuplas y Colecciones](./quick-comparisons/tuples-and-collections.md)
1110
- [Declaración de variables](./quick-comparisons/variable-declaration.md)
11+
- [Tuplas y Colecciones](./quick-comparisons/tuples-and-collections.md)
12+
- [Funciones](./quick-comparisons/functions.md)
1213
- [Casting](./quick-comparisons/casting.md)
1314
- [Control de flujo](./quick-comparisons/control-flow.md)
1415
- [Nulabilidad y Opcionalidad](./quick-comparisons/nullability-and-optionality.md)

src/es/quick-comparisons/functions.md

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# Funciones
2+
3+
Las funciones en Rust y Go tienen algunas similitudes pero también diferencias
4+
importantes debido a la filosofía de cada lenguaje.
5+
6+
| | Go | Rust |
7+
| --------------------------- | ------------------------------------------------- | ------------------------------- |
8+
| Palabra clave | `func` | `fn` |
9+
| Tipado del parámetro | Después del nombre del parámetro | Después de los dos puntos (`:`) |
10+
| Retorno | Después de paréntesis, antes de `{` | Después de `->` |
11+
12+
13+
Veamos un ejemplo de esto, en Go haríamos algo como esto:
14+
15+
```go,no_run
16+
func suma(a int, b int) int {
17+
return a + b
18+
}
19+
```
20+
21+
Mientras que lo mismo en Rust sería:
22+
23+
```rust,ignore
24+
fn suma(a: i32, b: i32) -> i32 {
25+
return a + b;
26+
}
27+
```
28+
29+
Bastante parecido ¿verdad? Sin embargo esa no es la forma más idiomatica de
30+
hacerlo en Rust, sino que lo más idiomatico seria utilizar una característica de
31+
Rust, en la que la ultima expresión de la función tiene un return implícito si
32+
es que no termina en `;`:
33+
34+
```rust,ignore
35+
fn suma(a: i32, b: i32) -> i32 {
36+
a + b // retorna la ultima expresión si no termina en ;
37+
}
38+
```
39+
40+
Esto funcionara con todo lo que sea una expresión como por ejemplo lo son los
41+
controles de flujos, que veremos más adelante.
42+
43+
## Closures
44+
45+
También podemos trabajar como Closures las funciones, en Go esto se vería de
46+
esta forma:
47+
48+
```go
49+
#package main
50+
#
51+
#import (
52+
# "fmt"
53+
#)
54+
#
55+
#func main() {
56+
x := 5
57+
sumar := func(y int) int {
58+
return x + y
59+
}
60+
fmt.Println(sumar(3)) // Imprime 8
61+
#}
62+
```
63+
64+
Mientras que en Rust seria:
65+
66+
```rust
67+
let x = 5;
68+
let sumar = |y| x + y; // closure que "captura" x
69+
70+
println!("{}", sumar(3)); // Imprime 8
71+
```
72+
73+
Algo curioso es que en la closure de Rust no es necesario definir el tipo del
74+
parámetro si es que no es ambiguo, en este caso como solo tiene un caso y el
75+
valor que recibe es `3` logra entender que `y` es de tipo `i32`, sin embargo
76+
podríamos tiparlo nosotros de ser necesario:
77+
78+
79+
```rust
80+
let x = 5;
81+
let sumar = |y:i32| x + y; // closure que "captura" x
82+
83+
println!("{}", sumar(3)); // Imprime 8
84+
```
85+
86+
Veremos más acerca del uso avanzado de funciones en algunos capítulos más
87+
adelante.
88+

src/es/quick-comparisons/tuples-and-collections.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ fn getCoordinates() -> (i32, i32) {
5757
}
5858
```
5959

60+
Aunque esto es un pequeño spoiler de lo que explicaremos acerca de las
61+
funciones más adelante.
62+
6063
## Arrays / Slices / Vectores
6164

6265
### Arrays
@@ -162,7 +165,7 @@ Deberá fallar en tiempo de ejecución, Rust para solucionar nos da el método
162165
```
163166

164167
El método `get` nos devolverá un `Option<T>` profundizaremos sobre este tipo
165-
en el siguiente capitulo.
168+
en los siguientes capítulos.
166169

167170
Por otro lado hay que aclarar que tanto los array, como los slices y los `Vec`,
168171
son tipos de datos que solo almacenan un único tipo de dato dentro, como pueden

0 commit comments

Comments
 (0)