hace 2 años
En el mundo de la programación, las funciones son bloques de código reutilizables que realizan tareas específicas. Para que estas funciones sean realmente útiles, a menudo necesitan información externa, y aquí es donde entran en juego los argumentos. Entender cómo pasar argumentos a las funciones es fundamental tanto en JavaScript como en Python, aunque existen diferencias sutiles pero importantes entre ambos lenguajes. En este artículo, exploraremos en profundidad este concepto, desglosando las particularidades de cada lenguaje y proporcionando ejemplos claros para que puedas dominar este aspecto crucial de la programación.

Parámetros y Argumentos: Los Fundamentos
Antes de sumergirnos en las especificidades de JavaScript y Python, es importante aclarar la diferencia entre parámetros y argumentos. Aunque a menudo se usan indistintamente, existe una distinción técnica:
- Parámetros: Son los nombres de las variables listadas en la definición de la función. Piensa en ellos como los 'marcadores de posición' dentro de la función que esperan recibir valores.
- Argumentos: Son los valores reales que se pasan a (y son recibidos por) la función cuando se la llama o invoca. Son los datos concretos que se utilizan cuando la función se ejecuta.
Por ejemplo, en la siguiente función JavaScript:
function saludar(nombre) { console.log("Hola, " + nombre + "!"); } nombre es un parámetro. Cuando llamamos a la función:
saludar("Ana"); "Ana" es el argumento.
Argumentos en Funciones JavaScript
JavaScript es conocido por su flexibilidad, y esto se extiende al manejo de argumentos en funciones. Algunas características clave son:
- No se especifica el tipo de dato: En JavaScript, no defines el tipo de dato que espera un parámetro. Puedes pasar cualquier tipo de valor como argumento.
- Sin verificación de tipo: JavaScript no realiza comprobaciones de tipo en los argumentos que se pasan. Si una función espera un número y recibe una cadena, no generará un error automáticamente (aunque podría provocar un comportamiento inesperado).
- No se verifica el número de argumentos: JavaScript no verifica si se pasa el número correcto de argumentos a una función. Puedes llamar a una función con más o menos argumentos de los que se definieron.
Parámetros por Defecto en JavaScript
Si una función se llama con menos argumentos de los declarados, los parámetros faltantes se establecen en undefined. En ocasiones, esto puede ser aceptable, pero en otras es preferible asignar un valor por defecto a un parámetro. Antes de ES6, se hacía de la siguiente manera:
function miFuncion(x, y) { if (y === undefined) { y = 2; } return x * y; } Con ES6, JavaScript introdujo una sintaxis más concisa y elegante para los valores por defecto:
function miFuncion(x, y = 10) { return x + y; } console.log(miFuncion(5)); // Salida: 15 (y toma el valor por defecto 10) console.log(miFuncion(5, 20)); // Salida: 25 (y toma el valor 20) El Parámetro Rest (...)
El parámetro rest (...) es una característica poderosa de ES6 que permite a una función tratar un número indefinido de argumentos como un array. Esto es especialmente útil cuando no sabes cuántos argumentos se pasarán a la función.
function sumar(...args) { let suma = 0; for (let arg of args) suma += arg; return suma; } let x = sumar(4, 9, 16, 25, 29, 100, 66, 77); console.log(x); // Salida: 326 En este ejemplo, ...args recopila todos los argumentos pasados a la función sumar en un array llamado args, sobre el cual podemos iterar fácilmente.
El Objeto arguments
JavaScript proporciona un objeto integrado llamado arguments dentro de cada función (excepto las funciones flecha). Este objeto contiene un array-like de todos los argumentos que se utilizaron cuando se llamó a la función. Aunque el parámetro rest es generalmente preferible en el código moderno, arguments sigue siendo útil en ciertos escenarios o para entender código JavaScript más antiguo.
function encontrarMaximo() { let max = -Infinity; for (let i = 0; i < arguments.length; i++) { if (arguments[i] > max) { max = arguments[i]; } } return max; } let maximo = encontrarMaximo(1, 123, 500, 115, 44, 88); console.log(maximo); // Salida: 500 Paso de Argumentos por Valor en JavaScript
En JavaScript, los argumentos se pasan por valor. Esto significa que cuando pasas un argumento a una función, la función recibe una copia del valor, no la ubicación original en memoria. Por lo tanto, si una función modifica el valor de un argumento primitivo (como un número o una cadena), no afectará al valor original fuera de la función.
function modificarValor(valor) { valor = 100; // Modifica la copia local de 'valor' console.log("Dentro de la función: ", valor); } let numero = 50; modificarValor(numero); console.log("Fuera de la función: ", numero); // El valor original de 'numero' no cambia // Salida: // Dentro de la función: 100 // Fuera de la función: 50 Objetos Pasados por Referencia en JavaScript
Aunque los tipos primitivos se pasan por valor, los objetos en JavaScript se comportan como si se pasaran por referencia. En realidad, lo que se pasa por valor es la referencia al objeto. Esto significa que si una función modifica una propiedad de un objeto que se pasó como argumento, esos cambios sí se reflejarán en el objeto original fuera de la función.
function modificarObjeto(obj) { obj.propiedad = "modificada"; // Modifica la propiedad del objeto original console.log("Dentro de la función: ", obj); } let miObjeto = { propiedad: "original" }; modificarObjeto(miObjeto); console.log("Fuera de la función: ", miObjeto); // El objeto original ha sido modificado // Salida: // Dentro de la función: { propiedad: 'modificada' } // Fuera de la función: { propiedad: 'modificada' } Argumentos en Funciones Python
Python, al igual que JavaScript, también ofrece flexibilidad en el manejo de argumentos en funciones, aunque con algunas diferencias en la sintaxis y el comportamiento.
Parámetros y Argumentos en Python
En Python, la definición de funciones también utiliza parámetros y, al ser invocadas, se les pasan argumentos. La sintaxis básica es similar a JavaScript:
def saludar(nombre): print(f"Hola, {nombre}!") Aquí, nombre es un parámetro, y al llamar saludar("Carlos"), "Carlos" es el argumento.
Funciones como Argumentos en Python
Una característica poderosa de Python es que las funciones son objetos de primera clase. Esto significa que las funciones pueden ser asignadas a variables, pasadas como argumentos a otras funciones y retornadas por otras funciones. Esta capacidad permite la creación de funciones de orden superior, decoradores y el uso de funciones lambda.
Funciones de Orden Superior
Una función de orden superior es una función que toma una o más funciones como argumentos, o devuelve una función como resultado. Esto facilita la creación de código reutilizable y eficiente.
def aplicar_operacion(funcion, numero): return funcion(numero) def duplicar(x): return x * 2 print(aplicar_operacion(duplicar, 5)) # Salida: 10 En este ejemplo, aplicar_operacion es una función de orden superior que toma la función duplicar como argumento y la aplica al número 5.

Funciones Lambda
Las funciones lambda en Python son funciones pequeñas y anónimas que se definen utilizando la palabra clave lambda. Son especialmente útiles para operaciones rápidas y sencillas, y a menudo se utilizan como argumentos para funciones de orden superior.
def aplicar_operacion_lambda(funcion, numero): return funcion(numero) print(aplicar_operacion_lambda(lambda x: x ** 2, 5)) # Salida: 25 Aquí, lambda x: x ** 2 es una función lambda que eleva al cuadrado su argumento. Se pasa directamente como argumento a aplicar_operacion_lambda.
Decoradores
Los decoradores en Python son una forma poderosa de modificar o extender el comportamiento de una función sin alterar su definición original. Un decorador es esencialmente una función que toma otra función como argumento y devuelve una nueva función que 'envuelve' a la función original.
def decorador_saludo(funcion_original): def funcion_envolvente(): print("¡Hola desde el decorador!") funcion_original() print("¡Adiós desde el decorador!") return funcion_envolvente @decorador_saludo def saludar_personalizado(): print("Saludos personalizados!") saludar_personalizado() # Salida: # ¡Hola desde el decorador! # Saludos personalizados! # ¡Adiós desde el decorador! En este ejemplo, decorador_saludo es un decorador que añade mensajes antes y después de la ejecución de la función saludar_personalizado.
Funciones Built-in que usan Funciones como Argumentos
Python ofrece varias funciones built-in que aceptan funciones como argumentos, facilitando la programación funcional y la manipulación de colecciones de datos.
map(): Aplica una función a cada elemento de un iterable (como una lista) y devuelve un iterador con los resultados.filter(): Filtra los elementos de un iterable basándose en una función de prueba (que devuelveTrueoFalse) y devuelve un iterador con los elementos que pasan la prueba.reduce(): Aplica una función de forma acumulativa a los elementos de un iterable, reduciéndolo a un solo valor. (Requiere importarfunctools).
numeros = [1, 2, 3, 4, 5] dobles = list(map(lambda x: x * 2, numeros)) print(dobles) # Salida: [2, 4, 6, 8, 10] pares = list(filter(lambda x: x % 2 == 0, numeros)) print(pares) # Salida: [2, 4] from functools import reduce suma = reduce(lambda x, y: x + y, numeros) print(suma) # Salida: 15 Tipos de Argumentos en Python
Python es flexible en cuanto a los tipos de argumentos que puedes pasar a una función. Ofrece diferentes categorías:
- Argumentos Posicionales: Se basan en el orden en el que se pasan a la función.
- Argumentos de Palabra Clave (Keyword Arguments): Se pasan utilizando el nombre del parámetro, lo que permite pasarlos en cualquier orden y mejora la legibilidad.
- Argumentos por Defecto: Se definen con un valor predeterminado en la definición de la función. Si no se proporciona un valor para ese parámetro al llamar a la función, se utiliza el valor por defecto.
- Argumentos de Longitud Variable:
*args(Argumentos Posicionales Arbitrarios): Permite pasar un número variable de argumentos posicionales a la función. Se empaquetan en una tupla dentro de la función.kwargs(Argumentos de Palabra Clave Arbitrarios): Permite pasar un número variable de argumentos de palabra clave. Se empaquetan en un diccionario dentro de la función.
def funcion_ejemplo(a, b=2, *args, kwargs): print("a:", a, "b:", b) print("args:", args) print("kwargs:", kwargs) funcion_ejemplo(1, 3, 'extra', 'otro_extra', clave1='valor1', clave2='valor2') # Salida: # a: 1 b: 3 # args: ('extra', 'otro_extra') # kwargs: {'clave1': 'valor1', 'clave2': 'valor2'} Tabla Comparativa: Argumentos en JavaScript vs. Python
| Característica | JavaScript | Python |
|---|---|---|
| Tipado de Parámetros | No se especifica el tipo | No se especifica el tipo |
| Verificación de Tipo | No realiza verificación | No realiza verificación estática |
| Verificación de Número de Argumentos | No verifica | No verifica estrictamente |
| Parámetros por Defecto | Sintaxis ES6: param = valor | Sintaxis: param = valor |
| Argumento Rest/Args | ...args (array-like) | *args (tupla), kwargs (diccionario) |
Objeto arguments | Disponible (array-like) | No disponible directamente, usar *args |
| Funciones como Objetos de Primera Clase | Sí | Sí |
| Funciones de Orden Superior | Sí | Sí |
| Funciones Lambda | Sí | Sí |
| Decoradores | No directamente (se pueden emular) | Sí, sintaxis @decorador |
Preguntas Frecuentes (FAQ)
- ¿Qué ocurre si paso menos argumentos de los esperados en JavaScript?
Los parámetros faltantes se establecen en
undefined. Puedes manejar esto con valores por defecto o lógica condicional dentro de la función. - ¿Cómo puedo pasar un número variable de argumentos a una función en Python?
Utiliza
*argspara argumentos posicionales variables ykwargspara argumentos de palabra clave variables. - ¿Son las funciones lambda útiles en ambos lenguajes?
Sí, tanto en JavaScript como en Python, las funciones lambda (o funciones flecha en JavaScript) son útiles para funciones pequeñas y anónimas, especialmente como argumentos para funciones de orden superior.
- ¿Qué son los decoradores en Python y para qué sirven?
Los decoradores son una forma de modificar el comportamiento de las funciones en Python sin cambiar su código directamente. Son útiles para añadir funcionalidades como logging, gestión de permisos, o medición de tiempo de ejecución.
- ¿Cómo se pasan los objetos como argumentos en JavaScript?
Los objetos se pasan por 'referencia' (en realidad, por valor de la referencia). Modificar las propiedades del objeto dentro de la función afectará al objeto original fuera de la función.
Conclusión
Dominar el paso de argumentos a funciones es esencial para escribir código eficiente y reutilizable tanto en JavaScript como en Python. Aunque comparten conceptos fundamentales, cada lenguaje tiene sus propias particularidades sintácticas y de comportamiento. Comprender estas diferencias y aprovechar las herramientas que cada lenguaje ofrece, como los parámetros por defecto, el parámetro rest/args, las funciones de orden superior y los decoradores, te permitirá escribir programas más robustos, flexibles y fáciles de mantener. La práctica constante y la experimentación con los ejemplos proporcionados te ayudarán a consolidar estos conocimientos y a convertirte en un programador más competente en ambos lenguajes.
