HTML Layout Kullanımı
Yazar: Jane Doe • Tarih: 15 Kasım 2023
Bu makale, HTML layout prensiplerini detaylıca inceler.
Giriş
Web sayfalarının düzeni, kullanıcı deneyimi için kritik öneme sahiptir.
                JavaScript'te düzenli ifadeler (Regular Expressions veya kısaca RegExp), metin içindeki desenleri eşleştirmek, aramak, değiştirmek ve doğrulamak için güçlü bir araçtır. Bu kılavuz, JavaScript ortamında RegExp'in nasıl tanımlandığını ve kullanıldığını, temel sözdiziminden başlayarak çeşitli metotlarla pratik uygulamalarına kadar adım adım açıklamaktadır.
JavaScript'te düzenli ifadeler iki ana şekilde oluşturulabilir: bir RegExp literal'i veya RegExp kurucusu kullanılarak.
Bir RegExp literal'i, deseni iki eğik çizgi (/) arasına alarak oluşturulur ve isteğe bağlı olarak sonuna bayraklar eklenir:
/desen/bayraklarBir RegExp kurucusu ise, deseni ve bayrakları string olarak alır:
new RegExp("desen", "bayraklar")Literal kullanımı genellikle daha basit ve performanttır, ancak desenin veya bayrakların çalışma zamanında dinamik olarak oluşturulması gerektiğinde kurucu yöntemi tercih edilir.
Yukarıdaki sözdiziminde yer alan desen ve bayraklar bileşenleri aşağıdaki gibi açıklanabilir:
Desen (Pattern): Eşleştirilmek istenen karakter dizilerini veya kalıpları tanımlar. Bu, sabit karakterler, özel karakterler (örneğin, . herhangi bir karakteri eşleştirmek için), niceleyiciler (örneğin, + bir veya daha fazla kez eşleştirmek için) ve karakter sınıfları (örneğin, [0-9] bir rakamı eşleştirmek için) içerebilir.
Bayraklar (Flags): Düzenli ifadenin eşleştirme davranışını değiştiren isteğe bağlı tek karakterlerdir. En yaygın kullanılan bayraklar şunlardır:
g (global): Desenin tüm eşleşmelerini bulur, ilk eşleşmeden sonra durmaz.
i (case-insensitive): Büyük/küçük harf duyarsız eşleştirme yapar.
m (multiline): Çok satırlı giriş dizilerinde ^ ve $ karakterlerinin her satırın başında ve sonunda eşleşmesini sağlar.
u (unicode): Deseni Unicode kod noktaları dizisi olarak ele alır.
s (dotAll): . (nokta) karakterinin satır sonu karakterleri dahil herhangi bir karakterle eşleşmesini sağlar.
d (hasIndices): Eşleşen alt dizelerin başlangıç ve bitiş indekslerini içeren bir dizi döndürür.
JavaScript'teki string metotları, düzenli ifadelerle birlikte kullanılarak metin üzerinde çeşitli işlemler yapılmasına olanak tanır. İşte bazı temel metotlar ve örnek kullanımları:
1. RegExp.prototype.test(): Bir string'de bir desenin bulunup bulunmadığını kontrol eder ve bir boolean değer döndürür.
const desen = /elma/;
const metin1 = "Bugün elma yedim.";
const metin2 = "Bugün armut yedim.";
console.log(desen.test(metin1)); // true
console.log(desen.test(metin2)); // false2. String.prototype.match(): Bir string'de deseni arar ve tüm eşleşmeleri içeren bir dizi döndürür. g bayrağı yoksa sadece ilk eşleşmeyi döndürür.
const desen = /elma/g;
const metin = "Yeşil elma, kırmızı elma ve sarı elma.";
const eslesmeler = metin.match(desen);
console.log(eslesmeler); // ["elma", "elma", "elma"]
const desenBuyukKucuk = /Elma/gi; // Büyük/küçük harf duyarsız ve global
const eslesmelerBuyukKucuk = metin.match(desenBuyukKucuk);
console.log(eslesmelerBuyukKucuk); // ["elma", "elma", "elma"]3. String.prototype.replace(): Bir string'deki desene uyan kısımları başka bir string ile değiştirir.
const desen = /elma/g;
const metin = "Yeşil elma, kırmızı elma.";
const yeniMetin = metin.replace(desen, "armut");
console.log(yeniMetin); // "Yeşil armut, kırmızı armut."
const desenRakamlar = /\d+/g; // Bir veya daha fazla rakamı eşleştir
const metinRakamlar = "Toplam 123 adet ürün, fiyat 45.67 TL.";
const yeniMetinRakamlar = metinRakamlar.replace(desenRakamlar, "XXX");
console.log(yeniMetinRakamlar); // "Toplam XXX adet ürün, fiyat XXX.XX TL."4. String.prototype.search(): Bir string'de deseni arar ve ilk eşleşmenin indeksini döndürür. Eşleşme bulunamazsa -1 döndürür. g bayrağı bu metot için anlamsızdır.
const desen = /kırmızı/;
const metin = "Yeşil elma, kırmızı elma.";
const indeks = metin.search(desen);
console.log(indeks); // 12 (k harfinin indeksi)
const desenYok = /mavi/;
const indeksYok = metin.search(desenYok);
console.log(indeksYok); // -15. String.prototype.split(): Bir string'i, belirtilen bir desen veya karakter dizisi kullanarak bir diziye böler.
const desen = /\s*,\s*/; // Virgül etrafındaki boşlukları da yakalar
const metin = "elma, armut , muz, kiraz";
const meyveler = metin.split(desen);
console.log(meyveler); // ["elma", "armut", "muz", "kiraz"]
const desenKarakter = /a/g; // Her 'a' karakterinden böl
const kelime = "banana";
const parcalar = kelime.split(desenKarakter);
console.log(parcalar); // ["b", "n", "n", ""] (son 'a'dan sonra boş string)Kaçış Karakterleri: Özel anlamı olan karakterleri (örneğin, ., *, +, ?, ^, $, (, ), [, ], {, }, |, \) desen içinde literal olarak kullanmak isterseniz, önüne ters eğik çizgi (\) ekleyerek kaçış yapmalısınız. Örneğin, bir noktayı (.) eşleştirmek için /\./ kullanın.
Dinamik Desenler: Deseni bir string'den oluşturuyorsanız (new RegExp("desen")), bu string içindeki kaçış karakterlerini (\) iki kez kaçış yapmanız gerekebilir (örneğin, new RegExp("\\d+")).
Performans: Çok karmaşık veya verimsiz düzenli ifadeler, özellikle büyük metinler üzerinde çalışırken performans sorunlarına neden olabilir. Deseninizi mümkün olduğunca spesifik ve basit tutmaya çalışın.
Stateful RegExp: g bayrağına sahip bir RegExp nesnesi, lastIndex özelliğini günceller. Aynı RegExp nesnesini birden fazla kez test() veya exec() ile çağırırsanız, eşleşmeler bir önceki çağrının bittiği yerden devam eder. Bu durum, beklenmedik sonuçlara yol açabilir, bu yüzden dikkatli olun veya her kullanımda yeni bir RegExp literal'i oluşturmayı düşünün.
Online Araçlar: Düzenli ifadeleri test etmek ve geliştirmek için Regex101 veya RegExr gibi çevrimiçi araçları kullanmak, karmaşık desenleri anlamanıza ve hata ayıklamanıza yardımcı olabilir.
                SQL (Yapısal Sorgu Dili), veri tabanlarından bilgi çekmek, güncellemek ve yönetmek için kullanılan güçlü bir dildir. Veri analizi süreçlerinde sıkça karşılaşılan ihtiyaçlardan biri, bir veri setindeki en küçük veya en büyük değeri belirlemektir. Bu gereksinimi karşılamak üzere SQL, MIN() ve MAX() adlı iki önemli toplama (aggregate) fonksiyonu sunar. Bu fonksiyonlar, belirli bir sütundaki sayısal, tarih veya hatta metinsel değerler arasında en düşük veya en yüksek olanı hızlıca bulmanızı sağlar.
MIN() ve MAX() fonksiyonlarının temel sözdizimi oldukça basittir. Her iki fonksiyon da parametre olarak bir sütun adı alır.
SELECT MIN(kolon_adi)
FROM tablo_adi
WHERE kosul;SELECT MAX(kolon_adi)
FROM tablo_adi
WHERE kosul;Yukarıdaki sözdiziminde yer alan her bir bileşenin anlamı aşağıda açıklanmıştır:
SELECT: Veri tabanından veri çekmek için kullanılan SQL komutudur. Bu komut ile hangi sütunların döndürüleceği belirtilir.
MIN(kolon_adi): Belirtilen kolon_adi sütunundaki en küçük (minimum) değeri döndüren toplama fonksiyondur. Sayısal değerler için en küçük sayıyı, tarih değerleri için en eski tarihi, metinsel değerler için ise alfabetik olarak en başta gelen değeri bulur.
MAX(kolon_adi): Belirtilen kolon_adi sütunundaki en büyük (maksimum) değeri döndüren toplama fonksiyondur. Sayısal değerler için en büyük sayıyı, tarih değerleri için en yeni tarihi, metinsel değerler için ise alfabetik olarak en sonda gelen değeri bulur.
FROM tablo_adi: Sorgunun hangi tablodan veri çekeceğini belirtir.
WHERE kosul (Opsiyonel): Sorgu sonuçlarını belirli bir kritere göre filtrelemek için kullanılır. Sadece bu koşulu sağlayan satırlar MIN() veya MAX() fonksiyonuna dahil edilir.
Aşağıdaki örneklerde, bir Urunler tablosu kullanıldığı varsayılmıştır. Bu tablo, UrunID, UrunAdi, Kategori, Fiyat ve StokAdedi sütunlarını içermektedir.
Örnek 1: Tüm Ürünlerin En Düşük Fiyatını Bulma
Bu sorgu, Urunler tablosundaki tüm ürünler arasında en düşük fiyatı döndürecektir.
SELECT MIN(Fiyat) AS EnDusukFiyat
FROM Urunler;Örnek 2: Tüm Ürünlerin En Yüksek Fiyatını Bulma
Bu sorgu, Urunler tablosundaki tüm ürünler arasında en yüksek fiyatı döndürecektir.
SELECT MAX(Fiyat) AS EnYuksekFiyat
FROM Urunler;Örnek 3: Belirli Bir Kategorideki En Düşük Fiyatı Bulma
WHERE koşulunu kullanarak sadece 'Elektronik' kategorisindeki ürünlerin en düşük fiyatını bulabiliriz.
SELECT MIN(Fiyat) AS ElektronikEnDusukFiyat
FROM Urunler
WHERE Kategori = 'Elektronik';Örnek 4: Her Kategori İçin En Yüksek Fiyatı Bulma
GROUP BY ifadesini kullanarak her bir kategori için ayrı ayrı en yüksek fiyatı bulabiliriz.
SELECT Kategori, MAX(Fiyat) AS KategoriEnYuksekFiyat
FROM Urunler
GROUP BY Kategori;Örnek 5: En Az Stoğa Sahip Ürünün Stok Adedini Bulma
StokAdedi sütunundaki en küçük değeri bularak, bir ürünün minimum stok adedini belirleyebiliriz.
SELECT MIN(StokAdedi) AS MinimumStok
FROM Urunler;NULL Değerler: MIN() ve MAX() fonksiyonları, işleme alırken NULL değerleri genellikle göz ardı eder. Yani, bir sütunda NULL değerler varsa, bu değerler hesaplamaya dahil edilmez.
Veri Tipleri: Bu fonksiyonlar sayısal değerlerin yanı sıra tarih ve metin (string) tipleri üzerinde de çalışır. Tarihler için en eski/en yeni, metinler için ise alfabetik sıralamaya göre en düşük/en yüksek değeri döndürür.
DISTINCT Anahtar Kelimesi: MIN(DISTINCT kolon_adi) veya MAX(DISTINCT kolon_adi) şeklinde kullanım mümkündür, ancak MIN() ve MAX() zaten tek bir değer döndürdüğü için DISTINCT anahtar kelimesinin bu bağlamda pratik bir faydası genellikle yoktur.
Performans: Çok büyük veri setlerinde, MIN() ve MAX() sorgularının performansı, ilgili sütun üzerinde indeks olup olmamasına bağlı olarak değişebilir. İndeksler, bu tür sorguların daha hızlı çalışmasını sağlayabilir.
GROUP BY ve HAVING: Eğer MIN() veya MAX() fonksiyonlarını GROUP BY ile birlikte kullanıyorsanız ve gruplandırılmış sonuçlar üzerinde bir filtreleme yapmak istiyorsanız, WHERE yerine HAVING koşulunu kullanmanız gerekir. Örneğin, HAVING MAX(Fiyat) > 1000.
                Python programlamada karar verme mekanizmaları, kodun belirli koşullara göre farklı yollar izlemesini sağlar. Bu, programlarınızın dinamik ve etkileşimli olmasının temelini oluşturur. Python'daki if, elif (else if'in kısaltması) ve else ifadeleri, bu koşullu mantığı uygulamanın anahtarıdır. Bu kılavuz, Python'da koşullu ifadelerin nasıl kullanılacağını, temel sözdiziminden başlayarak pratik uygulamalara ve önemli ipuçlarına kadar adım adım açıklamaktadır.
Python'da if...elif...else yapısının genel sözdizimi aşağıdaki gibidir:
if koşul1:
    # koşul1 doğruysa çalışacak kod bloğu
elif koşul2:
    # koşul1 yanlış VE koşul2 doğruysa çalışacak kod bloğu
else:
    # koşul1 ve koşul2 yanlışsa çalışacak kod bloğu
Her koşul ifadesi bir kolon (:) ile biter ve koşula bağlı kod bloğu girinti (indentation) ile tanımlanır. Python'da girintiler, kod bloklarını belirtmek için zorunludur.
if ifadesi: Koşullu bloğun başlangıcını işaret eder. Belirtilen koşul1 bir boolean (True veya False) olarak değerlendirilir. Eğer koşul True ise, if bloğunun içindeki kod çalıştırılır. Aksi takdirde, program bir sonraki elif veya else ifadesine geçer.
elif ifadesi (isteğe bağlı): Birden fazla koşulu kontrol etmek için kullanılır. Eğer önceki if koşulu yanlışsa, program bir sonraki elif koşulunu kontrol eder. koşul2 doğruysa, ilgili elif bloğu çalıştırılır. Bir if yapısında birden fazla elif ifadesi bulunabilir.
else ifadesi (isteğe bağlı): Tüm önceki if ve elif koşulları yanlış olduğunda çalıştırılacak kodu tanımlar. Bu ifade, hiçbir koşulun sağlanmadığı durumlar için bir 'varsayılan' yol sağlar ve yapının sonunda yer alır.
Unutulmamalıdır ki, bir if...elif...else zincirinde yalnızca bir kod bloğu çalıştırılır. İlk doğru koşul bulunduğunda, ilgili blok çalışır ve tüm yapıdan çıkılır.
Aşağıdaki örnekler, if...elif...else yapısının farklı senaryolarda nasıl kullanıldığını göstermektedir.
Örnek 1: Tek Bir if İfadesi
yaş = 18
if yaş >= 18:
    print("Oy kullanabilirsiniz.")
Bu örnekte, yaş değişkeninin değeri 18 veya daha büyükse mesaj yazdırılır.
Örnek 2: if...else Kullanımı
hava_durumu = "yağmurlu"
if hava_durumu == "güneşli":
    print("Dışarı çıkıp yürüyüş yapın.")
else:
    print("İçeride kalın ve kitap okuyun.")
Burada, hava_durumu değişkeni "güneşli" ise ilk blok, aksi halde else bloğu çalışır.
Örnek 3: if...elif...else Zinciri
puan = 85
if puan >= 90:
    print("Notunuz: A")
elif puan >= 80:
    print("Notunuz: B")
elif puan >= 70:
    print("Notunuz: C")
else:
    print("Notunuz: D veya F")
Bu örnekte, puan değişkenine göre farklı notlar atanır. Koşullar yukarıdan aşağıya doğru kontrol edilir ve ilk doğru koşulun bloğu çalıştırılır.
Örnek 4: İç İçe if İfadeleri
kullanici_adi = "admin"
sifre = "12345"
if kullanici_adi == "admin":
    if sifre == "12345":
        print("Yönetici panelinize hoş geldiniz.")
    else:
        print("Yanlış şifre.")
else:
    print("Kullanıcı adı bulunamadı.")
Koşullar karmaşıklaştığında, if ifadelerini iç içe kullanmak mümkündür. Ancak aşırı iç içe geçmiş yapılar kodun okunabilirliğini azaltabilir.
Girinti (Indentation): Python'da kod blokları girintilerle belirlenir. Genellikle 4 boşluk kullanılır. Yanlış girinti IndentationError hatasına yol açar.
Kolon (:): Her if, elif ve else ifadesinden sonra bir kolon (:) gelmelidir.
Koşul İfadeleri: Koşul ifadeleri genellikle karşılaştırma operatörleri (==, !=, <, >, <=, >=) ve mantıksal operatörler (and, or, not) kullanılarak oluşturulur.
Kısa Devre Değerlendirmesi: Mantıksal operatörler kullanılırken Python, koşulları soldan sağa değerlendirir ve sonucun zaten belirlenebildiği durumlarda değerlendirmeyi durdurur. Örneğin, False and (pahalı_işlem()) ifadesinde pahalı_işlem() fonksiyonu asla çağrılmaz.
Boş Bloklar: Bir koşul bloğunun içine henüz kod yazmak istemiyorsanız, pass anahtar kelimesini kullanarak boş bir blok oluşturabilirsiniz. Bu, bir IndentationError oluşmasını engeller.
                HTML tabloları, verileri satırlar ve sütunlar halinde düzenli bir şekilde sunmak için kullanılan temel yapısal elementlerdir. Bu elementler, istatistiksel verilerden ürün listelerine kadar çeşitli bilgi türlerini okunabilir ve erişilebilir bir formatta görüntülemek için kritik öneme sahiptir. Doğru kullanıldığında, HTML tabloları karmaşık veri setlerinin görselleştirilmesinde güçlü bir araç sunar.
Bir HTML tablosu,