Skip to content

Commit 57f9ae8

Browse files
committed
#8 - Go
1 parent 50465c7 commit 57f9ae8

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed

Roadmap/08 - CLASES/go/thegera4.go

+117
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
/*
2+
NOTA IMPORTANTE:
3+
Go no tiene clases como tal, pero se pueden simular con structs(estructuras)
4+
y métodos asociados a ellas.
5+
En este ejemplo se simulan las estructuras de pila y cola, y se les agregan
6+
métodos para realizar operaciones sobre ellas.
7+
Los metodos se definen con la estructura a la que pertenecen como primer
8+
argumento el cual se llama receptor.
9+
*/
10+
11+
package main
12+
13+
import "fmt"
14+
15+
// Simulacion de clase "Car" con métodos asociados
16+
type Car struct {
17+
brand string // atributos
18+
model string
19+
year int
20+
}
21+
22+
// Método asociado a la estructura "Car"
23+
func (car Car) printInfo() string {
24+
return fmt.Sprintf("Marca: %s, Modelo: %s, Año: %d", car.brand, car.model, car.year)
25+
}
26+
27+
// Método asociado a la estructura "Car"
28+
func (car *Car) changeBrand(newBrand string) {
29+
car.brand = newBrand
30+
}
31+
32+
// Estructura de pila de números (LIFO)
33+
type Stack[T any] struct {
34+
data []T
35+
}
36+
37+
// Saber si la pila está vacía
38+
func (stack *Stack[T]) IsEmpty() bool {
39+
return len(stack.data) == 0
40+
}
41+
42+
// Agrega un número a la pila
43+
func (stack *Stack[T]) Push(element T) {
44+
stack.data = append(stack.data, element)
45+
}
46+
47+
// Elimina y recupoera/devuelve el último número agregado a la pila. Regresa false si la pila está vacía
48+
func (stack *Stack[T]) Pop() (T, bool) {
49+
if stack.IsEmpty() {
50+
var zeroValue T
51+
return zeroValue, false
52+
} else {
53+
index := len(stack.data) - 1 // Indice del último elemento
54+
element := stack.data[index] // Último elemento
55+
stack.data = stack.data[:index] // Elimina el último elemento por su indice
56+
return element, true
57+
}
58+
}
59+
60+
// Estrucutra de cola de números (FIFO)
61+
type Queue[T any] struct {
62+
data []T
63+
}
64+
65+
// Saber si la cola está vacía
66+
func (queue *Queue[T]) IsEmpty() bool {
67+
return len(queue.data) == 0
68+
}
69+
70+
// Agrega un número a la cola
71+
func (queue *Queue[T]) Enqueue(element T) {
72+
queue.data = append(queue.data, element)
73+
}
74+
75+
// Elimina y recupera/devuelve el primer número agregado a la cola. Regresa false si la cola está vacía
76+
func (queue *Queue[T]) Dequeue() (T, bool) {
77+
if queue.IsEmpty() {
78+
var zeroValue T
79+
return zeroValue, false
80+
} else {
81+
element := queue.data[0] // Accedemos al Primer elemento
82+
queue.data = queue.data[1:] // Elimina el primer elemento
83+
return element, true
84+
}
85+
}
86+
87+
func main () {
88+
89+
// Simulacion de clase "Car"
90+
car1 := Car{brand: "Ford", model: "Fiesta", year: 2019}
91+
fmt.Println(car1.printInfo())
92+
car1.changeBrand("Chevrolet")
93+
fmt.Println(car1.printInfo())
94+
95+
// Extra: Stack / Pila
96+
stack := Stack[string]{}
97+
fmt.Println("Pila vacía: ", stack.IsEmpty())
98+
stack.Push("1")
99+
stack.Push("2")
100+
stack.Push("3")
101+
fmt.Println("Pila:" + fmt.Sprint(stack.data))
102+
fmt.Println("Ahora se eliminara el ultimo elemento de la pila...")
103+
stack.Pop()
104+
fmt.Println("Pila:" + fmt.Sprint(stack.data))
105+
106+
// Extra: Queue / Cola
107+
queue := Queue[int]{}
108+
fmt.Println("Cola vacía: ", queue.IsEmpty())
109+
queue.Enqueue(1)
110+
queue.Enqueue(2)
111+
queue.Enqueue(3)
112+
fmt.Println("Cola:" + fmt.Sprint(queue.data))
113+
fmt.Println("Ahora se eliminara el primer elemento de la cola...")
114+
queue.Dequeue()
115+
fmt.Println("Cola:" + fmt.Sprint(queue.data))
116+
117+
}

0 commit comments

Comments
 (0)