Praktik Terbaik untuk Logika Kondisional dalam TypeScript

Praktik Terbaik untuk Logika Kondisional dalam TypeScript

Artikel ini menjelaskan praktik terbaik untuk logika kondisional dalam TypeScript.

YouTube Video

Praktik Terbaik untuk Logika Kondisional dalam TypeScript

Mempersempit Jenis dengan Penjaga Tipe (Type Guards)

Dengan memanfaatkan sistem tipe TypeScript dan menggunakan penjaga tipe (type guards) dalam pernyataan if, Anda dapat meningkatkan keamanan tipe dan keterbacaan kode.

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}

Menggunakan typeof dan penjaga tipe lainnya memastikan bahwa kode dalam setiap blok aman secara tipe dan relevan secara konteks.

Hindari Pernyataan if Bersarang

Pernyataan if yang terlalu bersarang mengurangi keterbacaan dan kemudahan pemeliharaan kode. Sebagai gantinya, gunakan pengembalian awal (early returns), operator logis, atau ekstraksi fungsi.

Contoh Buruk:

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}

Contoh yang Ditingkatkan:

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}

Pendekatan ini meratakan kode dan membuat logika lebih mudah dipahami.

Gunakan Optional Chaining

Saat memeriksa properti yang bersarang, gunakan optional chaining (?.) untuk menghindari kondisi if yang tidak diperlukan.

Tanpa Optional Chaining:

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

Menggunakan Optional Chaining:

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

Ini mengurangi kode boilerplate dan meningkatkan keterbacaan. Di sini, kode boilerplate merujuk pada kode yang berulang dan standar yang sering kali diperlukan untuk menyelesaikan tugas tertentu dalam pemrograman.

Gunakan Operator Kesetaraan Ketat (Strict Equality Operators)

TypeScript mendukung pengetikan ketat, dan menggunakan kesetaraan ketat (===) atau ketidaksamaan ketat (!==) membantu mencegah koersi tipe yang tidak terduga.

Contoh Buruk:

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

Contoh yang Ditingkatkan:

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

Gunakan Enums atau Tipe Literal untuk Kondisi yang Eksplisit

Menggunakan enums atau tipe literal memperjelas kondisi dan mengurangi kemungkinan kesalahan.

 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}

Dengan mendefinisikan nilai yang diharapkan, TypeScript dapat mendeteksi tipe dan memastikan akurasi.

Gabungkan kondisi yang serupa

Ketika beberapa kondisi memiliki logika yang sama, gabungkan menggunakan operator logika atau pernyataan switch.

Contoh Buruk:

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

Contoh yang Ditingkatkan:

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

Sebagai alternatif, gunakan pernyataan switch untuk menangani beberapa cabang yang jelas:

 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}

Hindari membuat ekspresi kondisional menjadi rumit

Ekspresi kondisional yang kompleks dalam pernyataan if mengurangi keterbacaan. Ekstrak mereka ke dalam variabel atau fungsi yang bermakna.

Contoh Buruk:

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

Contoh yang Ditingkatkan:

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

Memberi nama pada kondisi meningkatkan kejelasan dan membuat kode terdokumentasi dengan sendirinya.

Gunakan operator ternary untuk kondisi yang sederhana

Untuk kondisi yang sederhana, menggunakan operator ternary membuat kode lebih ringkas.

Contoh:

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

Namun, hindari menggunakan operator ternary untuk kondisi yang kompleks karena mengurangi keterbacaan.

Kesimpulan

Dengan mengikuti praktik terbaik ini, Anda dapat membuat pernyataan if di TypeScript menjadi jelas, efisien, dan mudah dirawat. Manfaatkan fitur TypeScript seperti type guard, optional chaining, dan enum untuk meningkatkan keterbacaan dan kekuatan kode Anda. Jaga agar kondisi tetap ringkas dan jelas, demi kode yang selalu mudah dipahami dan dirawat.

Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.

YouTube Video