JS repaso: funciones

Los primeros ejercicios de repaso tienen que ver con las funciones. Recordemos, a una función se le pueden pasar parámetros y muchas veces devuelven un valor.
Lo primero: nombre de la función y los parámetros, después el código que nos haga falta y devolver los valores
Ej: función suma que le pasemos dos números y nos devuelva la suma.

Lo primero que hago es poner el nombre y los parámetros:
function suma(num1,num2){
}
Después hago el cálculo que en este caso es muy sencillo:
function suma(num1,num2){
let resultado=num1+num2
}
Por último devuelvo el valor:
function suma(num1,num2){
let resultado=num1+num2
return resultado
}

Resolvamos los siguientes ejercicios. Son sólo de funciones y devolver valores, no hay if, bucles o tablas

1.- Crear una función triple que nos devuelva el triple de un número. Ej: triple(5)–>15 triple(0)–>0
2.- Crear una función nombreCompleto que pasándole un nombre y un apellido nos devuelva una cadena con nombre y apellido juntos separados por un espacio: nombreCompleto(‘ana’,’pi’)->’ana pi’
3.- Crear una función areaCirculo que le pasemos el radio de un círculo y nos devuelva el área, que es 2*3.1416*r*r ej: areaCirculo(1)–>6,2832
4.- Crear una función triplicar que le pasemos una cadena y nos la devuelva repetida tres veces: triplocar(‘hola’)->’holaholahola’
5.- Crear una función perímetro a la que le pasamos dos lados y nos devuelve el perímetro de un rectángulo, que es lado1*2+lado2*2 Ej: perimetro(2,3)–>10

function triple (num) {
  const res = num * 3
  return res
}

function nombreCompleto (nombre, apellidos) {
  const completo = nombre + ' ' + apellidos
  return completo
}

function areaCirculo (radio) {
  const area = Math.PI * radio * radio // radio**2
  return area
}

function triplicar (cadena) {
  const res = cadena + cadena + cadena // cadena.repeat(3)
  return res
}

function perimetro (lado1, lado2) {
  const perimetro = lado1 * 2 + lado2 * 2
  return perimetro
}

Ejemplos funciones


function saludo(nombre, numero) {
console.log("Hola " + nombre + " que tal");
console.log("Yo estoy muy bien");
console.log("La raiz cuadrada de " + numero + " es " + Math.sqrt(numero) + " ¿Lo sabías?");
}

saludo("Ana", 2);
saludo("Juan", 4);
saludo("Eva", 25);

function suma(numero) {
var s = 0;
for (var i = 1; i <= numero; i++) {
s += i;
}
return s;
}

function mayor(a, b) {
if (a > b) {
return a;
} else {
return b;
}
}

console.log(mayor(1, 8));
console.log(mayor(111, 8));

var c = mayor(3, 6);
console.log(c);

function repetir(caracter, numero) {
var res = "";
for (var i = 0; i < numero; i++) {
res += caracter;
}
return res;
}
console.log(repetir("*", 6));
console.log(repetir("#", 12));

function arbol(longitud) {
for (var i = 0; i < longitud; i++) {
console.log(repetir("*",i));
}
}
function arbol2(longitud) {
for (var i = 0; i < longitud; i++) {
console.log(repetir(" ",longitud-i)+repetir("*",i*2+1));
}
}
arbol2(8);

Funciones recursivas en PHP

Algunos ejemplos:

function factorial($numero) {
 if ($numero <= 1) {
 return 1;
 } else {
 return $numero * factorial($numero - 1);
 }
 }

//Sería equivalente a lo siguiente:
 function factorial5() {
 return 5 * factorial4();
 }

 function factorial4() {
 return 4 * factorial3();
 }

 function factorial3() {
 return 3 * factorial2();
 }

 function factorial2() {
 return 2 * factorial1();
 }

 function factorial1() {
 return 1;
 }

 function fibonacci($n) {
 if ($n <= 2) {
 return 1;
 } else {
 return fibonacci($n - 1) + fibonacci($n - 2);
 }
 }

 function anagrama($cadena, $inicio = "") {
 
 //Si la longitud es uno, el anagrama es el mismo. Como es un nodo final imprimimos el resultado
 if (strlen($cadena) == 1) {
 echo $inicio . $cadena . "<br>";
 return 1;
 } else {
 //Si no el anagrama será cada una de las letras más el anagrama del resto de la cadena
 //Le pasamos como parámetro la cadena de inicio que será la letra más lo que nos hayan
 //pasado como parámetro
 $c=0;
 for ($i = 0; $i < strlen($cadena); $i++) {
 $letra = substr($cadena, $i, 1);
 $c+=anagrama(substr($cadena, 0, $i) . substr($cadena, $i + 1), $inicio . $letra);
 }
 return $c;
 }
 }

Funciones globales

Éstas son las funciones globales disponibles en CakePHP. Muchas de ellas simplemente facilitan la llamada a funciones de PHP con nombres largos, pero otras (como vendor() y uses()) se pueden usar para incluir código o realizar otras funciones útiles. Lo más probable es que si estás buscando una función para realizar una tarea con mucha frecuencia, la encuentres aquí.

__

__(string $string_id, boolean $return =  false)

Esta función gestiona la localización en las aplicaciones CakePHP. El parámetro $string_id identifica la ID de una traducción, mientras que el segundo parámetro indica si se debe mostrar automáticamente la cadena (por defecto), o devolverla para su procesamiento (pasar el valor true para que esto suceda).

Visita la sección Localización e Internacionalización para más información.

am

am(array $uno, $dos, $tres...)

Combina todos los arrays pasados como parámetros y devuelve el array resultante.

config

Puede ser usado para cargar archivos desde el directorio config mediante include_once. La función checa si existe el archivo antes de incluir y regresa un booleano. Toma un número opcional de argumento.

Ejemplo: config('some_file', 'myconfig');

convertSlash

convertSlash(string $cadena)

Sustituye las barras (“/”) por subrayados (“_”) y elimina el primer y el último subrayados en una cadena. Devuelve la cadena convertida.

debug

debug(mixed $var, boolean $showHtml = false)

Si el nivel de depuración, variable de configuración DEBUG, es distinto de cero, se muestra $var. Si $showHTML es true, los datos se formatean para mostrarlos adecuadamente en los navegadores web.

env

env(string $key)

Obtiene una variable de entorno a partir de las fuentes disponibles. Alternativa si las variables $_SERVER o $_ENV están deshabilitadas.

También permite emular las variables PHP_SELF y DOCUMENT_ROOT en los servidores que no permitan su uso. De hecho, es una buena práctica usar env() en lugar de $_SERVER o getenv() (sobretodo si pensamos distribuir el código), ya que ofrece la misma funcionalidad y es totalmente compatible.

fileExistsInPath

fileExistsInPath(string $archivo)

Comprueba que el fichero $archivo está en el include_path actual de PHP. Devuelve un valor booleano.

h

h(string $texto, string $charset)

Alias de la función htmlspecialchars().

pr

pr(mixed $var)

Alias de la función print_r(), añadiendo la etiqueta <pre> a la salida.

stripslashes_deep

stripslashes_deep(array $valor)

Elimina recursivamente las barras invertidas de $valor. Devuelve el array modificado.

Funciones Array (2)

Saber si existe un valor en el array:

$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Existe Irix";
}
if (in_array("mac", $os)) {
    echo "Existe mac";
}

Máximo y mínimo de un array:

echo max(2, 3, 1, 6, 7);  // 7
echo max(array(2, 4, 5)); // 5

echo min(2, 3, 1, 6, 7);  // 1
echo min(array(2, 4, 5)); // 2

Ordenar arrays ¡Ojo si son asociativos! (ver manual)

$frutas = array("limón", "naranja", "banana", "albaricoque");
sort($frutas); //No asociativos
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
asort($fruits);//Asociativos
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits); //Ordena por clave
$números = range(1, 20);
shuffle($números); //Desordena

Aplicar una función a todos los elementos del array:

$frutas = array("d" => "limón", "a" => "naranja", "b" => "banana", "c" => "manzana");

function test_alter(&$elemento1, $clave, $prefijo)
{
    $elemento1 = "$prefijo: $elemento1";
}

function test_print($elemento2, $clave)
{
    echo "$clave. $elemento2
\n"; } echo "Antes ...:\n"; array_walk($frutas, 'test_print'); array_walk($frutas, 'test_alter', 'fruta'); echo "... y después:\n"; array_walk($frutas, 'test_print');

Union de arrays:
$union = array_unique(array_merge($a, $b));
Intersección:
$intersection = array_intersect($a, $b);
Diferencia:
$difference = array_diff($a, $b);
Diferencia simétrica:
$difference = array_merge(array_diff($a, $b), array_diff($b, $a));