Beste praktijken voor conditionele logica in TypeScript

Beste praktijken voor conditionele logica in TypeScript

Dit artikel legt de beste praktijken uit voor conditionele logica in TypeScript.

YouTube Video

Beste praktijken voor conditionele logica in TypeScript

Types verfijnen met type guards

Door gebruik te maken van het TypeScript-type systeem en type guards te gebruiken binnen if-verklaringen, kunt u de typeveiligheid en leesbaarheid verbeteren.

1function processInput(input: string | number) {
2    if (typeof input === "string") {
3        console.log(`String input: ${input.toUpperCase()}`);
4    } else {
5        console.log(`Number input: ${input.toFixed(2)}`);
6    }
7}

Het gebruik van typeof en andere type guards zorgt ervoor dat de code binnen elk blok typeveilig en contextueel relevant is.

Vermijd geneste if-verklaringen

Diep geneste if-verklaringen verminderen de leesbaarheid en onderhoudbaarheid van de code. Gebruik in plaats daarvan vroege terugkeer, logische operatoren of extractiefuncties.

Slecht voorbeeld:

1function checkUser(user: { age?: number; isAdmin?: boolean }) {
2    if (user.age) {
3        if (user.age > 18) {
4            if (user.isAdmin) {
5                console.log("User is an adult admin.");
6            }
7        }
8    }
9}

Verbeterd voorbeeld:

1function checkUser(user: { age?: number; isAdmin?: boolean }) {
2    if (!user.age || user.age <= 18 || !user.isAdmin) {
3        return;
4    }
5    console.log("User is an adult admin.");
6}

Deze aanpak maakt de code platter en de logica beter begrijpelijk.

Gebruik optionele chaining

Bij het controleren van geneste eigenschappen, gebruik optionele chaining (?.) om onnodige if-voorwaarden te vermijden.

Zonder optionele chaining:

1if (user && user.profile && user.profile.email) {
2    console.log(user.profile.email);
3}

Met optionele chaining:

1if (user?.profile?.email) {
2    console.log(user.profile.email);
3}

Dit vermindert boilerplate-code en verbetert de leesbaarheid. Hier verwijst boilerplate-code naar repetitieve, gestandaardiseerde code die vaak nodig is om specifieke taken in programmeren uit te voeren.

Gebruik strikte gelijkheidsoperatoren

TypeScript ondersteunt strikt typen, en het gebruik van strikte gelijkheid (===) of strikte ongelijkheid (!==) helpt onverwachte typecoercion te voorkomen.

Slecht voorbeeld:

1if (value == "123") {
2    console.log("Value is 123.");
3}

Verbeterd voorbeeld:

1if (value === "123") {
2    console.log("Value is 123.");
3}

Gebruik enums of letterlijke types voor expliciete voorwaarden

Het gebruik van enums of letterlijke types verduidelijkt voorwaarden en vermindert de kans op fouten.

 1type Status = "success" | "error" | "loading";
 2
 3function displayMessage(status: Status) {
 4    if (status === "success") {
 5        console.log("Operation succeeded.");
 6    } else if (status === "error") {
 7        console.log("Operation failed.");
 8    } else {
 9        console.log("Loading...");
10    }
11}

Door verwachte waarden te definiëren, kan TypeScript typen detecteren en nauwkeurigheid garanderen.

Combineer gelijkaardige voorwaarden

Wanneer meerdere voorwaarden dezelfde logica delen, combineer ze met behulp van logische operatoren of een switch-statement.

Slecht voorbeeld:

1if (role === "admin") {
2    grantAccess();
3}
4if (role === "superadmin") {
5    grantAccess();
6}

Verbeterd voorbeeld:

1if (role === "admin" || role === "superadmin") {
2    grantAccess();
3}

Gebruik als alternatief een switch-statement om meerdere duidelijke takken te verwerken:

 1switch (role) {
 2    case "admin":
 3    case "superadmin":
 4        grantAccess();
 5        break;
 6    case "user":
 7        console.log("Limited access.");
 8        break;
 9    default:
10        console.log("No access.");
11}

Voorkom dat conditionele expressies complex worden

Complexe conditionele expressies in if-statements verminderen de leesbaarheid. Haal ze uit in betekenisvolle variabelen of functies.

Slecht voorbeeld:

1if (user.age > 18 && user.isAdmin && user.permissions.includes("write")) {
2    console.log("User can write.");
3}

Verbeterd voorbeeld:

1const isAdultAdminWithWriteAccess =
2    user.age > 18 && user.isAdmin && user.permissions.includes("write");
3
4if (isAdultAdminWithWriteAccess) {
5    console.log("User can write.");
6}

Het benoemen van de voorwaarden verbetert de duidelijkheid en maakt de code zelfdocumenterend.

Gebruik ternary operators voor eenvoudige voorwaarden

Voor eenvoudige voorwaarden maakt het gebruik van een ternary operator de code beknopt.

Voorbeeld:

1const message = isLoggedIn ? "Welcome back!" : "Please log in.";
2console.log(message);

Gebruik echter geen ternary operators voor complexe voorwaarden, omdat dit de leesbaarheid vermindert.

Vervang voorwaardelijke aftakkingen door arrays of mappen

Wanneer de voorwaarde eenvoudigweg een waardetoewijzing is, kunnen arrays of mappen de leesbaarheid en onderhoudbaarheid van de code verbeteren in vergelijking met switch-verklaringen of complexe if-else-structuren. In TypeScript kun je type-informatie benutten om het veiliger te implementeren.

Slecht voorbeeld:

 1function getDayName(day: number): string {
 2    switch (day) {
 3        case 0:
 4            return "Sunday";
 5        case 1:
 6            return "Monday";
 7        case 2:
 8            return "Tuesday";
 9        case 3:
10            return "Wednesday";
11        case 4:
12            return "Thursday";
13        case 5:
14            return "Friday";
15        case 6:
16            return "Saturday";
17        default:
18            return "Invalid day";
19    }
20}

Verbeterd voorbeeld: Gebruik van een array

 1function getDayName(day: number): string {
 2    const days = [
 3        "Sunday",
 4        "Monday",
 5        "Tuesday",
 6        "Wednesday",
 7        "Thursday",
 8        "Friday",
 9        "Saturday"
10    ];
11    return days[day] ?? "Invalid day";
12}

Verbeterd voorbeeld: Gebruik van een map

 1function getDayName(day: number): string {
 2    const dayMap = new Map<number, string>([
 3        [0, "Sunday"],
 4        [1, "Monday"],
 5        [2, "Tuesday"],
 6        [3, "Wednesday"],
 7        [4, "Thursday"],
 8        [5, "Friday"],
 9        [6, "Saturday"]
10    ]);
11    return dayMap.get(day) ?? "Invalid day";
12}

Conclusie

Door deze beste praktijken te volgen, kunt u if-statements in TypeScript duidelijk, efficiënt en onderhoudbaar maken. Door gebruik te maken van TypeScript-functies zoals type guards, optional chaining en enums, kun je de leesbaarheid en robuustheid van de code verbeteren. Door best practices te volgen, kun je voorwaarden beknopt en duidelijk houden, wat resulteert in code die gemakkelijker te begrijpen en te onderhouden is.

Je kunt het bovenstaande artikel volgen met Visual Studio Code op ons YouTube-kanaal. Bekijk ook het YouTube-kanaal.

YouTube Video