Hintergrund
immutable(Unveränderlichkeit) bedeutet, dass etwas nicht geändert werden kann. In der Programmiersprache Elixir und Erlang nutzen unveränderliche Variablen.mutableist das Gegenteil, also dass etwas verändert werden kann.
Beispiel(e)
- Überschreibung von Objekten
let person = {
firstName: "Bob",
lastName: "Loblaw",
address: {
street: "123 Fake St",
city: "Emberton",
state: "NJ"
}
}
function giveAwesomePowers(person) {
person.specialPower = "invisibility";
return person;
}
// Initially, Bob has no powers :(
console.log(person);
// Then we call our function...
let samePerson = giveAwesomePowers(person);
// Now Bob has powers!
console.log(person);
console.log(samePerson);
- neues Objekt wird erstellt, sodass das ursprüngliche Objekt nicht überschrieben wird
function giveAwesomePowers(person) { let newPerson = Object.assign({}, person, { specialPower: 'invisibility' }) return newPerson; }
- Alternativ
function giveAwesomePowers(person) { let newPerson = { ...person, specialPower: 'invisibility' } return newPerson; }
Tic Tac Toe
- “falsch”
const [gameBoard, setGameBoard] = useState(initialGameBoard);
function handleSelectSquare(rowIndex, colIndex, playerSymbol) {
setGameBoard((prevGameBoard) => {
prevGameBoard[rowIndex][colIndex] = 'X';
return prevGameBoard;
});
}
- “richtig”
function handleSelectSquare(rowIndex, colIndex) {
setGameBoard((prevGameBoard) => {
const updatedBoard = [...prevGameBoard.map(innerArray =>[...innerArray])];
updatedBoard[rowIndex][colIndex] = 'X';
return updatedBoard;
});
}
Anhaltspunkte
- Eine reine Funktion muss immer den gleichen Wert zurückgeben, wenn sie die gleichen Eingaben erhält.
- Eine reine Funktion darf keine Seiteneffekte haben.
Vorsicht bei folgende Array Methoden
push (add an item to the end)
pop (remove an item from the end)
shift (remove an item from the beginning)
unshift (add an item to the beginning)
sort
reverse
splice
Sortierung
let sortedArray = [...originalArray].sort(compareFunction);