1+ //*#02 FUNCIONES Y ALCANCE
2+
3+ /*
4+ EJERCICIO:
5+ * - Crea ejemplos de funciones básicas que representen las diferentes
6+ * posibilidades del lenguaje:
7+ * Sin parámetros ni retorno, con uno o varios parámetros, con retorno...
8+ */
9+
10+ // Funciones definidas por el usuario
11+
12+ function greet ( ) {
13+ console . log ( 'Hola JavaScript' ) ;
14+ }
15+
16+ greet ( ) ;
17+
18+ // Con Retorno
19+
20+ function returnGreet ( ) {
21+ return 'Hola JavaScript' ;
22+ }
23+
24+ console . log ( returnGreet ( ) )
25+
26+ //Con Argumento
27+
28+ function argGreet ( greet , name ) {
29+ console . log ( greet + ' ' + name ) ;
30+ }
31+
32+ argGreet ( 'Hi' , 'Julius Batista para ti ' ) ;
33+
34+ //Con argumentos predeterminado
35+
36+ function defaultArgGreet ( greet , name = 'Julini' ) {
37+ console . log ( greet + ' ' + name ) ;
38+ }
39+
40+ defaultArgGreet ( 'Hi' ) ;
41+
42+ //Con Argumento de posición
43+
44+ //en este caso en JavaScript es necesario ponerlo como objetos para que independientemente del orden pueda funcionar.
45+
46+ function argGreetPosition ( { saludo, nombre} ) {
47+ console . log ( saludo + ' ' + nombre ) ;
48+ }
49+
50+ argGreetPosition ( { nombre :'Julius Batista para ti' , saludo :'hola' } ) ;
51+
52+ //Con Argumentos y retorno
53+
54+ function returnArgsGreet ( greet , name ) {
55+ return [ greet , name ] ;
56+ }
57+
58+ console . log ( returnArgsGreet ( 'hola' , 'julian' ) )
59+
60+ //Con retorno de varios Valores
61+
62+ function multipleReturnGreet ( ) {
63+ return [ 'Hola' , 'Mundo' ] ;
64+ }
65+
66+ const [ saludo , nombre ] = multipleReturnGreet ( ) ;
67+
68+ console . log ( multipleReturnGreet ( ) ) ; // Mostrar la referencia de la función
69+
70+
71+ // Con un numero variable de argumentos
72+
73+ function variableArgGreet ( ...nombres ) {
74+ for ( let nombre of nombres ) {
75+ console . log ( 'hola' , nombre )
76+ }
77+ }
78+
79+ variableArgGreet ( 'julian' , 'Phelps' , 'Ilia' )
80+
81+ // con un numero variable de argumentos con palabra clave
82+
83+
84+ function variableKeyArgGreet ( nombres ) {
85+ for ( let [ param , key ] of Object . entries ( nombres ) )
86+ { console . log ( `${ param } :${ key } ` ) } ;
87+ }
88+
89+ /*
90+ * En este ejemplo:
91+
92+ * La función variableArgGreet acepta un objeto nombres.
93+ * Object.entries(nombres) convierte el objeto en un array de pares clave-valor.
94+ * Usamos un bucle for...of para iterar sobre los pares clave-valor y colocar los parametros a cada uno.
95+ */
96+
97+ variableKeyArgGreet ( { nombre :'Julian' , edad :'205' , profesion :'programador' } ) ;
98+
99+
100+ // Forma de expresar las funciones
101+
102+ //Funcion expresada
103+
104+ let sum = function ( a , b ) {
105+ return ( a + b ) ;
106+ }
107+
108+ console . log ( sum ( 3 , 5 ) ) ;
109+
110+ //Funcion de flecha
111+
112+ let rest = ( x , y ) => {
113+ return ( x - y )
114+ }
115+ console . log ( rest ( 3 , 5 ) ) ;
116+
117+ //* tambien se podria expresar asi
118+
119+ let div = ( x , y ) => x / y
120+
121+ console . log ( div ( 4 , 2 ) ) ;
122+
123+ /*
124+ * Comprueba si puedes crear funciones dentro de funciones.
125+ */
126+
127+ let funcionExterna = ( a , b ) => {
128+
129+ let funcionInterna = ( x ) => x * x ;
130+
131+ return funcionInterna ( a ) + funcionInterna ( b ) ;
132+
133+ }
134+ console . log ( funcionExterna ( 2 , 8 ) ) ;
135+
136+
137+ /*en este caso la funcion interna hace el siguiente trabajo
138+
139+ 1) al dar un valor de 2 a (a) y de 8 a (b) y al decir que la funcion interna es x*x
140+ entonces diriamos que (2*2) = 4 y (8*8) = 64
141+
142+ 2) como estos valores se suman diriamos que 4 + 64 es igual a 68
143+
144+ 3) por consiguiente al imprimirlo y llamar a la funcion externa el valor o resultado final es 68
145+
146+ */
147+
148+
149+ /*
150+ * Utiliza algún ejemplo de funciones ya creadas en el lenguaje.
151+ */
152+
153+ console . log ( Math . max ( 1 , 3 , 2 ) ) ; // esta funcion elige el numero mayor de los expuestos en una lista
154+
155+ console . log ( Math . random ( 10 , 12 ) ) ; // la funcion Math.random elige un numero aleatorio entre los valores expuestos;
156+
157+
158+ //Funcion del objeto Date
159+
160+ let momento = new Date ( ) ;
161+ console . log ( momento ) ;
162+
163+ // Funciones del Objeto String
164+
165+ console . log ( 'texto' . length ) ;
166+
167+ /*
168+ * Pon a prueba el concepto de variable LOCAL y GLOBAL.
169+ */
170+
171+ //Variables locales y Globales
172+
173+ //Variables Globales
174+ //se puede acceder a ella asi este en fuera de la funcion
175+
176+
177+ let globalVar = ( 'soy una variable global' ) ;
178+
179+ let seeGlobal = ( ) => {
180+ console . log ( globalVar ) ;
181+ }
182+
183+ seeGlobal ( ) ;
184+ console . log ( globalVar ) ;
185+
186+ //Variables locales
187+ //Solo se puede acceder a ellar cuando se declaran dentro de la funcion si estan por fuera no
188+
189+ let localVar = ( mult ) => {
190+ let mult1 = mult * 2
191+ console . log ( mult1 )
192+ }
193+
194+ localVar ( 2 ) ;
195+ // console.log(mult1);
196+
197+ /*
198+ DIFICULTAD EXTRA (opcional):
199+ * Crea una función que reciba dos parámetros de tipo cadena de texto y retorne un número.
200+ * - La función imprime todos los números del 1 al 100. Teniendo en cuenta que:
201+ * - Si el número es múltiplo de 3, muestra la cadena de texto del primer parámetro.
202+ * - Si el número es múltiplo de 5, muestra la cadena de texto del segundo parámetro.
203+ * - Si el número es múltiplo de 3 y de 5, muestra las dos cadenas de texto concatenadas.
204+ * - La función retorna el número de veces que se ha impreso el número en lugar de los textos.
205+ */
206+
207+ let funTwo = ( num1 , num2 ) => {
208+ let n1 = parseFloat ( num1 ) ;
209+ let n2 = parseFloat ( num2 ) ;
210+ let contador = 0
211+ for ( let i = 1 ; i <= 100 ; i ++ ) {
212+ if ( i % 3 == 0 && i % 5 == 0 ) {
213+ console . log ( num1 + ' ' + num2 ) ;
214+ } else if ( i % 3 == 0 ) {
215+ console . log ( num1 ) ;
216+ } else if ( i % 5 == 0 ) {
217+ console . log ( num2 ) ;
218+ } else {
219+ console . log ( i ) ;
220+ contador ++
221+ }
222+ }
223+ return contador
224+ }
225+ console . log ( funTwo ( 'num1' , 'num2' ) ) ;
0 commit comments