1
+ /* ===============================================================
2
+ EXERCITIU CLASE ES6 (ECMASCRIPT6)::
3
+ 'STIVA' (STACK) - TIP DE DATE 'SPECIAL'
4
+ =================================================================*/
5
+
6
+ /*
7
+ (#) Este un Tip de Date 'Special'.
8
+
9
+ (#) Stiva are urmatoarele Operatiuni esentiale:
10
+ [1] 'PUSH()' -> pt. 'Adaugarea' unui 'Obiect' in 'Cutie'.
11
+
12
+ [2] 'POP()' -> pt. 'Sterrgerea' unui 'Obiect' din 'Cutie'.
13
+
14
+ [3] 'PEEK()' -> pt. 'Ridicare in Sus' a unui 'Obiect' din 'Cutie'
15
+ fara a-l 'Sterge' din 'Cutie'.
16
+
17
+
18
+ (NB!) INTR-O 'STIVA'
19
+ => NU TREBUIE SA AVEM ACCES LA MODIFICAREA OBIECTELOR
20
+ => UTILIZAN 'INDEXUL' ACESTORA.
21
+ */
22
+
23
+
24
+ //=================================================================
25
+ // (0) DEF. 'PROP. PRIVATA' -> PRIN 'WEEKMAP()':
26
+ //=================================================================
27
+ const _elemente = new WeakMap ( ) ;
28
+
29
+
30
+ //=================================================================
31
+ // (1) CLASA 'STIVA':
32
+ //=================================================================
33
+ class Stiva {
34
+
35
+ // CONSTRUCTORUL:
36
+ constructor ( ) {
37
+
38
+ // MATRICEA (PT. 'STOCAREA OBIECTELOR' IN 'STIVA')
39
+ // PRIN 'PROP. PRIVATA' & MET. 'SET(CHEIE,)':
40
+ _elemente . set ( this , [ ] ) ;
41
+ }
42
+
43
+
44
+ // MET. 'PUSH()' (PT. 'ADAUGAREA OBIECTELOR' IN 'MATRICEA GOALA')
45
+ push ( obiect ) {
46
+ // ACCESAREA 'MATRICEI'
47
+ // PRIN 'PROP. PRIVATA' & MET. 'GET(CHEIE)'
48
+ // & MET. 'PUSH(PARAMETRU)':
49
+ _elemente . get ( this ) . push ( obiect ) ;
50
+ }
51
+
52
+ // MET. 'POP()' (PT. 'STERGEREA OBIECTELOR' DIN 'MATRICE')
53
+ pop ( obiect ) {
54
+
55
+ // 'STOCAREA MATRICEI' INTR-O 'CONSTANTA':
56
+ const elemente = _elemente . get ( this ) ;
57
+
58
+ // VERIFICAM - DACA 'MATRICEA' ESTE 'GOALA' SAU NU:
59
+ if ( elemente . length === 0 )
60
+ // ARUNCAM EROAREA:
61
+ throw new Error ( 'Stiva este Goala!' ) ;
62
+
63
+ // IN CAZ 'CONTRAR' -> 'STERGEM OBIECTUL' DIN 'VARFUL STIVEI'
64
+ // (PRIN APELAREA METODEI 'POP()'):
65
+ return elemente . pop ( ) ;
66
+ }
67
+
68
+
69
+ // MET. 'PEEK' (PT. 'RIDICAREA OBIECTULUI' -> IN 'VARFUL STIVEI')
70
+ peek ( ) {
71
+
72
+ // 'STOCAREA MATRICEI' INTR-O 'CONSTANTA':
73
+ const elemente = _elemente . get ( this ) ;
74
+
75
+ // VERIFICAM - DACA 'MATRICEA' ESTE 'GOALA' SAU NU:
76
+ if ( elemente . length === 0 )
77
+ // ARUNCAM EROAREA:
78
+ throw new Error ( 'Stiva este Goala!' ) ;
79
+
80
+ // IN CAZ 'CONTRAR' -> 'RIDICAM OBIECTUL' IN 'VARFUL STIVEI'
81
+ return elemente [ elemente . length - 1 ] ;
82
+ }
83
+
84
+
85
+ // 'GETTER' - MET 'COUNT()':
86
+ get count ( ) {
87
+ // RETURNAM 'LUNGIMEA MATRICEI':
88
+ return _elemente . get ( this ) . length ;
89
+ }
90
+ }
0 commit comments