Ders 25 / 25
Bölgesel Gereklilikler
Ad, adres ve kimlik alanlarındaki varsayımların sayılması, esnek alan kurulumunun bütün kayıtları alması, zorunlulukların ülke tablosundan okunması ve kimlik alanının metin olarak saklanması.
İçindekiler
Yön ve biçim kararları arayüzün kabını dile uyarladı. Geriye kabın içine giren veri kalıyor. Kütüphane üyeliği formu üç şey ister: ad, adres ve bir kimlik numarası. Bu üç alanın her biri bir varsayım taşır — adın iki parçadan oluştuğu, adresin bir posta koduyla tamamlandığı, kimliğin belli bir uzunlukta olduğu.
Varsayımlar çoğu kayıtta görünmez, çünkü çoğu kayıt onlara uyar. Uymayan kayıt ise formu dolduramaz: kullanıcı adını bir alana sığdıramaz, zorunlu posta kodu alanını boş bırakamaz ve kimlik numarası kabul edilmez. Bu ders varsayımları sayar ve kurala çevirir.
Varsayımın Ölçülmesi
Aşağıdaki hesap katı bir formu — iki adlı ad alanı, zorunlu posta kodu ve bölge, sabit uzunlukta kimlik — örnek kayıtlar üzerinde çalıştırır ve kaçının geçemediğini sayar.
// bolge.mjs — ad, adres ve kimlik alanlarindaki varsayimlarin kurala cevrilmesi // 1. Ad alani: kati form iki alan varsayar (ad + soyad, ikisi de zorunlu). const KATI_AD = { alanlar: ["ad", "soyad"], zorunlu: ["ad", "soyad"], enAz: 2 }; // Kayitlar: gercek dunyada karsilasilan ad yapilari (uydurma ornekler, yapi cesitliligi icin). const ADLAR = [ { kayit: "A1", parcalar: ["Elif", "Yılmaz"], not: "iki parca" }, { kayit: "A2", parcalar: ["Ravi"], not: "tek parcali ad" }, { kayit: "A3", parcalar: ["María", "del", "Carmen", "Ruiz", "García"], not: "iki soyadli, coklu ad" }, { kayit: "A4", parcalar: ["Nguyễn", "Thị", "Hoa"], not: "aile adi once" }, { kayit: "A5", parcalar: ["Björn", "Þórsson"], not: "soyadi baba adindan turer" }, { kayit: "A6", parcalar: ["Jean", "-", "Pierre", "Le", "Roux"], not: "tireli ad, cok sozcuklu soyad" }, ]; console.log("kayit parca kati forma sigar mi kayip"); let sigmayan = 0; for (const a of ADLAR) { const gercekParca = a.parcalar.filter((p) => p !== "-").length; const sigar = gercekParca === KATI_AD.enAz; if (!sigar) sigmayan++; const kayip = sigar ? "-" : gercekParca < 2 ? "zorunlu alan bos birakilamaz" : "fazla parcalar tek alana sikisir"; console.log(`${a.kayit.padEnd(6)} ${String(gercekParca).padStart(5)} ${(sigar ? "evet" : "HAYIR").padStart(18)} ${kayip}`); } console.log(`kati forma sigmayan: ${sigmayan} / ${ADLAR.length}`); // Esnek kural: tek serbest alan + istege bagli gorunen ad. console.log("\nesnek kural: 'tam ad' tek alan (zorunlu) + 'hitap adi' (istege bagli)"); for (const a of ADLAR) { const tam = a.parcalar.join(" ").replace(" - ", "-"); console.log(` ${a.kayit} tam ad: ${JSON.stringify(tam).padEnd(34)} (${a.not})`); } // 2. Adres alani: kati form posta kodu ve il/eyalet zorunlu varsayar. const ADRESLER = [ { kayit: "B1", satirlar: 2, postaKodu: "34710", bolge: "İstanbul", ulke: "TR" }, { kayit: "B2", satirlar: 3, postaKodu: null, bolge: "Dublin", ulke: "IE" }, { kayit: "B3", satirlar: 1, postaKodu: "1010", bolge: null, ulke: "AT" }, { kayit: "B4", satirlar: 4, postaKodu: "100-0001", bolge: "Tokyo", ulke: "JP" }, { kayit: "B5", satirlar: 2, postaKodu: "SW1A 1AA", bolge: null, ulke: "GB" }, ]; const KATI_ADRES = { postaKoduZorunlu: true, bolgeZorunlu: true, satirSiniri: 2 }; console.log("\nkayit satir posta kodu bolge kati formda dusen kural"); let adresDusen = 0; for (const b of ADRESLER) { const dusenler = []; if (KATI_ADRES.postaKoduZorunlu && !b.postaKodu) dusenler.push("posta kodu zorunlu"); if (KATI_ADRES.bolgeZorunlu && !b.bolge) dusenler.push("bolge zorunlu"); if (b.satirlar > KATI_ADRES.satirSiniri) dusenler.push(`satir sayisi ${b.satirlar} > ${KATI_ADRES.satirSiniri}`); if (dusenler.length) adresDusen++; console.log( `${b.kayit.padEnd(6)} ${String(b.satirlar).padStart(5)} ${String(b.postaKodu ?? "-").padEnd(11)} ${String(b.bolge ?? "-").padEnd(9)} ${dusenler.join("; ") || "-"}` ); } console.log(`kati adres formunda dusen kayit: ${adresDusen} / ${ADRESLER.length}`); // 3. Kimlik alani: uzunluk ve bicim varsayimi. const KIMLIKLER = [ { kayit: "C1", deger: "12345678901", tur: "11 hane" }, { kayit: "C2", deger: "AB-9931", tur: "harf + rakam" }, { kayit: "C3", deger: "0012", tur: "basta sifir" }, { kayit: "C4", deger: "9987654321234", tur: "13 hane" }, ]; const KATI_KIMLIK = { uzunluk: 11, yalnizRakam: true }; console.log("\nkayit deger kati kurala uyar mi neden"); for (const c of KIMLIKLER) { const uzunlukTamam = c.deger.length === KATI_KIMLIK.uzunluk; const rakamTamam = /^\d+$/.test(c.deger); const uyar = uzunlukTamam && rakamTamam; const neden = uyar ? "-" : [!uzunlukTamam && `uzunluk ${c.deger.length}`, !rakamTamam && "rakam disi karakter"].filter(Boolean).join(", "); console.log(`${c.kayit.padEnd(6)} ${c.deger.padEnd(15)} ${(uyar ? "evet" : "HAYIR").padStart(18)} ${neden}`); } console.log("kimlik alani sayi olarak saklanirsa bastaki sifirlar kaybolur; alan metindir."); // 4. Sonuc: iki form tasarimi karsilastirmasi. const kayitToplam = ADLAR.length + ADRESLER.length; const dusenToplam = sigmayan + adresDusen; console.log(`\nkati form: ${dusenToplam} / ${kayitToplam} kayit dogrudan girilemiyor (%${Math.round((100 * dusenToplam) / kayitToplam)})`); console.log("esnek form: tam ad tek alan, adres cok satirli serbest metin + ulke,"); console.log(" posta kodu ve bolge zorunlulugu ulkeye gore acilip kapaniyor."); // 5. Ulkeye gore alan kurali: tek bir tabloda toplanir. const ULKE_KURALI = { TR: { postaKodu: "zorunlu", bolge: "zorunlu", postaKoduBicimi: "5 hane" }, IE: { postaKodu: "istege bagli", bolge: "zorunlu", postaKoduBicimi: "serbest" }, AT: { postaKodu: "zorunlu", bolge: "istege bagli", postaKoduBicimi: "4 hane" }, JP: { postaKodu: "zorunlu", bolge: "zorunlu", postaKoduBicimi: "3-4 hane" }, GB: { postaKodu: "zorunlu", bolge: "istege bagli", postaKoduBicimi: "serbest" }, }; console.log("\nulke posta kodu bolge bicim"); for (const [u, k] of Object.entries(ULKE_KURALI)) { console.log(` ${u} ${k.postaKodu.padEnd(14)} ${k.bolge.padEnd(14)} ${k.postaKoduBicimi}`); } console.log("kural tablosu veridir; forma gomulmez, ulke secimiyle okunur.");
kayit parca kati forma sigar mi kayip
A1 2 evet -
A2 1 HAYIR zorunlu alan bos birakilamaz
A3 5 HAYIR fazla parcalar tek alana sikisir
A4 3 HAYIR fazla parcalar tek alana sikisir
A5 2 evet -
A6 4 HAYIR fazla parcalar tek alana sikisir
kati forma sigmayan: 4 / 6
esnek kural: 'tam ad' tek alan (zorunlu) + 'hitap adi' (istege bagli)
A1 tam ad: "Elif Yılmaz" (iki parca)
A2 tam ad: "Ravi" (tek parcali ad)
A3 tam ad: "María del Carmen Ruiz García" (iki soyadli, coklu ad)
A4 tam ad: "Nguyễn Thị Hoa" (aile adi once)
A5 tam ad: "Björn Þórsson" (soyadi baba adindan turer)
A6 tam ad: "Jean-Pierre Le Roux" (tireli ad, cok sozcuklu soyad)
kayit satir posta kodu bolge kati formda dusen kural
B1 2 34710 İstanbul -
B2 3 - Dublin posta kodu zorunlu; satir sayisi 3 > 2
B3 1 1010 - bolge zorunlu
B4 4 100-0001 Tokyo satir sayisi 4 > 2
B5 2 SW1A 1AA - bolge zorunlu
kati adres formunda dusen kayit: 4 / 5
kayit deger kati kurala uyar mi neden
C1 12345678901 evet -
C2 AB-9931 HAYIR uzunluk 7, rakam disi karakter
C3 0012 HAYIR uzunluk 4
C4 9987654321234 HAYIR uzunluk 13
kimlik alani sayi olarak saklanirsa bastaki sifirlar kaybolur; alan metindir.
kati form: 8 / 11 kayit dogrudan girilemiyor (%73)
esnek form: tam ad tek alan, adres cok satirli serbest metin + ulke,
posta kodu ve bolge zorunlulugu ulkeye gore acilip kapaniyor.
ulke posta kodu bolge bicim
TR zorunlu zorunlu 5 hane
IE istege bagli zorunlu serbest
AT zorunlu istege bagli 4 hane
JP zorunlu zorunlu 3-4 hane
GB zorunlu istege bagli serbest
kural tablosu veridir; forma gomulmez, ulke secimiyle okunur.
Ad İki Parça Değildir
Çıktının ilk bölümü altı ad kaydının dördünün katı forma sığmadığını gösteriyor. Kayıp iki biçimde oluşuyor: tek parçalı bir ad zorunlu ikinci alanı dolduramıyor, çok parçalı bir ad ise fazla parçalarını tek alana sıkıştırıyor. Sıkıştırma kayıp gibi görünmez ama veriyi bozar: hangi parçanın aile adı olduğu bilgisi kaybolur.
İkinci bölüm esnek kuralı gösteriyor: tek bir zorunlu tam ad alanı, isteğe bağlı bir hitap adı. Bu kurulum altı kaydın altısını da olduğu gibi alır. Hitap adı ayrı sorulur, çünkü arayüzün “Merhaba X” derken kullanacağı ad tam addan türetilemez — türetme her zaman bir sıra varsayımı gerektirir.
Ad alanının ikinci kuralı sıralamadır: liste görünümünde adların hangi parçaya göre sıralanacağı bir arayüz kararıdır ve veriye gömülemez. Sıralama, dile duyarlı karşılaştırma ile yapılır — Tablolar dersindeki kuralın aynısı.
Adresin Zorunlu Alanları Ülkeye Bağlıdır
Üçüncü bölüm beş adres kaydının dördünün katı formdan düştüğünü gösteriyor. Düşme nedenleri ayrı ayrı: bazı yerlerde posta kodu yoktur, bazı yerlerde bölge/eyalet alanı kullanılmaz, bazı adresler iki satıra sığmaz.
Son bölümdeki tablo çözümü veriyor: zorunluluk kuralı forma gömülmez, ülkeye göre okunan bir tablodan gelir. Kullanıcı ülkeyi seçtiğinde hangi alanların zorunlu olduğu, posta kodunun hangi biçimi alacağı ve alan etiketlerinin ne olacağı o tablodan belirlenir. Tablo veridir; yeni bir ülke eklendiğinde kod değişmez, satır eklenir.
Adres alanının üçüncü kuralı satır sayısıdır: çok satırlı serbest metin alanı, yapılandırılmış alanlardan daha az bilgi kaybeder. Yapılandırma yalnız gerçekten gerekli olduğunda — kargo hesabı, vergi kaydı — istenir ve o zaman da ülkeye göre değişir.
Kimlik Alanı Metindir
Dördüncü bölüm kimlik numarasının üç ayrı biçimde katı kuraldan düştüğünü gösteriyor: farklı uzunluk, rakam dışı karakter ve baştaki sıfır. Sonuncusu en sinsi olanıdır: alan sayı olarak saklandığında baştaki sıfırlar kaybolur ve değer sessizce bozulur.
Kural şudur: kimlik alanı bir sayı değil, bir metindir. Üzerinde aritmetik yapılmaz, biçimi ülkeye göre değişir ve doğrulaması bir kalıp denetimidir. Doğrulama kalıbı da adres kuralları gibi ülke tablosundan okunur; forma gömülen tek bir düzenli ifade, ilk yabancı kayıtta kırılır.
Ölçünün Anlamı
Beşinci bölüm toplamı veriyor: on bir kaydın sekizi katı formu geçemiyor. Bu sayı örnek kümesine bağlıdır ve bir istatistik değildir; işlevi, varsayımların her birinin bir kayıt sınıfını dışarıda bıraktığını göstermektir.
Esnek form aynı kayıtların hepsini alır ve karşılığında iki şey ister: alanların serbest bırakılması ve zorunlulukların veriden okunması. Maliyeti de vardır — serbest metin alanları üzerinde otomatik çözümleme yapmak zorlaşır. Karar, hangi kaybın kabul edilebilir olduğuna göre verilir: bir kütüphane üyeliğinde kullanıcıyı dışarıda bırakmak, adres verisini yapılandıramamaktan daha ağır bir kayıptır.
Ölçülebilir Kısıtlar
- Ad alanı tek zorunlu serbest alandır; parçalara ayırma yalnız gerçekten gerekliyse ve isteğe bağlı olarak yapılır.
- Adres zorunlulukları ülke tablosundan okunur; tablo koda gömülmez.
- Kimlik ve posta kodu alanları metin olarak saklanır; baştaki sıfır korunur.
- Alan etiketleri ve doğrulama iletileri de ülkeye göre değişir; hata iletisi kuralı Hata Mesajı Yazımı dersindeki yapıyı izler.
- Zorunlu alan işareti ve hata bildirimi Erişilebilir Hata Sunumu dersindeki gibi alanla ilişkilendirilir.
Sık Yapılan Hata
En sık hata, ad alanını iki zorunlu parçaya bölmektir. İkincisi, posta kodunu her ülke için zorunlu tutmaktır. Üçüncüsü, kimlik ve posta kodu alanlarını sayı olarak saklamaktır. Dördüncüsü, bu kuralları ülke tablosu yerine koşullu kodla yazmaktır: her yeni ülke bir kod değişikliği gerektirir ve kural kümesi zamanla okunamaz hâle gelir.
Özet
- Ad, adres ve kimlik alanlarının her biri bir varsayım taşır; modeldeki on bir kaydın sekizi katı formu geçemiyor.
- Tek zorunlu tam ad alanı bütün ad yapılarını alır; hitap adı ayrı ve isteğe bağlı sorulur, çünkü tam addan türetilemez.
- Adres zorunlulukları ve posta kodu biçimi ülkeye göre okunan bir tablodan gelir; tablo veridir, forma gömülmez.
- Kimlik ve posta kodu metindir: sayı olarak saklandığında baştaki sıfır kaybolur.
- Esnek formun bedeli otomatik çözümlemenin zorlaşmasıdır; karar hangi kaybın kabul edilebilir olduğuna göre verilir.
Kurs Kapanışı
Bu kurs, bileşenleri görünüşleriyle değil belirtimleriyle ele aldı. Temel Bileşenler konusu düğmeyi, girdiyi, seçim denetimini ve açılır listeyi yerel öge önce kuralıyla kurdu; her birinin rolünü, adını, durumunu ve klavye sözleşmesini yazdı. Kapsayıcı ve Gezinme Bileşenleri konusu kartı, sekmeyi, akordeonu, menüyü, konum bildirimini, tabloyu ve otomatik geçişli şeridi aynı disiplinle belirtti ve her birinde odak ile sekme sırasının maliyetini saydı. Katman ve Geri Bildirim Bileşenleri konusu akışın üstüne çıkan bileşenleri — kip pencere, araç ipucu, bildirim, yükleme göstergesi, iskelet, boş ve hata durumu, rozet — odak devri ve duyuru politikasıyla ele aldı. Metin ve Yerelleştirme konusu ise arayüz metnini bileşenin parçası hâline getirdi: rehber kuralları, hata iletisinin yapısı, biçimlemenin yerel ayardan türetilmesi, yön duyarlı düzen ve bu dersteki alan varsayımları.
Kurs boyunca sabit kalan üç ölçüt vardı. Yerel öge varken ARIA yazılmaz. Her durum bir kanalda değil en az iki kanalda bildirilir. Ve her karar ölçülebilir bir kısıta bağlanır — hedef boyutu, kontrast oranı, süre sınırı ya da sekme durağı sayısı.
M15 müfredatı burada tamamlanıyor. Arayüz Temelleri görsel kararları algısal ilkelere ve ölçülebilir eşiklere bağladı. Kullanıcı Deneyimi ve Davranış Tasarımı bu kararların kullanıcıdan nasıl türetileceğini ve etik sınırının nerede olduğunu kurdu. Tasarım Sistemleri kararları belirteçlere, kataloğa ve yönetişime çevirerek ölçeklenebilir hâle getirdi. Erişilebilir Bileşen Kalıpları ise sistemin her parçasının klavye, odak ve ekran okuyucu davranışını belirtim düzeyinde yazdı.
Bu müfredat, M14 Frontend müfredatındaki uygulama katmanıyla birlikte okunmak üzere kuruldu: orada bileşenin nasıl çalıştığı, burada nasıl olması gerektiği anlatıldı. İki müfredatın kesiştiği yer, bir arayüzün hem doğru çalışması hem de doğru davranmasıdır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.