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, web uygulamalarının dinamik etkileşimini sağlayan güçlü bir dil olmakla birlikte, karmaşık matematiksel hesaplamalar için de sağlam bir temel sunar. Bu bağlamda, JavaScript'in yerleşik Math nesnesi, standart matematiksel işlevleri ve sabitleri programcıların kullanımına sunarak, sayısal işlemlerin kolay ve verimli bir şekilde gerçekleştirilmesini sağlar. Bir sınıf olmamasına rağmen, Math nesnesi tüm özelliklerini ve metotlarını statik olarak sunar; bu da onun doğrudan erişilebilir olduğu ve örneklendirilmesinin gerekmediği anlamına gelir. Bu makalede, Math nesnesinin temel kullanımından gelişmiş uygulamalarına kadar uzanan çeşitli yönlerini inceleyeceğiz.
JavaScript'teki Math nesnesi, doğrudan erişilebilen statik metotlar ve özellikler içerir. Bu, Math nesnesini oluşturmanıza gerek olmadığı anlamına gelir; tüm metotlarına ve özelliklerine doğrudan Math. önekiyle erişilebilir.
Genel kullanım yapısı aşağıdaki gibidir:
Math.propertyName;
Math.methodName(arg1, arg2, ...);
Math nesnesi bir yapıcıya (constructor) sahip değildir ve tüm metotları ile özellikleri statiktir. Bu, new Math() şeklinde bir kullanımın geçersiz olduğu ve hata döndüreceği anlamına gelir. Bunun yerine, Math.PI gibi bir sabite veya Math.random() gibi bir metoda doğrudan erişilir.
Aşağıda, Math nesnesinin sıkça kullanılan bazı metotları ve özellikleri detaylı olarak açıklanmıştır:
Math.PI: Bir dairenin çevresinin çapına oranı olan pi (π) sayısının değerini döndürür.
Math.abs(x): Bir sayının mutlak değerini döndürür.
Math.round(x): Bir sayıyı en yakın tam sayıya yuvarlar. .5 durumunda yukarı yuvarlar.
Math.floor(x): Bir sayıyı her zaman aşağıya, en yakın tam sayıya yuvarlar.
Math.ceil(x): Bir sayıyı her zaman yukarıya, en yakın tam sayıya yuvarlar.
Math.random(): 0 (dahil) ile 1 (hariç) arasında rastgele bir ondalık sayı döndürür.
Math.max(x1, x2, ..., xn): Verilen sayılar arasındaki en büyük değeri döndürür.
Math.min(x1, x2, ..., xn): Verilen sayılar arasındaki en küçük değeri döndürür.
Math.pow(x, y): x sayısının y kuvvetini döndürür (xy).
Math.sqrt(x): Bir sayının karekökünü döndürür.
Math.sin(x), Math.cos(x), Math.tan(x): Trigonometrik sinüs, kosinüs ve tanjant değerlerini radyan cinsinden verilen bir açı için döndürür.
Aşağıdaki örnekler, Math nesnesinin farklı metotlarının pratik uygulamalarını göstermektedir.
Örnek 1: Temel Yuvarlama İşlemleri ve Pi Sabiti Kullanımı
// Pi (π) değerini alma
const piValue = Math.PI;
console.log("Pi değeri:", piValue); // Çıktı: Pi değeri: 3.141592653589793
// Sayı yuvarlama örnekleri
let num1 = 4.7;
let num2 = 4.3;
let num3 = 4.5;
let num4 = -4.7;
console.log("Math.round(4.7):", Math.round(num1));   // Çıktı: 5
console.log("Math.round(4.3):", Math.round(num2));   // Çıktı: 4
console.log("Math.round(4.5):", Math.round(num3));   // Çıktı: 5
console.log("Math.floor(4.7):", Math.floor(num1));   // Çıktı: 4
console.log("Math.ceil(4.3):", Math.ceil(num2));     // Çıktı: 5
console.log("Math.abs(-4.7):", Math.abs(num4));     // Çıktı: 4.7Örnek 2: Rastgele Sayı Üretimi
Math.random() metodu 0 (dahil) ile 1 (hariç) arasında bir sayı üretir. Belirli bir aralıkta rastgele tam sayı üretmek için bu metot Math.floor() ile birlikte kullanılabilir.
// 0 ile 1 arasında rastgele ondalık sayı
const randomDecimal = Math.random();
console.log("Rastgele ondalık:", randomDecimal); // Örn: 0.123456789
// 1 ile 10 arasında rastgele tam sayı (1 ve 10 dahil)
function getRandomInt(min, max) {
  min = Math.ceil(min);
  max = Math.floor(max);
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
const randomNum = getRandomInt(1, 10);
console.log("1-10 arası rastgele tam sayı:", randomNum); // Örn: 7Örnek 3: Üs Alma ve Karekök Hesaplama
// Üs alma (2^3 = 8)
const powerResult = Math.pow(2, 3);
console.log("2 üzeri 3:", powerResult); // Çıktı: 8
// Karekök alma (karekök 81 = 9)
const sqrtResult = Math.sqrt(81);
console.log("81'in karekökü:", sqrtResult); // Çıktı: 9Örnek 4: En Büyük ve En Küçük Değeri Bulma
const numbers = [10, 5, 20, 8, 15];
// Array'deki en büyük ve en küçük değeri bulmak için spread operatörü (...) kullanılır.
const maxVal = Math.max(...numbers);
const minVal = Math.min(...numbers);
console.log("En büyük değer:", maxVal); // Çıktı: 20
console.log("En küçük değer:", minVal); // Çıktı: 5
// Doğrudan sayılarla da kullanılabilir
console.log("max(1, 5, 2, 9):", Math.max(1, 5, 2, 9)); // Çıktı: 9Statik Nesne: Math bir nesne olmasına rağmen, bir yapıcıya sahip değildir ve doğrudan new Math() ile örneklendirilemez. Tüm metotları ve özellikleri statiktir ve doğrudan Math.metotAdı() veya Math.özellikAdı şeklinde çağrılır.
Radyan Kullanımı: Trigonometrik fonksiyonlar (Math.sin(), Math.cos(), Math.tan()) açıları derece yerine radyan cinsinden bekler. Dereceyi radyana çevirmek için derece * (Math.PI / 180) formülünü kullanabilirsiniz.
Math.random() Aralığı: Math.random() her zaman 0 (dahil) ile 1 (hariç) arasında bir değer döndürür. Belirli bir aralıkta (min, max) tam sayı elde etmek için genellikle Math.floor(Math.random() * (max - min + 1)) + min formülü kullanılır.
Floating-Point Hassasiyeti: JavaScript, diğer programlama dillerinde olduğu gibi, kayan noktalı sayılarla (floating-point numbers) çalışırken hassasiyet sorunları yaşayabilir. Bu durum, özellikle ondalık sayılarla yapılan karmaşık hesaplamalarda beklenmedik sonuçlara yol açabilir. Örneğin, 0.1 + 0.2 doğrudan 0.3 yerine 0.30000000000000004 sonucunu verebilir.
Type Coercion: Math metotları, kendisine geçirilen argümanları otomatik olarak sayısal tiplere dönüştürmeye çalışır. Geçersiz bir değer (örneğin, bir string) geçirildiğinde NaN (Not-a-Number) döndürebilir.
                SQL (Structured Query Language), veritabanlarındaki büyük veri kümelerini yönetmek ve analiz etmek için temel bir araçtır. Bu analizin kritik bir parçası, veri gruplarını özetlemeye ve tek bir anlamlı değer döndürmeye yarayan Aggregate Functions (Toplama Fonksiyonları) olarak bilinen özel işlevlerdir. Bu fonksiyonlar, bir sütundaki tüm değerlerin toplamını, ortalamasını, en büyük veya en küçük değerini veya toplam satır sayısını hesaplamak gibi işlemleri gerçekleştirmek için kullanılır. Bu makale, SQL Aggregate Functions'ın temel prensiplerini, sözdizimini, pratik kullanım örneklerini ve önemli notları kapsamlı bir şekilde açıklamaktadır.
SQL Aggregate Functions, genellikle SELECT ifadesi içinde, isteğe bağlı olarak GROUP BY, WHERE ve HAVING yan tümceleriyle birlikte kullanılır. Genel sözdizimi aşağıdaki gibidir:
SELECT
    kolon_adı_1,
    AGGREGATE_FUNCTION(kolon_adı_2) AS takma_ad
FROM
    tablo_adı
WHERE
    koşul_filtreleme_satırlar
GROUP BY
    kolon_adı_1
HAVING
    koşul_filtreleme_gruplar
ORDER BY
    kolon_adı_1;Yukarıdaki sözdizimindeki her bir bileşen, agrega fonksiyonlarının nasıl çalıştığını anlamak için hayati öneme sahiptir:
SELECT: Sorgunuzdan döndürülecek sütunları belirtir. Agrega fonksiyonları bu bölümde kullanılır ve genellikle bir AS anahtar kelimesi ile bir takma ad (alias) atanır.
AGGREGATE_FUNCTION(kolon_adı_2): Veriler üzerinde işlem yapacak olan toplama fonksiyonudur. En yaygın kullanılanlar şunlardır:
COUNT(): Belirli bir sütundaki veya tüm satırlardaki eleman sayısını döndürür. COUNT(*) tüm satırları sayar, COUNT(kolon_adı) NULL olmayan değerleri sayar, COUNT(DISTINCT kolon_adı) ise benzersiz NULL olmayan değerleri sayar.
SUM(): Belirli bir sayısal sütundaki tüm değerlerin toplamını hesaplar.
AVG(): Belirli bir sayısal sütundaki tüm değerlerin ortalamasını hesaplar.
MIN(): Belirli bir sütundaki en küçük değeri döndürür.
MAX(): Belirli bir sütundaki en büyük değeri döndürür.
FROM tablo_adı: Verilerin çekileceği tablonun adını belirtir.
WHERE koşul_filtreleme_satırlar: Agrega işlemi yapılmadan önce satırları filtrelemek için kullanılır. Bu yan tümce, gruplama yapılmadan önceki bireysel satırlara uygulanır.
GROUP BY kolon_adı_1: Satırları bir veya daha fazla sütuna göre gruplar. Agrega fonksiyonu daha sonra her grup için ayrı ayrı uygulanır ve her gruptan tek bir özet satırı döndürülür. SELECT listesinde agrega fonksiyonu dışında kalan her sütunun GROUP BY listesinde de yer alması gerekir.
HAVING koşul_filtreleme_gruplar: GROUP BY ile oluşturulan grupları filtrelemek için kullanılır. WHERE yan tümcesinin aksine, HAVING ifadesi agrega fonksiyonlarının sonuçlarına dayalı filtreleme yapabilir.
ORDER BY kolon_adı_1: Sonuç kümesini belirli bir sütuna veya agrega sonucuna göre sıralar.
Aşağıdaki örnekler için, bir şirketin satış verilerini içeren Satislar adlı bir tablo ve çalışan bilgilerini içeren Calisanlar adlı bir tablo kullanıldığını varsayalım.
Satislar Tablo Yapısı:
CREATE TABLE Satislar (
    SatisID INT PRIMARY KEY,
    UrunID INT,
    MusteriID INT,
    SatisTarihi DATE,
    Miktar DECIMAL(10, 2),
    Adet INT
);
INSERT INTO Satislar (SatisID, UrunID, MusteriID, SatisTarihi, Miktar, Adet) VALUES
(1, 101, 1, '2023-01-15', 150.75, 2),
(2, 102, 2, '2023-01-15', 200.00, 1),
(3, 101, 1, '2023-01-16', 75.50, 1),
(4, 103, 3, '2023-01-16', 300.25, 3),
(5, 102, 1, '2023-01-17', 120.00, 1),
(6, 101, 4, '2023-01-17', 50.00, 1),
(7, 104, 2, '2023-01-18', 450.00, 2),
(8, 101, NULL, '2023-01-18', 100.00, 1);
Calisanlar Tablo Yapısı:
CREATE TABLE Calisanlar (
    CalisanID INT PRIMARY KEY,
    Ad VARCHAR(50),
    Soyad VARCHAR(50),
    Departman VARCHAR(50),
    Maas DECIMAL(10, 2)
);
INSERT INTO Calisanlar (CalisanID, Ad, Soyad, Departman, Maas) VALUES
(1, 'Ayşe', 'Yılmaz', 'IT', 60000.00),
(2, 'Can', 'Demir', 'Satış', 55000.00),
(3, 'Elif', 'Kaya', 'IT', 62000.00),
(4, 'Mert', 'Arslan', 'Pazarlama', 58000.00),
(5, 'Zeynep', 'Şahin', 'Satış', 59000.00),
(6, 'Deniz', 'Çelik', 'Pazarlama', 57000.00);
COUNT(*))Bu sorgu, Satislar tablosundaki toplam satış kaydını döndürür.
SELECT
    COUNT(*) AS ToplamSatisSayisi
FROM
    Satislar;COUNT(kolon_adı))MusteriID değeri olan (yani NULL olmayan) satışların sayısını bulur.
SELECT
    COUNT(MusteriID) AS MusteriliSatisSayisi
FROM
    Satislar;COUNT(DISTINCT kolon_adı))Kaç farklı müşterinin satış yaptığını gösterir.
SELECT
    COUNT(DISTINCT MusteriID) AS BenzersizMusteriSayisi
FROM
    Satislar;SUM())Tüm satışların toplam miktarını döndürür.
SELECT
    SUM(Miktar) AS ToplamSatisMiktari
FROM
    Satislar;AVG())Tüm satışların ortalama miktarını döndürür.
SELECT
    AVG(Miktar) AS OrtalamaSatisMiktari
FROM
    Satislar;MAX(), MIN())En yüksek ve en düşük satış miktarını aynı sorguda bulur.
SELECT
    MAX(Miktar) AS EnYuksekSatisMiktari,
    MIN(Miktar) AS EnDusukSatisMiktari
FROM
    Satislar;GROUP BY)Bu sorgu, her bir UrunID için toplam satış miktarını ve satılan toplam adedi hesaplar.
SELECT
    UrunID,
    SUM(Miktar) AS ToplamMiktar,
    SUM(Adet) AS ToplamAdet
FROM
    Satislar
GROUP BY
    UrunID
ORDER BY
    UrunID;HAVING)Sadece toplam satış miktarı 200'den büyük olan ürünleri listeler.
SELECT
    UrunID,
    SUM(Miktar) AS ToplamMiktar
FROM
    Satislar
GROUP BY
    UrunID
HAVING
    SUM(Miktar) > 200
ORDER BY
    ToplamMiktar DESC;GROUP BY ve Farklı Fonksiyonlar)Her departmandaki ortalama maaşı ve çalışan sayısını gösterir.
SELECT
    Departman,
    AVG(Maas) AS OrtalamaMaas,
    COUNT(CalisanID) AS CalisanSayisi
FROM
    Calisanlar
GROUP BY
    Departman
HAVING
    COUNT(CalisanID) > 1 -- Birden fazla çalışanı olan departmanlar
ORDER BY
    OrtalamaMaas DESC;NULL Değerler: SUM(), AVG(), MIN(), MAX() gibi çoğu agrega fonksiyonu, hesaplamalarında NULL değerleri göz ardı eder. COUNT(kolon_adı) da yalnızca NULL olmayan değerleri sayarken, COUNT(*) NULL değerleri içeren satırları da sayar.
WHERE vs. HAVING: WHERE yan tümcesi, gruplama yapılmadan önce bireysel satırları filtreler. HAVING yan tümcesi ise, GROUP BY işlemi uygulandıktan sonra oluşan grupları filtrelemek için kullanılır ve agrega fonksiyonlarının sonuçlarını kullanabilir.
GROUP BY Kısıtlamaları: SELECT ifadesinde agrega fonksiyonu kullanmıyorsanız ve GROUP BY kullanıyorsanız, SELECT listesindeki tüm sütunların GROUP BY listesinde de yer alması gerekir (veya agrega fonksiyonları içinde olmaları gerekir). Aksi takdirde, SQL veritabanı hangi değerin her grup için döndürüleceğini bilemez ve bir hata verir.
DISTINCT Anahtar Kelimesi: COUNT(DISTINCT kolon_adı), SUM(DISTINCT kolon_adı), AVG(DISTINCT kolon_adı) gibi kullanımlar, yalnızca belirtilen sütundaki benzersiz değerler üzerinde işlem yapar. Örneğin, SUM(DISTINCT Miktar), aynı miktara sahip birden fazla satış olsa bile her miktarı yalnızca bir kez toplar.
Performans: Büyük veri kümelerinde agrega fonksiyonlarının kullanımı, özellikle GROUP BY ve ORDER BY ile birleştiğinde performans üzerinde etkili olabilir. Uygun indeksleme, sorgu performansını artırmada önemli rol oynar.
                PHP 8.0 ile birlikte dile eklenen öznitelikler (attributes), kodunuza yapısal meta veriler eklemenin modern ve deklaratif bir yolunu sunar. Bu özellik, daha önce genellikle DocBlock yorumları aracılığıyla sağlanan bilgilerin, doğrudan dilin kendisi tarafından tanınabilen ve yansıma (reflection) API'si aracılığıyla erişilebilen bir formatta tanımlanmasına olanak tanır. Öznitelikler, sınıflara, yöntemlere, özelliklere, fonksiyonlara ve hatta parametrelere atanabilir, bu da framework'ler, ORM'ler, validasyon sistemleri ve diğer kod analiz araçları için güçlü ve tip güvenli bir mekanizma sağlar.
PHP'de bir öznitelik, köşeli parantezler (#[ ve ]) içine alınmış bir isim ve isteğe bağlı olarak parametreler ile tanımlanır. Bu isim, aslında bir PHP sınıfının adıdır ve bu sınıfın bir örneği, özniteliğin uygulandığı elemanla ilişkilendirilir.
Bir özniteliğin kendisi, #[Attribute] özniteliği ile işaretlenmiş basit bir PHP sınıfıdır. Bu işaretleme, PHP motoruna ilgili sınıfın bir öznitelik olarak kullanılabileceğini bildirir.
Öznitelik Sınıfı Tanımlama: Bir öznitelik oluşturmak için, #[Attribute] özniteliğini kullanarak bir sınıf tanımlamanız gerekir. Bu sınıf, özniteliğin davranışını veya içerdiği verileri belirler.
message = $message;
    }
}
Hedef Kısıtlamaları: #[Attribute] özniteliğine parametreler geçirilerek, özniteliğin hangi türdeki elemanlara (sınıf, yöntem, özellik vb.) uygulanabileceği kısıtlanabilir. Bu, Attribute::TARGET_CLASS, Attribute::TARGET_METHOD, Attribute::TARGET_PROPERTY, Attribute::TARGET_FUNCTION, Attribute::TARGET_PARAMETER ve Attribute::TARGET_ALL gibi sabitlerle yapılır.
Tekrarlanabilir Öznitelikler: Varsayılan olarak, bir elemana aynı öznitelikten yalnızca bir tane uygulanabilir. Ancak, Attribute::IS_REPEATABLE sabiti kullanılarak bir özniteliğin birden çok kez uygulanmasına izin verilebilir.
name = $name;
    }
}
Parametreler: Öznitelik sınıfları, constructor'ları aracılığıyla parametre alabilirler. Bu parametreler, özniteliği uygularken doğrudan parantez içinde belirtilir ve özniteliğin davranışını özelleştirmek için kullanılır.
Aşağıdaki örnekler, PHP özniteliklerinin nasıl tanımlandığını ve yansıma API'si (Reflection API) kullanılarak nasıl okunduğunu göstermektedir.
Örnek 1: Basit Bir Yönlendirme (Routing) Özniteliği
Bu örnek, bir web uygulamasında yöntemleri belirli URL yollarına bağlamak için kullanılabilecek basit bir #[Route] özniteliği tanımlar ve ardından bu özniteliği yansıma ile okur.
path = $path;
        $this->methods = $methods;
    }
}
class ApiController
{
    #[Route("/api/users", "GET")]
    public function getUsers(): array
    {
        return ['John Doe', 'Jane Smith'];
    }
    #[Route("/api/users/{id}", "GET")]
    public function getUser(int $id): string
    {
        return "User ID: {$id}";
    }
}
// Öznitelikleri yansıma ile okuma
$reflector = new ReflectionClass(ApiController::class);
foreach ($reflector->getMethods() as $method) {
    echo "Metot: " . $method->getName() . "
";
    foreach ($method->getAttributes(Route::class) as $attribute) {
        $route = $attribute->newInstance(); // Öznitelik sınıfının bir örneğini oluşturur
        echo "  Yol: " . $route->path . ", Metotlar: " . implode(", ", $route->methods) . "
";
    }
}
/* Çıktı:
Metot: getUsers
  Yol: /api/users, Metotlar: GET
Metot: getUser
  Yol: /api/users/{id}, Metotlar: GET
*/
Örnek 2: Validasyon (Doğrulama) Özniteliği ve Hedef Kısıtlaması
Bu örnek, bir özelliğin minimum ve maksimum değerler arasında olmasını gerektiren bir #[Range] özniteliği tanımlar ve bu özniteliği yalnızca özelliklere uygulanacak şekilde kısıtlar.
min = $min;
        $this->max = $max;
    }
}
class Product
{
    #[Range(min: 0, max: 100)]
    public int $stock;
    #[Range(min: 1, max: 999)]
    public float $price;
    public function __construct(int $stock, float $price)
    {
        $this->stock = $stock;
        $this->price = $price;
    }
}
// Öznitelikleri yansıma ile okuma
$reflector = new ReflectionClass(Product::class);
foreach ($reflector->getProperties() as $property) {
    echo "Özellik: " . $property->getName() . "
";
    foreach ($property->getAttributes(Range::class) as $attribute) {
        $range = $attribute->newInstance();
        echo "  Min: " . $range->min . ", Max: " . $range->max . "
";
    }
}
/* Çıktı:
Özellik: stock
  Min: 0, Max: 100
Özellik: price
  Min: 1, Max: 999
*/
Örnek 3: Tekrarlanabilir Öznitelikler
Bu örnek, bir sınıfın birden fazla etiketle işaretlenmesine olanak tanıyan tekrarlanabilir bir #[Tag] özniteliği tanımlar.
name = $name;
    }
}
#[Tag("Veritabanı")]
#[Tag("ORM")]
#[Tag("PHP 8")]
class UserRepository
{
    // ...
}
// Öznitelikleri yansıma ile okuma
$reflector = new ReflectionClass(UserRepository::class);
echo "Sınıf: " . $reflector->getName() . "
";
foreach ($reflector->getAttributes(Tag::class) as $attribute) {
    $tag = $attribute->newInstance();
    echo "  Etiket: " . $tag->name . "
";
}
/* Çıktı:
Sınıf: UserRepository
  Etiket: Veritabanı
  Etiket: ORM
  Etiket: PHP 8
*/
Performans Avantajı: Öznitelikler, DocBlock yorumlarının aksine, PHP'nin derleme aşamasında işlenir. Bu, çalışma zamanında ek bir ayrıştırma (parsing) yükü oluşturmadıkları anlamına gelir ve performans açısından DocBlock tabanlı çözümlerden daha verimlidir.
Kullanım Alanları: Öznitelikler, framework'lerde (örneğin, yönlendirme, ORM eşlemesi), validasyon kuralı tanımlarında, seri hale getirme (serialization) işlemlerinde, kod üretimi (code generation) araçlarında ve IDE entegrasyonlarında yaygın olarak kullanılır.
Yansıma API'si (Reflection API): Özniteliklere erişim yalnızca PHP'nin Yansıma API'si aracılığıyla mümkündür. ReflectionClass::getAttributes(), ReflectionMethod::getAttributes() gibi yöntemler, uygulanan öznitelikleri almanızı sağlar.
Ad Alanları (Namespaces): Öznitelik sınıflarını kullanırken, tıpkı diğer sınıflarda olduğu gibi ad alanlarını (namespaces) doğru bir şekilde belirtmeli veya use ifadesiyle içe aktarmalısınız.
PHP Sürümü: Öznitelikler özelliği sadece PHP 8.0 ve sonraki sürümlerde mevcuttur. Daha önceki PHP sürümlerinde kullanılmaya çalışıldığında ayrıştırma hatasına neden olur.
Constructor Bağımsız Değişkenleri: Öznitelik sınıflarının constructor'ları, tip ipuçları (type hints) ile tanımlanan bağımsız değişkenleri kabul edebilir. Bu, özniteliğe geçirilen değerlerin tip güvenliğini sağlar.
Sözdizimi Esnekliği: Öznitelikler, tek bir satırda veya birden fazla satıra yayılarak tanımlanabilir, bu da kod okunabilirliğini artırır.
                Web belgelerinin temel bileşenlerinden biri olan HTML sayfa başlığı, kullanıcı deneyimi ve arama motoru optimizasyonu (SEO) açısından kritik bir öneme sahiptir. Bir web sayfasının başlığını tanımlayan bu bileşen, tarayıcı sekmelerinde, arama motoru sonuç sayfalarında (SERP'ler) ve yer imlerinde görünen metindir. Bu makale,  etiketinin HTML dilindeki doğru kullanımını, sözdizimini, pratik örneklerini ve geliştiriciler için önemli ipuçlarını teknik bir yaklaşımla ele alacaktır.
HTML belgelerinde sayfa başlığı,  bölümü içinde yer alan  etiketi ile tanımlanır. Bu etiket, açılış ve kapanış etiketleri arasında sayfanın başlık metnini içerir.
    Sayfa Başlığı Buraya Gelir 
 Etiketi: Bu, HTML belgesinin başlığını tanımlayan ana etikettir. Bir açılış  etiketi ve bir kapanış  etiketi gerektirir. Bu etiket çifti arasına yerleştirilen metin, web sayfasının başlığı olarak işlenir.
Başlık Metni:  etiketleri arasına yerleştirilen metin, sayfanın içeriğini doğru ve özlü bir şekilde özetlemelidir. Bu metin, tarayıcıların sekme başlıklarında, sık kullanılanlar listelerinde ve arama motoru sonuçlarında görüntülenir. Başlık metni, sayfanın ana konusu hakkında net bir fikir vermelidir.
Yerleşim:  etiketi, HTML belgesinin  etiketi içinde yer almalıdır.  bölümü, sayfa hakkında meta veri (görünmeyen bilgiler) sağlayan diğer etiketleri (örneğin, , , ) barındırır.  etiketi içinde yer alan  etiketi, HTML spesifikasyonlarına aykırıdır ve doğru şekilde işlenmeyebilir.
Aşağıdaki örnekler,  etiketinin farklı senaryolarda nasıl kullanılabileceğini göstermektedir.
Örnek 1: Temel Bir Web Sayfası İçin Başlık Tanımlama
Bu örnek, genel bir web sayfası için açıklayıcı bir başlık belirlemeyi göstermektedir.
    
    
    Hakkımızda - Şirketinizin Adı 
    
Yukarıdaki örnekte, sayfanın "Hakkımızda" bölümü olduğu ve "Şirketinizin Adı" adlı bir kuruluşa ait olduğu net bir şekilde belirtilmiştir. Bu, kullanıcıların ve arama motorlarının sayfanın içeriğini kolayca anlamasına yardımcı olur.
Örnek 2: Blog Yazısı İçin Dinamik Başlık Yapısı
Bir blog veya dinamik içerik platformu için başlıklar genellikle içeriğin kendisinden türetilir. Aşağıdaki yapı, bir blog yazısının başlığını ve genel blog adını birleştirerek nasıl bir  oluşturulabileceğini gösterir.
    
    HTML5'te Yeni Özellikler: Detaylı İnceleme - Teknik Blog 
    
Burada, makale başlığı (`HTML5'te Yeni Özellikler: Detaylı İnceleme`) ve blog adı (`Teknik Blog`) birleştirilerek hem bilgilendirici hem de marka bilinirliği sağlayan bir başlık oluşturulmuştur. Bu yaklaşım, dinamik olarak oluşturulan sayfalarda yaygın olarak kullanılır.
Tekillik: Her web sayfası için  etiketi benzersiz olmalıdır. Yinelenen başlıklar, arama motorlarının sitenizi doğru bir şekilde dizine eklemesini zorlaştırabilir ve kullanıcı deneyimini olumsuz etkileyebilir.
Uzunluk: Çoğu arama motoru, başlıkları yaklaşık 50-60 karakter civarında keser. Bu nedenle, en önemli anahtar kelimelerin ve bilgilerin başlığın başına yerleştirilmesi önerilir.
Anahtar Kelime Kullanımı: Sayfanın ana konusunu en iyi özetleyen ve hedef kitlenizin arama yaparken kullanabileceği anahtar kelimeleri  etiketi içinde doğal bir şekilde kullanmak, SEO performansını artırır.
Marka Adı: Genellikle marka adı veya site adı, başlığın sonunda, bir ayırıcı (örneğin, tire (-) veya dikey çubuk (|)) ile birlikte yer alır. Örnek: "Ürün Adı - Marka Adı".
Anlamlı ve Çekici Olma: Başlık sadece anahtar kelimelerden oluşmamalıdır. Kullanıcıları tıklamaya teşvik edecek, sayfanın içeriği hakkında doğru ve çekici bir açıklama sunmalıdır.
Konum:  etiketi her zaman  etiketi içinde yer almalıdır. Yanlış yerleşim, sayfanızın arama motorları tarafından doğru şekilde tanınmamasına neden olabilir.
                ::before veya ::after) aracılığıyla veya doğrudan HTML etiketleri üzerinden stilize etmektir. En yaygın yöntem, ikon fontlarının özel karakterlerini content özelliği ile kullanmaktır.
/* İkon fontunun dahil edilmesi (genellikle  içinde veya CSS  ile) */
@import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css');
/* İkonun bir pseudo-element ile tanımlanması */
.icon-example::before {
    font-family: 'Font Awesome 6 Free'; /* İkon fontunun adı */
    font-weight: 900;                 /* İkonun kalınlığı (Solid için 900) */
    content: '\f007';                 /* İkonun Unicode değeri (örneğin, kullanıcı ikonu) */
    margin-right: 5px;
    color: #3498db;
}
/* Doğrudan bir HTML elementi (örneğin ) ile kullanım */
.fa-user {
    color: #2ecc71;
    font-size: 24px;
}
@import url(...): Bu direktif, harici bir CSS dosyasını mevcut stil sayfasına dahil etmek için kullanılır. İkon fontu kütüphaneleri genellikle bu yolla veya doğrudan HTML içindeki  etiketiyle projenize entegre edilir. Bu, ikon karakterlerinin tarayıcı tarafından erişilebilir olmasını sağlar.
.icon-example::before: Bu, bir HTML elementine (.icon-example sınıfına sahip herhangi bir element) görsel içerik eklemek için kullanılan bir pseudo-elementtir. ::before, elementin içeriğinden önce, ::after ise elementin içeriğinden sonra ekleme yapar. İkon fontlarını bu şekilde kullanmak, HTML yapısını temiz tutar.
font-family: İkonun hangi font ailesinden geldiğini belirtir. Bu, dahil ettiğiniz ikon kütüphanesinin sağladığı özel font adıdır (örneğin, Font Awesome için 'Font Awesome 6 Free' veya 'Material Icons').
font-weight: İkon fontunun belirli bir stilini (örneğin, Regular, Solid, Light) seçmek için kullanılır. Font Awesome gibi kütüphanelerde, farklı stiller farklı ağırlık değerleriyle temsil edilir (örneğin, Solid için 900, Regular için 400).
content: Pseudo-elementin içine yerleştirilecek içeriği tanımlar. İkon fontları söz konusu olduğunda, bu genellikle ikonun özel Unicode değeridir (örneğin, '\f007'). Her ikonun kendine özgü bir Unicode değeri vardır ve bu değer, ikon kütüphanesinin dökümantasyonunda bulunur.
.fa-user: Birçok ikon kütüphanesi, ikonları doğrudan HTML etiketlerine (genellikle  veya ) uygulayabileceğiniz önceden tanımlanmış CSS sınıfları (örneğin, fa fa-user veya fas fa-user) sağlar. Bu sınıflar, gerekli font-family, font-weight ve content özelliklerini otomatik olarak uygular.
Anasayfa
.home-link {
    text-decoration: none;
    color: #2c3e50;
    font-size: 18px;
    display: inline-flex;
    align-items: center;
}
.home-link::before {
    font-family: 'Font Awesome 6 Free';
    font-weight: 900; /* Solid ikon */
    content: '\f015'; /* Ev ikonu Unicode'u */
    margin-right: 8px;
    color: #e74c3c;
    font-size: 20px;
}
.social-icons .fab { /* Tüm brand ikonlarına uygulanır */
    font-size: 30px;
    margin: 0 10px;
    cursor: pointer;
    transition: color 0.3s ease;
}
.social-icons .fa-facebook-f { color: #3b5998; }
.social-icons .fa-twitter { color: #00acee; }
.social-icons .fa-instagram { color: #c32aa3; }
.social-icons .fab:hover {
    opacity: 0.8;
}
.user-profile {
    font-size: 20px;
    color: #34495e;
    margin-right: 20px;
}
.user-profile .fas { /* Solid kullanıcı ikonu */
    color: #27ae60;
    margin-right: 5px;
}
.notification-icon {
    font-size: 24px;
    color: #e67e22;
}
.notification-icon .far { /* Regular zil ikonu */
    color: #f39c12;
}
Performans: Büyük ikon kütüphanelerinin tamamını dahil etmek, sayfa yükleme süresini artırabilir. Sadece ihtiyacınız olan ikonları veya subset'leri dahil etmeye özen gösterin. Bazı kütüphaneler (örneğin, Font Awesome Pro), sadece seçilen ikonları içeren özel paketler oluşturma imkanı sunar.
Erişilebilirlik (Accessibility): İkonların görsel bir anlamı varsa, ekran okuyucular için bu anlamı sağlamak önemlidir. Genellikle  veya  etiketleri içinde kullanılan ikonlara aria-hidden="true" özelliği ekleyerek ekran okuyucuların tekrarlayan veya anlamsız ikonları okumasını engelleyebilirsiniz. Anlamlı ikonlar için [İkon Açıklaması] gibi metinsel açıklamalar eklemeyi düşünebilirsiniz.
SVG İkonları: İkon fontlarına alternatif olarak SVG (Scalable Vector Graphics) ikonları da yaygın olarak kullanılır. SVG'ler, çözünürlükten bağımsız olarak keskin görünür ve CSS ile kolayca stilize edilebilir. SVG Sprite veya inline SVG kullanımı, daha iyi performans ve esneklik sağlayabilir.
Tarayıcı Desteği: İkon fontlarının ve pseudo-elementlerin modern tarayıcılarda geniş desteği vardır. Ancak eski tarayıcılar için yedek çözümler veya polifiller gerekebilir.
Font Yolu: İkon fontu dosyalarının (.woff, .ttf vb.) sunucuda doğru yolda olduğundan ve tarayıcının bunlara erişebildiğinden emin olun. Yanlış yol, ikonların kare kutular olarak görünmesine neden olabilir.
                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,