Expresiones y sentencias en JavaScript: diferencias | Nicolás Garzón
JavaScript está formado por piezas que producen valores y piezas que indican acciones .
Una expresión se evalúa y produce un valor.
Una sentencia le indica al programa qué debe hacer.
JavaScript
Copiar 2 + 3 ;
const total = 2 + 3 ; Una expresión es cualquier fragmento de código que JavaScript puede evaluar para obtener un valor.
JavaScript
Copiar 42 ;
"JavaScript" ;
true ; Los literales anteriores ya son expresiones porque cada uno representa un valor.
JavaScript
Copiar 10 + 5 ;
age >= 18 ;
user. name;
calculateTotal ( ) ;
condition ? "Sí" : "No" ; Cada una produce un resultado:
JavaScript
Copiar 10 + 5 ;
age >= 18 ;
user. name;
calculateTotal ( ) ;
condition ? "Sí" : "No" ; Una expresión grande suele estar formada por expresiones más pequeñas.
JavaScript
Copiar const total = price * quantity + shipping; JavaScript
Copiar price;
quantity;
price * quantity;
shipping;
price * quantity + shipping; JavaScript evalúa las piezas necesarias hasta obtener el valor final.
Una sentencia es una instrucción completa que controla o modifica la ejecución del programa.
JavaScript
Copiar const name = "Nicolás" ; Esta sentencia declara una variable.
JavaScript
Copiar if ( isAuthenticated) {
showDashboard ( ) ;
}
for ( const product of products) {
console. log ( product. name) ;
}
return total; Estas sentencias permiten declarar, decidir, repetir, retornar o interrumpir el flujo.
Crean variables, funciones o clases.
JavaScript
Copiar const tax = 0.19 ;
let count = 0 ;
function calculateTotal ( ) { }
class Product { } Deciden qué se ejecuta o cuántas veces.
JavaScript
Copiar if ( stock > 0 ) {
enablePurchase ( ) ;
} JavaScript
Copiar while ( hasPendingTasks) {
processNextTask ( ) ;
} Cambian el recorrido normal del programa.
JavaScript
Copiar return result;
break ;
continue ;
throw new Error ( "Invalid data" ) ; Cada una tiene un contexto válido. Por ejemplo, return solo puede usarse dentro de una función.
Una expresión puede utilizarse como una sentencia completa.
JavaScript
Copiar sendEmail ( ) ;
count++ ;
user. name = "Nico" ; Las tres líneas contienen expresiones, pero se escriben como instrucciones independientes porque interesa su efecto:
Ejecutar una función.
Incrementar un contador.
Asignar una propiedad.
El valor producido existe, aunque normalmente se ignore.
JavaScript
Copiar const result = ( count++ ) ; Esta línea sí conserva el valor que produjo la expresión.
Un bloque agrupa cero o más sentencias entre llaves.
JavaScript
Copiar {
const subtotal = price * quantity;
const total = subtotal + shipping;
console. log ( total) ;
} Los bloques aparecen en condicionales, bucles, funciones y otras estructuras.
JavaScript
Copiar if ( hasPermission) {
openSettings ( ) ;
trackAccess ( ) ;
} Además de agrupar instrucciones, un bloque crea un scope para variables declaradas con let y const.
Una expresión puede colocarse donde JavaScript necesita un valor.
JavaScript
Copiar const total = price * quantity; La parte derecha de = debe producir un valor.
JavaScript
Copiar showMessage ( isAdmin ? "Administrador" : "Usuario" ) ; El argumento de la función también debe ser una expresión.
JavaScript
Copiar const settings = {
theme : preferredTheme ?? "system" ,
} ; El valor de una propiedad también es una expresión.
No puedes colocar una sentencia como if directamente donde se espera un valor:
JavaScript
Copiar
const message = if ( isAdmin) {
"Administrador" ;
} else {
"Usuario" ;
} ; Para escoger un valor puede usarse un ternario o una función:
JavaScript
Copiar const message = isAdmin ? "Administrador" : "Usuario" ; JavaScript
Copiar function getRoleLabel ( isAdmin ) {
if ( isAdmin) {
return "Administrador" ;
}
return "Usuario" ;
} La asignación es una expresión.
JavaScript
Copiar const result = ( score = 10 ) ;
console. log ( result) ; Esto permite encadenar asignaciones:
JavaScript
Copiar let first;
let second;
first = second = 0 ; Primero second recibe 0; después first recibe el resultado de esa asignación.
Aunque es válido, puede ser menos claro que escribir dos líneas:
JavaScript
Copiar first = 0 ;
second = 0 ; La claridad debe pesar más que reducir caracteres.
El punto y coma marca el final de muchas sentencias.
JavaScript
Copiar const name = "Nicolás" ;
console. log ( name) ; JavaScript tiene Automatic Semicolon Insertion , un conjunto de reglas que inserta puntos y coma en ciertos lugares cuando no se escriben.
Por eso este código suele funcionar:
JavaScript
Copiar const name = "Nicolás"
console. log ( name) Sin embargo, no significa que JavaScript coloque un punto y coma al final de cada línea. Algunas combinaciones pueden interpretarse de una forma inesperada.
JavaScript
Copiar const value = getValue ( )
[ 1 , 2 , 3 ] . forEach ( console. log) Sin una configuración y un formato consistentes, JavaScript podría intentar interpretar la segunda línea como continuación de la primera.
La decisión práctica es simple:
Sigue una convención consistente.
Usa un formatter como Prettier.
No dependas de intuiciones incorrectas sobre la inserción automática.
JavaScript
Copiar const subtotal = items. reduce (
( total, item ) => total + item. price * item. quantity,
0 ,
) ;
const hasFreeShipping = subtotal >= 100 ;
const shipping = hasFreeShipping ? 0 : 10 ;
const total = subtotal + shipping;
if ( total > balance) {
showInsufficientBalance ( ) ;
} else {
confirmOrder ( total) ;
}
Los cálculos y comparaciones son expresiones.
Las declaraciones const son sentencias.
El ternario es una expresión que escoge un valor.
El if es una sentencia que controla la ejecución.
Las llamadas de funciones usadas solas son sentencias de expresión.
Pensar que toda línea de código es únicamente una sentencia.
Intentar usar if, for o return donde se espera un valor.
Encadenar asignaciones solo porque la sintaxis lo permite.
Confundir el valor producido por una expresión con su efecto secundario.
Confiar en que JavaScript siempre insertará un punto y coma donde esperas.
Escribir expresiones demasiado grandes que esconden varias decisiones.
Una expresión produce un valor.
Una sentencia indica una acción o controla el flujo.
Algunas expresiones pueden utilizarse como sentencias completas.
Los bloques agrupan sentencias y pueden crear scope.
Las asignaciones y llamadas de funciones también son expresiones.
No toda sentencia puede utilizarse donde se necesita un valor.
El punto y coma debe seguir una convención consistente, no una suposición.
Clasifica cada fragmento como expresión, sentencia o ambos según su uso:
JavaScript
Copiar 10 * 2 ;
const total = 10 * 2 ;
user. name;
updateUser ( ) ;
if ( isReady) {
start ( ) ;
}
count += 1 ; Respuesta
10 * 2 es una expresión utilizada como sentencia.
const total = 10 * 2 es una sentencia de declaración que contiene una expresión.
user.name es una expresión utilizada como sentencia.
updateUser() es una expresión de llamada utilizada como sentencia.
if (...) { ... } es una sentencia de control.
count += 1 es una expresión de asignación utilizada como sentencia.
Condicionales explica cómo ejecutar diferentes bloques según el resultado de una condición.