TypeScript'te Koşullu Mantık için En İyi Uygulamalar

TypeScript'te Koşullu Mantık için En İyi Uygulamalar

Bu makale, TypeScript'te koşullu mantık için en iyi uygulamaları açıklar.

YouTube Video

TypeScript'te Koşullu Mantık için En İyi Uygulamalar

Tip Koruyucular ile Türleri Daraltma

TypeScript'in tür sisteminden yararlanarak ve if ifadelerinde tür koruyucuları kullanarak, tür güvenliğini ve okunabilirliği artırabilirsiniz.

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}

typeof ve diğer tür koruyucuları kullanmak, her bir bloğun içindeki kodun tür güvenliğini ve bağlam açısından uygunluğunu sağlar.

İç İçe Geçmiş if İfadelerinden Kaçının

Derinlemesine iç içe geçmiş if ifadeleri, kodun okunabilirliğini ve sürdürülebilirliğini azaltır. Bunun yerine erken dönüşler, mantıksal operatörler veya fonksiyon çıkarmaları kullanın.

Kötü Örnek:

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}

Geliştirilmiş Örnek:

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}

Bu yaklaşım, kodu düzleştirir ve mantığı daha anlaşılabilir hale getirir.

Opsiyonel Zincirlemeyi Kullanın

İç içe geçmiş özellikleri kontrol ederken, gereksiz if koşullarından kaçınmak için opsiyonel zincirleme (?.) kullanın.

Opsiyonel Zincirleme Olmadan:

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

Opsiyonel Zincirleme Kullanılarak:

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

Bu, tekrarlayan kodu azaltır ve okunabilirliği artırır. Burada tekrarlayan kod, programlamada belirli görevleri yerine getirmek için sıkça gereken tekrarlı, standartlaştırılmış kod anlamına gelir.

Kesin Eşitlik Operatörlerini Kullanın

TypeScript, kesin tür sistemini destekler ve kesin eşitlik (===) veya kesin eşitsizlik (!==) kullanmak, beklenmeyen tür dönüştürmelerini önlemeye yardımcı olur.

Kötü Örnek:

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

Geliştirilmiş Örnek:

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

Belirgin Koşullar İçin Enums veya Literal Türleri Kullanın

Enumlar veya literal türler kullanmak koşulların netleşmesini sağlar ve hata olasılığını azaltır.

 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}

Beklenen değerleri tanımlayarak, TypeScript türleri algılayabilir ve doğruluğu sağlayabilir.

Benzer koşulları birleştirin

Birden çok koşul aynı mantığı paylaşıyorsa, onları mantıksal operatörler veya bir switch ifadesi kullanarak birleştirin.

Kötü Örnek:

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

Geliştirilmiş Örnek:

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

Alternatif olarak, birden fazla belirgin dalı yönetmek için bir switch ifadesi kullanın:

 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}

Koşullu ifadeleri karmaşık hale getirmekten kaçının

If ifadelerindeki karmaşık koşullu ifadeler okunabilirliği azaltır. Bunları anlamlı değişkenlere veya fonksiyonlara çıkarın.

Kötü Örnek:

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

Geliştirilmiş Örnek:

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

Koşullara isim vermek, açıklığı artırır ve kodu kendi kendini belgeleyen hale getirir.

Basit koşullar için üçlü operatörler kullanın

Basit koşullar için üçlü operatörler kullanmak kodu anlaşılır ve kısa hale getirir.

Örnek:

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

Ancak, üçlü operatörleri karmaşık koşullar için kullanmaktan kaçının, çünkü bu okunabilirliği azaltır.

Koşullu dalları diziler veya haritalarla değiştirin

Koşul yalnızca bir değer eşlemesi ise, diziler veya haritalar kullanmak, switch ifadeleri veya karmaşık if-else bloklarına kıyasla kodun okunabilirliğini ve sürdürülebilirliğini artırabilir. TypeScript'te, bunu daha güvenli bir şekilde uygulamak için tür bilgilerini kullanabilirsiniz.

Kötü Örnek:

 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}

Geliştirilmiş örnek: Bir dizi kullanma

 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}

Geliştirilmiş örnek: Bir Harita kullanma

 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}

Sonuç

Bu en iyi uygulamaları takip ederek, TypeScript'teki if ifadelerini net, verimli ve sürdürülebilir hale getirebilirsiniz. Tür koruyucuları, opsiyonel zincirleme ve enumlar gibi TypeScript özelliklerini kullanarak kod okunabilirliğini ve sağlamlığını artırabilirsiniz. En iyi uygulamaları takip ederek koşulları kısa ve net tutabilir, bunun sonucunda daha kolay anlaşılır ve sürdürülebilir bir kod elde edebilirsiniz.

Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.

YouTube Video