Fonctions

Les fonctions sont au cœur de JavaScript et de React. Voyons les différentes syntaxes.

Fonction classique

javascript
function greet(name) {
  return `Hello ${name}!`;
}

console.log(greet('Alice')); // "Hello Alice!"

Fonction anonyme

javascript
const greet = function(name) {
  return `Hello ${name}!`;
};

Arrow Functions ⭐

La syntaxe moderne, indispensable pour React !

javascript
// Syntaxe complète
const add = (a, b) => {
  return a + b;
};

// Return implicite (une seule expression)
const add = (a, b) => a + b;

// Un seul paramètre : parenthèses optionnelles
const double = n => n * 2;

// Sans paramètre
const hello = () => 'Hello!';

En React

Les composants React sont des fonctions ! Vous utiliserez constamment les arrow functions :

javascript
// Composant React
const Button = () => {
  return <button>Click me</button>;
};

// Event handler
<button onClick={() => alert('Hi!')}>
  Click
</button>

Quelle est la syntaxe correcte pour une arrow function avec return implicite ?

Différence importante

Les arrow functions n'ont pas leur propre this, ce qui est crucial en React !

Exemples pratiques

Fonction avec plusieurs opérations

javascript
const calculateTotal = (price, quantity, tax) => {
  const subtotal = price * quantity;
  const taxAmount = subtotal * tax;
  return subtotal + taxAmount;
};

console.log(calculateTotal(100, 3, 0.2)); // 360

Fonction qui retourne un objet

javascript
// ❌ Incorrect (interprété comme bloc de code)
const makeUser = (name, age) => { name, age };

// ✅ Correct (parenthèses pour retourner un objet)
const makeUser = (name, age) => ({ name, age });

console.log(makeUser('Alice', 25));
// { name: 'Alice', age: 25 }

Astuce

Pour retourner un objet avec une arrow function et return implicite, entourez l'objet de parenthèses : () => ({ key: value })

Fonctions de callback

javascript
const numbers = [1, 2, 3, 4, 5];

// Arrow function comme callback
const doubled = numbers.map(n => n * 2);
console.log(doubled); // [2, 4, 6, 8, 10]

// Avec plusieurs paramètres
const filtered = numbers.filter((n, index) => index % 2 === 0);
console.log(filtered); // [1, 3, 5]