Çerezler
Bu web sitesi sizlere daha iyi hizmet verebilmek için çerezleri kullanır.
                Veritabanı yönetim sistemlerinde (DBMS) depolanan verilere erişmek, manipüle etmek ve analiz etmek için kullanılan yapısal sorgu dili olan SQL (Structured Query Language), her veri uzmanı için temel bir araçtır. Bu dilin en temel ve en sık kullanılan komutlarından biri, veritabanından veri çekmek için tasarlanmış olan SELECT ifadesidir. SELECT, belirli sütunları, satırları veya tüm veri kümelerini alarak bir sorgu sonucunu oluşturmanızı sağlar. Bu makale, SELECT ifadesinin sözdizimini, parametrelerini ve pratik kullanım örneklerini detaylı bir şekilde açıklayacaktır.
SELECT ifadesinin genel sözdizimi aşağıdaki gibidir:
SELECT [DISTINCT] sütun1, sütun2, ...
FROM tablo_adı
[WHERE koşul]
[GROUP BY sütunlar]
[HAVING koşul]
[ORDER BY sütunlar [ASC|DESC]]
[LIMIT sayı];Yukarıdaki sözdiziminde köşeli parantez [] içine alınmış maddeler isteğe bağlıdır.
SELECT: Veritabanından hangi sütunların alınacağını belirtmek için kullanılır. Birden fazla sütun virgül ile ayrılır. Tüm sütunları seçmek için * (yıldız) karakteri kullanılır.
DISTINCT (İsteğe Bağlı): Seçilen sütunlardaki yinelenen değerleri kaldırarak yalnızca benzersiz sonuçları döndürür. Eğer bu anahtar kelime kullanılmazsa, tüm eşleşen satırlar döndürülür.
FROM tablo_adı: Verilerin hangi tablodan çekileceğini belirtir. Bu madde zorunludur.
WHERE koşul (İsteğe Bağlı): Belirli bir koşula uyan satırları filtrelemek için kullanılır. Bu koşul, AND, OR, NOT gibi mantıksal operatörler ve karşılaştırma operatörleri (=, <>, >, <, >=, <=) ile oluşturulabilir.
GROUP BY sütunlar (İsteğe Bağlı): Sonuç kümesini bir veya daha fazla sütuna göre gruplamak için kullanılır. Genellikle COUNT(), SUM(), AVG(), MIN(), MAX() gibi toplama (aggregate) fonksiyonlarıyla birlikte kullanılır.
HAVING koşul (İsteğe Bağlı): GROUP BY ifadesiyle gruplanmış satırlara koşul uygulamak için kullanılır. WHERE, tek tek satırları filtrelerken, HAVING grupları filtreler.
ORDER BY sütunlar [ASC|DESC] (İsteğe Bağlı): Sonuç kümesini bir veya daha fazla sütuna göre sıralamak için kullanılır. ASC (ascending) artan sıralama, DESC (descending) azalan sıralama anlamına gelir. Varsayılan değer ASC'dir.
LIMIT sayı (İsteğe Bağlı): Sorgu sonucunda döndürülecek satır sayısını sınırlar. Bu ifade genellikle çok sayıda veri içeren tablolarda performansı artırmak veya yalnızca belirli bir sayıda sonuç almak için kullanılır. SQL Server'da bu işlevsellik TOP anahtar kelimesiyle, Oracle'da ise ROWNUM ile sağlanır.
Aşağıdaki örneklerde, Müşteriler adında bir tablo ve MüşteriID, Ad, Soyad, Şehir, Yaş, SiparişSayısı sütunları olduğunu varsayalım.
Örnek 1: Tüm Sütunları Seçme
Müşteriler tablosundaki tüm sütunları ve tüm satırları getirir.
SELECT *
FROM Müşteriler;Örnek 2: Belirli Sütunları Seçme
Müşteriler tablosundan yalnızca Ad ve Soyad sütunlarını getirir.
SELECT Ad, Soyad
FROM Müşteriler;Örnek 3: Koşullu Seçim (WHERE Kullanımı)
Yaşı 30'dan büyük olan müşterilerin Ad ve Soyad bilgilerini getirir.
SELECT Ad, Soyad
FROM Müşteriler
WHERE Yaş > 30;Örnek 4: Benzersiz Değerleri Seçme (DISTINCT Kullanımı)
Müşteriler tablosunda bulunan benzersiz şehirleri listeler.
SELECT DISTINCT Şehir
FROM Müşteriler;Örnek 5: Gruplama ve Toplama (GROUP BY ve COUNT Kullanımı)
Her şehirden kaç müşteri olduğunu sayar.
SELECT Şehir, COUNT(MüşteriID) AS MüşteriSayısı
FROM Müşteriler
GROUP BY Şehir;Örnek 6: Gruplandırılmış Veriyi Filtreleme (HAVING Kullanımı)
Sadece 2'den fazla müşterisi olan şehirleri ve müşteri sayılarını listeler.
SELECT Şehir, COUNT(MüşteriID) AS MüşteriSayısı
FROM Müşteriler
GROUP BY Şehir
HAVING COUNT(MüşteriID) > 2;Örnek 7: Sonuçları Sıralama (ORDER BY Kullanımı)
Müşterileri Soyad'a göre azalan (DESC) ve ardından Ad'a göre artan (ASC) sırada listeler.
SELECT Ad, Soyad, Şehir
FROM Müşteriler
ORDER BY Soyad DESC, Ad ASC;Örnek 8: Sonuç Sayısını Sınırlama (LIMIT Kullanımı)
En genç 5 müşteriyi listeler (yaşı en küçük olanlar).
SELECT Ad, Soyad, Yaş
FROM Müşteriler
ORDER BY Yaş ASC
LIMIT 5;Sütunları Belirtin: Performans ve okunabilirlik açısından, SELECT * yerine her zaman ihtiyacınız olan belirli sütunları belirtmek daha iyidir. Özellikle büyük tablolarda veya çok sütunlu tablolarda bu önemlidir.
Büyük/Küçük Harf Duyarlılığı: Çoğu SQL veritabanı (örneğin MySQL, PostgreSQL) tablo ve sütun adlarında büyük/küçük harf duyarlıdır. SQL Server gibi bazıları (varsayılan olarak) değildir. Kullandığınız veritabanının konfigürasyonunu kontrol edin.
WHERE ve HAVING Arasındaki Fark: WHERE ifadesi, veritabanından veri çekilmeden önce tek tek satırları filtrelerken, HAVING ifadesi, veriler GROUP BY ile gruplandıktan sonra gruplanmış sonuçları filtreler.
İndeks Kullanımı: WHERE ve ORDER BY yan tümcelerinde kullanılan sütunlara indeks eklemek, sorgu performansını önemli ölçüde artırabilir.
Veritabanına Özgü Sözdizimi: LIMIT yerine TOP (SQL Server) veya ROWNUM (Oracle) gibi veritabanına özgü anahtar kelimeler olabileceğini unutmayın. Her veritabanı sisteminin kendi küçük sözdizimi farklılıkları olabilir.
                Programlamada veriyi depolamanın ve yönetmenin temel yolu değişkenlerdir. Python dilinde de değişkenler, bilgileri bellekte saklamak ve program akışı boyunca bu bilgilere referans vermek için kullanılır. Python, dinamik tipleme yapısına sahip olduğundan, değişken tanımlarken veri tipini önceden belirtme zorunluluğu yoktur; yorumlayıcı atanan değere göre tipi otomatik olarak algılar. Bu makale, Python'da değişkenlerin nasıl tanımlandığını, kullanıldığını ve yönetildiğini detaylı olarak ele alacaktır.
Python'da bir değişken tanımlamak ve ona bir değer atamak oldukça basittir. Temel sözdizimi aşağıdaki gibidir:
değişken_adı = değerBurada değişken_adı, bellekteki veriye erişmek için kullanılan etiketi ifade ederken, değer ise değişkene atanan gerçek bilgiyi temsil eder. Örneğin, bir sayıyı bir değişkene atamak için:
x = 10Yukarıdaki sözdizimini oluşturan her bir bileşen aşağıdaki anlamlara gelir:
değişken_adı: Bu, değişkeninizi tanımlayan benzersiz bir isimdir. Python'da değişken isimleri belirli kurallara uymalıdır:
Bir harf (a-z, A-Z) veya alt çizgi (_) ile başlamalıdır.
Geri kalan karakterler harf, rakam (0-9) veya alt çizgi olabilir.
Büyük/küçük harf duyarlıdır (yani, yas ve Yas farklı değişkenlerdir).
Python'ın ayrılmış anahtar kelimeleri (örneğin, if, for, while, True, False, None) değişken adı olarak kullanılamaz.
= (Atama Operatörü): Bu sembol, sağdaki değeri soldaki değişkene atamak için kullanılır.
değer: Bu, değişkene atanan gerçek veridir. Bu bir sayı (int, float), metin (str), liste (list), sözlük (dict), boolean (True/False) veya diğer herhangi bir Python veri tipi olabilir.
Python'ın en belirgin özelliklerinden biri olan dinamik tipleme, bir değişkene farklı zamanlarda farklı tiplerde değerler atanabilmesine olanak tanır. Yani, başlangıçta bir sayı tutan bir değişken, daha sonra bir metin tutabilir.
Aşağıdaki örnekler, Python'da değişkenlerin çeşitli kullanım senaryolarını göstermektedir.
Tam sayı (int) ve ondalıklı sayı (float) değişkenleri tanımlama:
# Tam sayı değişkeni
yas = 30
print(f"Yaş: {yas}")
# Ondalıklı sayı değişkeni
pi_sayisi = 3.14159
print(f"Pi sayısı: {pi_sayisi}")Metin değişkenleri tek veya çift tırnaklar kullanılarak tanımlanabilir:
# Çift tırnak ile metin atama
isim = "Ayşe"
print(f"İsim: {isim}")
# Tek tırnak ile metin atama
selamlama = 'Merhaba Python!'
print(f"Selamlama: {selamlama}")
# Çok satırlı metin atama (üçlü tırnaklar ile)
uzun_mesaj = """Bu,
birden fazla
satıra yayılmış bir mesajdır."""
print(f"Uzun Mesaj:\n{uzun_mesaj}")Python, farklı veri tiplerini değişkenlere atamanıza olanak tanır:
# Liste değişkeni
meyveler = ["elma", "armut", "muz"]
print(f"Meyveler: {meyveler}")
# Sözlük değişkeni
kullanici_bilgisi = {"ad": "Mehmet", "soyad": "Yılmaz", "yas": 25}
print(f"Kullanıcı Bilgisi: {kullanici_bilgisi}")
# Boolean değişkeni
aktif_mi = True
print(f"Aktif mi: {aktif_mi}")Bir değişkene yeni bir değer atandığında, eski değeri silinir ve yeni değerle güncellenir:
sayac = 0
print(f"Başlangıç sayacı: {sayac}")
sayac = 10
print(f"Güncel sayaç: {sayac}")
sayac = "On" # Farklı bir veri tipiyle güncelleme
print(f"Son sayaç: {sayac}")Tek bir satırda birden fazla değişkene değer atamak mümkündür:
# Tek satırda birden fazla değişkene farklı değerler atama
x, y, z = 10, 20, "otuz"
print(f"x: {x}, y: {y}, z: {z}")
# Tek bir değeri birden fazla değişkene atama
a = b = c = "aynı değer"
print(f"a: {a}, b: {b}, c: {c}")İsimlendirme Kuralları ve Stiller: Python topluluğunda değişkenler için genellikle snake_case (küçük harfler ve kelimeler arasında alt çizgi) tercih edilir (örneğin, kullanici_adi). _ ile başlayan değişkenler genellikle dahili kullanım veya "özel" değişkenler için bir konvansiyondur. İki alt çizgi ile başlayanlar (__degisken) ise daha özel anlamlar taşır.
Ayrılmış Anahtar Kelimeler: Python'ın kendine özgü anahtar kelimeleri (False, None, True, and, as, assert, async, await, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield) değişken adı olarak kullanılamaz. Bu kelimeleri kullanmaya çalışmak bir sözdizimi hatasına yol açacaktır.
Dinamik Tipleme ve Referanslar: Python'da değişkenler aslında bellekteki değerlere birer referanstır. Bir değişkene yeni bir değer atadığınızda, aslında değişkenin referans ettiği bellek adresini değiştirirsiniz. Bu, değişkenlerin esnekliğini artırır ancak bellek yönetimi açısından bazı incelikleri de beraberinde getirir.
Anlamlı Değişken İsimleri: Kodunuzun okunabilirliğini ve sürdürülebilirliğini artırmak için değişkenlere amaçlarını açıkça belirten, anlamlı isimler vermeye özen gösterin. Örneğin, x = 10 yerine kullanici_yas = 10 daha anlaşılırdır.
                Her gün keyifle izlediğimiz, haberleri takip ettiğimiz, yeni dünyalara yelken açtığımız televizyon… Kimi zaman bir eğlence kaynağı, kimi zaman bir bilgi kapısı, kimi zaman da toplumsal bir ayna. Peki, bu büyülü kutunun ekranına yansıyan ilk insan yüzü kime aitti, biliyor musunuz?
Günümüzün ultra HD çözünürlüklü, akıllı televizyonlarından çok uzak, mekanik bir sistemle başlayan bu maceranın ilk adımlarına yolculuk yapmaya hazır mısınız? Sizi zamanda geriye, televizyonun henüz bir bilimkurgu rüyasından ibaret olduğu yıllara götürüyorum.
Televizyonun babası olarak kabul edilen İskoç mucit John Logie Baird, görüntüyü uzaklara iletme hayaliyle yanıp tutuşuyordu. 1920'li yılların başlarında, bugünün teknolojisiyle kıyaslanamayacak kadar ilkel denebilecek yöntemlerle, bu hayalini gerçeğe dönüştürmek için uğraşıyordu. Atölyesinde, eski çay tenekeleri, bisiklet lambaları ve karton parçaları gibi basit malzemelerle çalışarak ilk prototiplerini oluşturuyordu. Bu, tam anlamıyla bir "garaj mucitliği" örneğiydi.
Baird'in sistemi, bugün kullandığımız elektronik televizyonlardan çok farklıydı. O, "Nipkow diski" adı verilen dönen delikli diskler kullanarak görüntüyü tarıyor ve ışık sinyallerine dönüştürüyordu. Ardından bu sinyaller elektrik telleri aracılığıyla başka bir yere iletiliyor ve orada tekrar görüntüye çevriliyordu. Kulağa karmaşık gelse de, o dönem için çığır açıcı bir buluştu.
Baird, 1925 yılının ilk aylarında, Londra'daki atölyesinde yaptığı deneylerde, hareketli görüntüleri aktarmayı başarmıştı. Ancak bu görüntüler, henüz bir insan yüzü netliğinde değildi. Deneylerinin başında, insan yüzü yerine bir ventrilok (karın konuşmacısı) kuklası olan "Stooky Bill"i kullanıyordu. Kuklanın belirgin renkleri ve hatları, ilkel sistemde daha kolay algılanabiliyordu.
1925 yılının sonlarına doğru, Baird'in sistemi o kadar gelişmişti ki, artık gerçek bir insan yüzünü aktarmayı deneyebilirdi. Ancak bu ilk anlar, beklediğiniz gibi jenerik müziği veya büyük bir tanıtımla gerçekleşmedi. Aksine, sıradan bir günün sıradan bir anında, tarihin tozlu sayfalarına altın harflerle yazılacak o olay yaşandı.
2 Ekim 1925'te, John Logie Baird, Londra'daki laboratuvarında son ayarlamalarını yaparken, bir insan yüzünü daha net bir şekilde aktarmak istiyordu. O sırada atölyesinde bulunan 20 yaşındaki William Taynton, Baird'in ofisindeki yardımcılarından biriydi. Baird, Taynton'ı sisteme oturtur ve görüntüyü bir başka odadaki ekrana yansıtmaya çalışır.
Ancak bir sorun vardı: Taynton, ekranda belirmesi gereken yere oturmasına rağmen, görüntü bir türlü netleşmiyordu. Baird, Taynton'a "Biraz daha yaklaş!" diye seslenir. Taynton, tereddütle biraz daha yaklaştığında, Baird hızla diğer odaya koşar ve ekrana baktığında şaşkınlıkla donakalır. Ekranda, Taynton'ın yüzü, gri tonlarında da olsa, inanılmaz bir netlikle belirmişti!
İşte o an, tarihe "televizyona çıkan ilk insan" olarak geçen William Taynton'ın yüzü, aslında tesadüfen ve bir teknik aksaklık sayesinde ekrana yansımıştı. Baird'in sistemi, düşük ışık koşullarında yeterli sinyali alamadığı için Taynton'ın yüzü soluk görünüyordu. Ancak Taynton'ın daha da yaklaşmasıyla, yeterli ışık algılandı ve tarihi görüntü elde edildi. Taynton, bu anın farkında bile olmadan, iletişim tarihinin en önemli anlarından birinin kahramanı olmuştu.
Bu başarı, Baird'in mekanik televizyon sisteminin gerçekten işe yaradığının somut kanıtıydı. Artık sadece kuklaların değil, gerçek insanların yüzleri de uzak mesafelere iletilebiliyordu. Bu, iletişimde yepyeni bir çağın başlangıcıydı.
Baird'in bu ilk televizyon sistemi, günümüzdeki elektronik televizyonlardan tamamen farklıydı. İşte bu sistemin bazı temel özellikleri:
Nipkow Diski: Görüntüyü taramak için delikli, dönen diskler kullanılıyordu. Bu diskler, görüntüyü küçük noktalara ayırıyor ve her bir noktanın ışık yoğunluğunu ölçüyordu.
Düşük Çözünürlük: İlk görüntüler sadece 30 satırdan oluşuyordu. Bu, bugünkü ultra yüksek çözünürlüklü ekranlarımızla kıyaslandığında oldukça düşüktü ve görüntüyü bulanık ve piksel piksel gösteriyordu.
Siyah Beyaz Görüntü: Renkli yayınlar henüz bir hayaldi. Tüm görüntüler, gri tonlarının farklılıklarıyla aktarılıyordu.
Canlı Yayın: Kayıt teknolojisi henüz gelişmediği için, yayınlar genellikle canlı olarak yapılıyordu. Yani, ne izliyorsanız, o an gerçekleşiyordu.
Bu ilkel teknolojiye rağmen, Baird'in başarısı olağanüstüydü. O, sadece bir cihaz icat etmekle kalmadı, aynı zamanda insanlığın iletişim kurma ve bilgi edinme biçimini kökten değiştirecek bir devrimin kapılarını araladı.
William Taynton'ın yüzünün ekrana yansıdığı o an, belki de dünya çapında manşetlere taşınmadı. O dönemde bu olayın ne kadar büyük bir devrimin başlangıcı olduğu tam olarak anlaşılamamıştı. Ancak bugün geriye dönüp baktığımızda, bu anın iletişim tarihindeki dönüm noktalarından biri olduğunu rahatlıkla söyleyebiliriz.
Bu gelişme, insanların uzaktaki olayları sanki oradaymış gibi deneyimlemesine, liderleri ve ünlüleri evlerinin konforunda görmesine olanak tanıdı. Haberler, eğlence ve bilgi, daha önce hiç olmadığı kadar görsel ve anlık bir şekilde milyonlara ulaşmaya başladı. Taynton'ın ekrandaki kısa süreli varlığı, bir zamanlar sadece hayal edilebilen bir dünyanın kapılarını aralamıştı.
Baird'in ilk başarılı gösterimlerinden sonra televizyonun yaygınlaşması elbette bir anda olmadı. İlk yayınlar oldukça sınırlıydı ve genellikle sadece birkaç kilometrelik mesafeleri kapsıyordu. Görüntü kalitesi düşüktü, ses ile görüntü senkronizasyonu sorunları yaşanabiliyordu ve izleyicilerin evlerinde bir televizyon alıcısına sahip olmaları gerekiyordu ki, bu da o dönemde çok pahalı bir lükstü.
Ancak mucitler ve mühendisler durmaksızın çalışmaya devam etti. Mekanik televizyon sistemleri, yerini daha gelişmiş ve daha kaliteli görüntüler sunan elektronik televizyon sistemlerine bıraktı. Philo Farnsworth ve Vladimir Zworykin gibi isimler, elektronik televizyonun geliştirilmesinde önemli roller oynadı. Bu gelişmeler, televizyonun daha geniş kitlelere ulaşmasının önünü açtı.
1930'lu yılların sonlarına doğru, özellikle II. Dünya Savaşı'ndan sonra, televizyon dünya genelinde hızla popülerleşmeye başladı. Amerika Birleşik Devletleri ve İngiltere gibi ülkelerde düzenli yayınlar başladı. Artık insanlar sadece haberleri dinlemekle kalmıyor, aynı zamanda görsel olarak da takip edebiliyordu. Spor müsabakaları, siyasi konuşmalar, dramalar ve komediler, evlere taşınan büyülü kutunun içeriğini oluşturuyordu.
Televizyon, toplumsal yaşamın ayrılmaz bir parçası haline geldi. Kültürleri etkiledi, siyaseti şekillendirdi ve insanları eğlendirdi. Bugün bile, internetin ve mobil cihazların yükselişine rağmen, televizyon hala dünya genelinde milyarlarca insanın günlük yaşamında önemli bir yer tutuyor.
John Logie Baird ve onunla birlikte William Taynton'ın hikayesi, insanlık tarihindeki önemli bir teknolojik atılımın ve bir hayalin gerçeğe dönüşmesinin sembolüdür. O ilk bulanık, gri tonlardaki yüz, bugün izlediğimiz ultra gerçekçi görüntülü yayınların temellerini attı. Taynton'ın tesadüfi bir anı, iletişimin ve medyanın geleceğini kalıcı olarak değiştirdi.
Bir sonraki televizyon izleyişinizde, belki de o ilk anı, 1925 yılının ekim ayında Londra'daki bir atölyede, tesadüfen ekrana yansıyan 20 yaşındaki William Taynton'ın yüzünü hatırlarsınız. Çünkü o yüz, bir devrimin ilk adımıydı, bir hayalin gerçeğe dönüştüğü ve dünyayı sonsuza dek değiştiren o sihirli anın ta kendisiydi.
                PHP, dinamik web uygulamaları geliştirmek için kullanılan güçlü bir betik dilidir. Bu gücün temelinde, programın mantığını ve veri akışını yönetmek için kullanılan ifadeler (expressions) yatar. İfadeler, bir değer üreten her şey olarak tanımlanabilir ve PHP kodunun yapı taşlarını oluştururlar. Bir sabitten, değişkenden, operatör kombinasyonundan veya fonksiyon çağrısından ibaret olsun, her ifade belirli bir değeri hesaplamak üzere tasarlanmıştır. Bu makalede, PHP'deki ifadelerin temel yapısını, kullanımını ve pratik örneklerini detaylı bir şekilde inceleyeceğiz.
İfadeler, PHP'de çeşitli biçimlerde ortaya çıkabilir. En temel haliyle bir ifade, tek başına bir değer olabilir veya değerleri işleyen operatörler aracılığıyla birden fazla bileşenin bir araya gelmesiyle oluşabilir. Bir ifadenin sonucu her zaman bir değerdir.
 5);
// İfade sonuçlarını ekrana yazdıralım
echo "Sayı: " . $sayi . "
";
echo "Toplam: " . $toplam . "
";
echo "Metin Uzunluğu: " . $metinUzunlugu . "
";
echo "Sonuç (Sayı > 5): " . ($sonuc ? "True" : "False") . "
";
?>PHP'deki ifadelerin temel bileşenleri ve işlevleri aşağıda açıklanmıştır:
Değerler (Literals): Sabit değerlerdir. Örneğin, 10 (tam sayı), 3.14 (ondalık sayı), "Merhaba" (dizi), true (boolean). Bunlar tek başlarına birer ifadedir.
Değişkenler (Variables): Bir değeri saklayan adlandırılmış bellek konumlarıdır. Bir değişkenin değeri, o değişkenin kendisi bir ifade olarak kullanıldığında erişilen şeydir. Örnek: $degisken.
Operatörler (Operators): Bir veya daha fazla operand üzerinde işlem yapan sembollerdir. PHP'de aritmetik (+, -, *, /), atama (=), karşılaştırma (==, !=, <, >), mantıksal (&&, ||, !) ve daha birçok operatör bulunur. Operatörler, operandları birleştirerek daha karmaşık ifadeler oluşturur. Örnek: $a + $b, $c > 10.
Fonksiyon Çağrıları (Function Calls): Bir fonksiyonun tanımlı bir görevi yerine getirmesi ve genellikle bir değer döndürmesi işlemidir. Fonksiyonun dönüş değeri bir ifade olarak kabul edilir. Örnek: strlen("PHP"), isset($degisken).
Parantezler (Parentheses): İfadelerin önceliğini değiştirmek veya okunabilirliği artırmak için kullanılır. Parantez içindeki kısım önce değerlendirilir ve sonucu dıştaki ifadenin bir parçası olur. Örnek: ($a + $b) * $c.
Aşağıdaki örnekler, PHP dilinde ifadelerin çeşitli senaryolarda nasıl kullanıldığını göstermektedir.
";
echo "Toplam Fiyat (KDV Hariç): " . $toplamFiyat . " TL
";
echo "Toplam Fiyat (KDV Dahil): " . round($kdvDahilFiyat, 2) . " TL
";
?>= 18 && $ehliyetVarMi) {
    echo "Araç kullanmaya uygundur.
";
} else {
    echo "Araç kullanmaya uygun değildir.
";
}
$puan = 75;
$devamDurumu = 80; // % olarak
// Karmaşık bir koşullu ifade
if ($puan >= 60 || $devamDurumu >= 75) {
    echo "Dersi geçme durumu değerlendirilebilir.
";
} else {
    echo "Dersi geçemedi.
";
}
?>";
echo "Temizlenmiş Metin: '" . $temizMetin . "'
";
echo "Büyük Harfli Metin: '" . $buyukHarfMetin . "'
";
echo "Metin Uzunluğu: " . $uzunluk . "
";
// Dizeleri birleştiren ifade
$tamAd = "Ahmet" . " " . "Yılmaz";
echo "Tam Ad: " . $tamAd . "
";
?>Değer Dönüşümü: PHP, ifadeleri değerlendirirken gerektiğinde otomatik tip dönüşümü yapabilir. Ancak, beklenen davranış için tipleri açıkça belirtmek veya kontrol etmek her zaman daha güvenlidir.
Yan Etkiler: Bazı ifadeler, bir değer döndürmenin yanı sıra programın durumunu değiştiren (yan etki yaratan) işlemler içerebilir. Örneğin, $x = 5; atama ifadesi, $x değişkenine 5 değerini atar ve bu atamanın sonucu da 5'tir.
İfade Sonlandırma: Çoğu ifade, PHP'de bir noktalı virgül (;) ile sonlandırılır. Bu, PHP yorumlayıcısının bir ifadenin bittiğini anlamasını sağlar.
Okunabilirlik: Karmaşık ifadeler yazarken, parantezleri () kullanarak işlem önceliğini açıkça belirtmek ve kodu daha okunabilir hale getirmek önemlidir.
Performans: Çok karmaşık ve iç içe geçmiş ifadeler, okunabilirliği azaltmakla kalmaz, bazen performans üzerinde de olumsuz etkileri olabilir. Gerekirse ifadeleri daha küçük, yönetilebilir parçalara ayırmak faydalıdır.
Hata Ayıklama: Beklenmeyen bir değerle karşılaştığınızda, ifadenin her bir parçasını adım adım değerlendirerek veya var_dump() gibi hata ayıklama fonksiyonlarını kullanarak sorunu tespit edebilirsiniz.
                Modern web geliştirme süreçlerinde, HTML kodlarını yazmak, düzenlemek ve yönetmek için kullanılan yazılımlar olan HTML editörleri, geliştiricilerin verimliliğini ve kod kalitesini doğrudan etkileyen temel araçlardır. Bu editörler, basit metin düzenleyicilerin ötesine geçerek, HTML dilinin yapısına uygun özel özellikler sunar. Bu kılavuz, HTML editörlerinin temel prensiplerini, sundukları avantajları ve HTML geliştirme bağlamında etkin kullanım yöntemlerini detaylandırmaktadır.
HTML editörleri, geliştiricilerin HTML kodunun temel sözdizimini doğru ve hızlı bir şekilde oluşturmasına yardımcı olan özellikler sunar. HTML, etiket tabanlı bir işaretleme dili olup, her bir elementin belirli bir yapısı vardır. Bir HTML elementi genellikle bir açılış etiketi, kapanış etiketi ve bu etiketler arasındaki içerikten oluşur. Editörler, bu yapıyı kolayca oluşturmak ve yönetmek için tasarlanmıştır.
Bu bir paragraf içeriğidir.
Bağlantı Metni

HTML editörleri, geliştirme sürecini kolaylaştıran bir dizi temel özellik sunar:
Sözdizimi Vurgulama (Syntax Highlighting): Editörler, HTML etiketlerini, niteliklerini, değerlerini ve içeriklerini farklı renklerle vurgulayarak kodun okunabilirliğini artırır. Bu, potansiyel hataların daha hızlı tespit edilmesine olanak tanır.
Otomatik Tamamlama (Autocompletion/IntelliSense): Geliştirici etiket veya nitelik yazmaya başladığında, editör olası seçenekleri önerir ve kodu otomatik olarak tamamlar. Örneğin,  yazarken 
Kod Katlama (Code Folding): Büyük kod bloklarını veya iç içe geçmiş etiketleri gizleyerek (katlayarak) kodun belirli bölümlerine odaklanmayı sağlar. Bu, karmaşık HTML yapılarında gezinmeyi kolaylaştırır.
Hata Ayıklama ve Doğrulama (Debugging & Validation): Bazı gelişmiş editörler, yazım hatalarını veya geçersiz HTML yapılarını gerçek zamanlı olarak belirterek kodun standartlara uygunluğunu kontrol etmeye yardımcı olur.
Çoklu İmleç (Multi-cursor) ve Çoklu Seçim: Aynı anda birden fazla yerde düzenleme yapma veya kodun birden çok parçasını seçip düzenleme yeteneği, tekrarlayan görevlerde zaman kazandırır.
Eklenti ve Genişletilebilirlik: Birçok editör, üçüncü taraf eklentiler aracılığıyla ek işlevsellik kazanabilir. Örneğin, Emmet gibi eklentiler, kısa yazımlarla karmaşık HTML yapıları oluşturmayı sağlar.
HTML editörlerinin sunduğu avantajları daha iyi anlamak için aşağıdaki pratik senaryoları inceleyelim:
Örnek 1: Temel HTML Yapısı Oluşturma
Bir HTML editörü, yeni bir dosya oluşturduğunuzda temel HTML iskeletini otomatik olarak oluşturmanıza yardımcı olabilir:
    
    
    Sayfa Başlığı 
    Merhaba Dünya!
    Bu bir örnek HTML sayfasıdır.
Editörler, , ,  gibi temel etiketleri otomatik olarak tamamlayarak ve doğru iç içe geçişleri sağlayarak bu yapıyı hızlıca kurmanıza olanak tanır.
Örnek 2: Emmet Kullanarak Hızlı Etiket Oluşturma
Emmet gibi eklentilerle, karmaşık HTML yapılarını tek bir satırda yazıp genişletebilirsiniz. Örneğin, aşağıdaki Emmet kısayolu:
div.container>ul>li*3>a[href="#"]{Öğe $}Editörde genişletildiğinde, aşağıdaki HTML çıktısını verecektir:
Bu özellik, özellikle büyük ve tekrarlayan listeler, menüler veya formlar oluştururken büyük zaman kazandırır.
Örnek 3: Nitelik Tamamlama ve Hata Tespiti
Bir  etiketi yazarken, editörler src, alt, width, height gibi nitelikleri otomatik olarak önerebilir. Ayrıca, yanlış bir nitelik adı yazdığınızda veya gerekli bir niteliği unuttuğunuzda sizi uyarabilir.
Doğru Editör Seçimi: İhtiyaçlarınıza ve proje büyüklüğünüze uygun bir editör seçmek önemlidir. Popüler seçenekler arasında Visual Studio Code, Sublime Text ve Atom bulunmaktadır.
Eklentileri Araştırın: Editörünüzün eklenti mağazasını keşfedin. HTML geliştirme için özel olarak tasarlanmış linting, formatlama ve snippet eklentileri verimliliğinizi artıracaktır.
Klavye Kısayollarını Öğrenin: Editörünüzün klavye kısayollarını etkin bir şekilde kullanmak, kod yazma hızınızı önemli ölçüde artırır. Özellikle çoklu seçim, yorum satırı ekleme ve kod bloklarını taşıma gibi işlevler için kısayolları öğrenin.
Kod Formatlamayı Kullanın: Çoğu editör, kodunuzu belirli bir stile göre otomatik olarak formatlama özelliğine sahiptir. Bu, özellikle ekip çalışmalarında kodun tutarlı ve okunabilir olmasını sağlar.
Canlı Önizleme: Bazı HTML editörleri, yaptığınız değişiklikleri anında bir web tarayıcısında görüntülemenize olanak tanıyan canlı önizleme özelliklerine sahiptir. Bu, görsel düzenlemelerde büyük kolaylık sağlar.
Versiyon Kontrol Entegrasyonu: Gelişmiş editörler, Git gibi versiyon kontrol sistemleriyle entegre çalışarak kod değişikliklerini takip etmeyi ve işbirliğini kolaylaştırır.
                SQL (Structured Query Language), ilişkisel veritabanlarını yönetmek ve manipüle etmek için kullanılan standart bir programlama dilidir. Veritabanı sistemleriyle etkileşim kurmanın temelini oluşturan bu dil, veri tanımlama (DDL) ve veri işleme (DML) gibi çeşitli görevleri yerine getirmek için güçlü komut setleri sunar. Bu makale, SQL diline yeni başlayanlar için temel veritabanı işlemleri olan tablo oluşturma, veri ekleme, seçme, güncelleme ve silme komutlarının kullanımını adım adım açıklamaktadır.
Aşağıda, SQL'de en sık kullanılan ve başlangıç seviyesi için kritik olan temel DDL ve DML komutlarının genel sözdizimleri yer almaktadır. Bu sözdizimleri, veritabanı nesnelerini oluşturmak ve verileri yönetmek için kullanılır.
-- Veritabanı Oluşturma (DDL)
CREATE DATABASE veritabani_adi;
-- Tablo Oluşturma (DDL)
CREATE TABLE tablo_adi (
    sutun1_adi VERI_TIPI [KISITLAMALAR],
    sutun2_adi VERI_TIPI [KISITLAMALAR],
    ...
);
-- Veri Ekleme (DML)
INSERT INTO tablo_adi (sutun1, sutun2, ...)
VALUES (deger1, deger2, ...);
-- Veri Seçme (DML)
SELECT sutun1, sutun2, ...
FROM tablo_adi
WHERE kosul;
-- Veri Güncelleme (DML)
UPDATE tablo_adi
SET sutun1 = yeni_deger1, sutun2 = yeni_deger2, ...
WHERE kosul;
-- Veri Silme (DML)
DELETE FROM tablo_adi
WHERE kosul;
Yukarıda belirtilen temel SQL komutlarının her bir bileşeni, belirli bir işlevi yerine getirir:
CREATE DATABASE veritabani_adi;: Yeni bir veritabanı oluşturmak için kullanılır. veritabani_adi, oluşturulacak veritabanının adını temsil eder.
CREATE TABLE tablo_adi (...): Yeni bir tablo oluşturmak için kullanılır. tablo_adi, oluşturulacak tablonun adıdır. Parantez içindeki kısım, tablonun sütunlarını, veri tiplerini ve kısıtlamalarını tanımlar.
sutun_adi VERI_TIPI [KISITLAMALAR]: Bir sütunun adını, saklayacağı veri tipini (örneğin, INT, VARCHAR(255), DATE) ve isteğe bağlı kısıtlamaları (örneğin, PRIMARY KEY, NOT NULL, UNIQUE) belirtir.
INSERT INTO tablo_adi (sutun1, sutun2, ...) VALUES (deger1, deger2, ...): Belirtilen tabloya yeni bir satır veri eklemek için kullanılır. Sütun adları listesi, değerlerin hangi sütunlara ekleneceğini belirtir; VALUES anahtar kelimesi ise eklenecek gerçek değerleri içerir.
SELECT sutun1, sutun2, ... FROM tablo_adi WHERE kosul: Bir tablodan veri çekmek için kullanılır. SELECT sonrasında belirtilen sütunlar, sorgunun döndüreceği verileri belirler. Tüm sütunları seçmek için * kullanılabilir. FROM, verinin hangi tablodan çekileceğini gösterir. WHERE anahtar kelimesi, belirli koşulları karşılayan satırları filtrelemek için kullanılır.
UPDATE tablo_adi SET sutun1 = yeni_deger1, ... WHERE kosul: Bir tablodaki mevcut verileri güncellemek için kullanılır. SET anahtar kelimesi, hangi sütunların hangi yeni değerlerle güncelleneceğini belirtir. WHERE koşulu, hangi satırların etkileneceğini belirler; bu koşul olmadan tüm satırlar güncellenir.
DELETE FROM tablo_adi WHERE kosul: Bir tablodan veri silmek için kullanılır. WHERE koşulu, hangi satırların silineceğini belirler; bu koşul olmadan tablodaki tüm satırlar silinir.
Aşağıdaki örnekler, yukarıda açıklanan temel SQL komutlarının gerçek dünya senaryolarında nasıl kullanıldığını göstermektedir. Bu örnekler, bir "Calisanlar" tablosu üzerinden ilerleyecektir.
Örnek 1: Veritabanı ve Tablo Oluşturma
Öncelikle, bir veritabanı ve içinde çalışan bilgilerini tutacak bir tablo oluşturalım. Bu tablo, çalışan ID'si, adı, soyadı, departmanı ve maaşı gibi temel bilgileri içerecektir.
-- "SirketDB" adında bir veritabanı oluşturma
CREATE DATABASE SirketDB;
-- Oluşturulan veritabanını kullanmak için (çoğu SQL istemcisinde gereklidir)
USE SirketDB;
-- "Calisanlar" tablosunu oluşturma
CREATE TABLE Calisanlar (
    CalisanID INT PRIMARY KEY,
    Ad VARCHAR(50) NOT NULL,
    Soyad VARCHAR(50) NOT NULL,
    Departman VARCHAR(50),
    Maas DECIMAL(10, 2)
);
Örnek 2: Veri Ekleme
Şimdi "Calisanlar" tablosuna birkaç çalışan kaydı ekleyelim.
INSERT INTO Calisanlar (CalisanID, Ad, Soyad, Departman, Maas)
VALUES (101, 'Ahmet', 'Yılmaz', 'IT', 75000.00);
INSERT INTO Calisanlar (CalisanID, Ad, Soyad, Departman, Maas)
VALUES (102, 'Ayşe', 'Demir', 'İK', 60000.00);
INSERT INTO Calisanlar (CalisanID, Ad, Soyad, Departman, Maas)
VALUES (103, 'Mehmet', 'Can', 'IT', 80000.00);
INSERT INTO Calisanlar (CalisanID, Ad, Soyad, Departman, Maas)
VALUES (104, 'Zeynep', 'Kaya', 'Finans', 70000.00);
Örnek 3: Veri Seçme
Tablodaki tüm çalışanları listelemek, belirli bir departmandaki çalışanları veya belirli bir maaşın üzerindeki çalışanları seçmek için SELECT komutunu kullanalım.
-- Tüm çalışanları ve bilgilerini seçme
SELECT *
FROM Calisanlar;
-- Sadece IT departmanındaki çalışanların adını ve soyadını seçme
SELECT Ad, Soyad
FROM Calisanlar
WHERE Departman = 'IT';
-- Maaşı 70000'den yüksek olan çalışanları seçme
SELECT CalisanID, Ad, Maas
FROM Calisanlar
WHERE Maas > 70000;
Örnek 4: Veri Güncelleme
Bir çalışanın maaşını veya departmanını güncellemek için UPDATE komutunu kullanalım.
-- Ahmet Yılmaz'ın maaşını 80000 olarak güncelleme
UPDATE Calisanlar
SET Maas = 80000.00
WHERE CalisanID = 101;
-- Zeynep Kaya'nın departmanını 'Muhasebe' olarak güncelleme
UPDATE Calisanlar
SET Departman = 'Muhasebe'
WHERE CalisanID = 104;
Örnek 5: Veri Silme
Bir çalışanı tablodan silmek için DELETE FROM komutunu kullanalım.
-- Ayşe Demir'i tablodan silme
DELETE FROM Calisanlar
WHERE CalisanID = 102;
-- Tüm IT departmanı çalışanlarını silme (DİKKAT: Bu komut geri alınamaz!)
-- DELETE FROM Calisanlar WHERE Departman = 'IT';
Büyük/Küçük Harf Duyarlılığı: SQL komutları genellikle büyük/küçük harfe duyarlı değildir (SELECT, select veya Select aynıdır). Ancak, bazı veritabanı sistemlerinde tablo ve sütun adları büyük/küçük harfe duyarlı olabilir. En iyi uygulama, tutarlı bir adlandırma stratejisi izlemektir.
Noktalı Virgül: Çoğu SQL veritabanı yönetim sistemi, her SQL ifadesinin sonunda noktalı virgül (;) kullanılmasını gerektirir veya bunu iyi bir uygulama olarak kabul eder. Bu, birden fazla ifadenin tek bir komut bloğunda çalıştırılmasını sağlar.
WHERE Koşulunun Önemi: UPDATE ve DELETE komutlarını kullanırken WHERE koşulunu dikkatlice belirtmek çok önemlidir. WHERE koşulu olmadan bu komutlar, tablodaki tüm satırları etkileyecektir, bu da istenmeyen veri kaybına yol açabilir.
Veri Tipleri: Tablo oluştururken doğru veri tiplerini seçmek, verilerin doğru şekilde saklanmasını ve performansın optimize edilmesini sağlar. Örneğin, metin verileri için VARCHAR, tam sayılar için INT, ondalıklı sayılar için DECIMAL veya FLOAT kullanılır.
Yorumlar: SQL kodunda yorum satırları eklemek, kodun okunabilirliğini artırır. Tek satırlık yorumlar için --, çok satırlık yorumlar için /* ... */ kullanılır.
                CSS (Cascading Style Sheets) içerisinde, web sayfalarındaki HTML elementlerini hedeflemek ve bu elementlere stil kuralları uygulamak için kullanılan temel mekanizma seçiciler (selectors) olarak adlandırılır. Seçiciler, belirli bir kritere uyan bir veya daha fazla elementi seçmek için güçlü ve esnek yöntemler sunar. Bu doküman, CSS seçicilerinin sözdizimini, çeşitli türlerini ve pratik kullanım örneklerini detaylı bir şekilde açıklamaktadır.
Bir CSS kural seti, bir seçici ve bir bildirim bloğundan oluşur. Temel sözdizimi aşağıdaki gibidir:
selector {
    property: value;
    property: value;
}Burada;
selector: Stil kurallarının uygulanacağı HTML elementini veya elementlerini belirler.
property: Uygulanacak stilin özelliğini (örneğin, color, font-size, margin) tanımlar.
value: Özelliğe atanacak değeri (örneğin, red, 16px, 10px) belirtir.
CSS seçicileri, elementleri farklı kriterlere göre hedeflemek için çeşitli türlerde mevcuttur:
Belirli bir HTML element tipini seçer. Örneğin, tüm  elementlerini hedeflemek için kullanılır.
p {
    color: blue;
}Belirli bir elementin id özelliğini kullanarak tek bir elementi hedefler. ID'ler bir sayfada benzersiz olmalıdır ve seçici # karakteri ile başlar.
#ana-baslik {
    font-size: 24px;
}Birden fazla elemente uygulanabilen bir sınıfı hedefler. Seçici . karakteri ile başlar.
.vurgulu-metin {
    font-weight: bold;
}Sayfadaki tüm HTML elementlerini seçer. * karakteri ile temsil edilir.
* {
    margin: 0;
    padding: 0;
}Belirli bir HTML niteliğine sahip veya belirli bir nitelik değerine sahip elementleri seçer.
[attribute]: Belirtilen niteliğe sahip tüm elementleri seçer (örneğin, [title]).
[attribute="value"]: Belirtilen niteliğe ve değere sahip elementleri seçer (örneğin, [type="text"]).
[attribute~="value"]: Niteliğin değer listesinde belirtilen kelimeyi içeren elementleri seçer (boşlukla ayrılmış kelimeler için).
[attribute^="value"]: Niteliğin değeri belirtilen dize ile başlayan elementleri seçer.
[attribute$="value"]: Niteliğin değeri belirtilen dize ile biten elementleri seçer.
[attribute*="value"]: Niteliğin değeri belirtilen dizeyi herhangi bir yerinde içeren elementleri seçer.
a[target="_blank"] {
    color: green;
}Elementlerin belirli bir durumunu veya konumunu hedef alır. Örneğin, bir bağlantının üzerine gelindiğinde (:hover) veya bir listenin ilk elemanı (:first-child).
a:hover {
    text-decoration: underline;
}
li:first-child {
    font-weight: bold;
}Bir elementin belirli bir bölümünü stilize etmek için kullanılır. Genellikle :: çift iki nokta üst üste ile belirtilir (örneğin, ::before, ::after, ::first-line, ::first-letter).
p::first-line {
    font-variant: small-caps;
}İki veya daha fazla seçiciyi birleştirerek elementler arasındaki ilişkileri (ebeveyn-çocuk, kardeş vb.) temel alarak daha karmaşık seçimler yapmayı sağlar.
Torun Seçici (Descendant Selector) (boşluk): Bir elementin içindeki (torunu olan) tüm elementleri seçer. Örnek: div p.
Çocuk Seçici (Child Selector) (>): Bir elementin doğrudan çocuğu olan elementleri seçer. Örnek: div > p.
Bitişik Kardeş Seçici (Adjacent Sibling Selector) (+): Aynı ebeveyn elementine sahip olan ve ilk elementten hemen sonra gelen ikinci elementi seçer. Örnek: div + p.
Genel Kardeş Seçici (General Sibling Selector) (~): Aynı ebeveyn elementine sahip olan ve ilk elementten sonra gelen tüm ikinci elementleri seçer. Örnek: div ~ p.
div p { /* div içindeki tüm p etiketleri */
    margin-bottom: 10px;
}
ul > li { /* ul'nin doğrudan çocukları olan li etiketleri */
    list-style-type: square;
}Aşağıdaki örnekler, farklı seçici türlerinin nasıl kullanıldığını göstermektedir:
HTML:
Makale Başlığı
Bu, makalenin giriş paragrafıdır.
Bu ise normal bir paragraftır.
Bu da bir span etiketi.CSS:
#ana-baslik {
    color: #333;
    text-align: center;
}
.giris-paragrafi {
    font-style: italic;
    color: #555;
}
p {
    line-height: 1.6;
}HTML:
Bu, container dışındaki bir paragraf.
CSS:
.container p { /* .container içindeki tüm p etiketleri */
    border-left: 3px solid blue;
    padding-left: 10px;
}
.container ul > li:first-child { /* .container içindeki ul'nin ilk li çocuğu */
    background-color: lightyellow;
}
a:hover { /* Tüm a etiketlerinin üzerine gelindiğinde */
    color: red;
    text-decoration: none;
}Özgüllük (Specificity): Birden fazla CSS kuralı aynı elementi hedeflediğinde, daha özgül (specific) olan seçici kazanır. ID seçiciler sınıf seçicilerden, sınıf seçiciler ise tip seçicilerden daha özgüldür.
Performans: En performanslı seçiciler ID ve sınıf seçicilerdir. Evrensel seçiciler (*) ve torun seçiciler (div p) tarayıcılar için daha fazla işlem maliyeti getirebilir.
Seçici Zincirleme: Aynı elemente birden fazla seçici uygulayabilirsiniz. Örneğin, p.warning hem  etiketi hem de warning sınıfına sahip elementleri seçer.
Grup Seçiciler: Aynı stil kurallarını birden fazla seçiciye uygulamak için virgül (,) kullanarak seçicileri gruplayabilirsiniz. Örnek: h1, h2, h3 { color: navy; }.
!important Kullanımından Kaçınma: Özgüllük sorunlarını çözmek için !important kullanmak, CSS kodunuzu yönetmeyi zorlaştırır ve genellikle kötü bir pratik olarak kabul edilir. Daha iyi bir seçici veya daha iyi bir mimari tercih edilmelidir.
                JavaScript, dinamik ve esnek bir programlama dili olarak, veri depolama ve işleme yeteneklerini değişkenler aracılığıyla sunar. Bir değişken (variable), bellekte bir değeri tutmak için kullanılan sembolik bir isim veya bir kapsayıcıdır. Bu değer, programın yürütülmesi sırasında değiştirilebilir. JavaScript'te değişkenler, programın karmaşıklığını yönetmek, verileri geçici olarak saklamak ve daha okunabilir kod yazmak için temel bir yapıdır. Bu makale, JavaScript'teki değişkenlerin tanımını, farklı bildirim yöntemlerini ve en iyi uygulama prensiplerini detaylı bir şekilde ele almaktadır.
Bir değişken, bir programa ait verileri depolamak için kullanılan ve bellekte belirli bir konumu temsil eden bir isimdir. JavaScript'te bir değişken bildirildiğinde, bu değişkene bir değer atanabilir. Atanan değerin türü (sayı, metin, boolean vb.) çalışma zamanında dinamik olarak belirlenir ve aynı değişkenin değeri ve hatta türü programın farklı noktalarında değiştirilebilir.
JavaScript'te değişken tanımlamak için üç anahtar kelime kullanılır:
var: ES6 öncesinde kullanılan geleneksel yöntem.
let: ES6 ile tanıtılan, blok kapsamlı değişken bildirimi.
const: ES6 ile tanıtılan, blok kapsamlı ve sabit (değeri değiştirilemez) değişken bildirimi.
JavaScript'te bir değişken bildirmenin genel sözdizimi aşağıdaki gibidir:
anahtar_kelime değişken_adı = değer;Bu sözdizimindeki her bir parçanın anlamı şunlardır:
anahtar_kelime: Değişkenin nasıl davranacağını (kapsam, yeniden atama/bildirim yeteneği) belirleyen var, let veya const anahtar kelimelerinden biridir.
değişken_adı: Değişkeni tanımlayan benzersiz bir isimdir. JavaScript değişken adlandırma kurallarına uymalıdır.
=: Atama operatörüdür. Değişkenin sağındaki değeri solundaki değişkene atar.
değer: Değişkene atanan veridir (sayı, metin, boolean, nesne vb.). Değişken bildirimi sırasında bir değer atanması isteğe bağlıdır, ancak const için zorunludur.
;: İfadenin sonunu belirtir. JavaScript'te genellikle isteğe bağlıdır (otomatik noktalı virgül ekleme - ASI), ancak kodun okunabilirliği ve potansiyel hataları önlemek için kullanılması önerilir.
var Anahtar Kelimesivar ile bildirilen değişkenler, fonksiyon kapsamlıdır (function-scoped). Bu, değişkenin bildirildiği fonksiyonun tamamında erişilebilir olduğu anlamına gelir. Eğer bir fonksiyon dışında bildirilirse, global kapsamlı olur. var ile bildirilen değişkenler yeniden bildirilebilir ve yeniden atanabilir. Ayrıca, hoisting (yukarı taşınma) özelliğine sahiptirler; yani bildirimleri kodun en üstüne taşınır, ancak değer atamaları yerinde kalır. Bu durum, beklenmedik davranışlara yol açabilir.
function ornekVarKullanimi() {
    var sayi = 10;
    console.log(sayi); // 10
    if (true) {
        var sayi = 20; // Yeniden bildirim ve atama (fonksiyon kapsamlı)
        console.log(sayi); // 20
    }
    console.log(sayi); // 20 (if bloğunun dışından da erişilebilir ve değeri değişmiş)
    var sayi = 30; // Tekrar bildirim yapılabilir
    console.log(sayi); // 30
}
ornekVarKullanimi();
console.log(mesaj); // undefined (hoisting nedeniyle hata vermez, ama değer atanmamış)
var mesaj = "Merhaba Dünya";
console.log(mesaj); // Merhaba Dünyalet Anahtar Kelimesilet ile bildirilen değişkenler, blok kapsamlıdır (block-scoped). Bu, değişkenin sadece bildirildiği kod bloğu ({} ile tanımlanmış her yer; if, for, while veya fonksiyon bloğu) içinde erişilebilir olduğu anlamına gelir. let ile aynı isimde bir değişkeni aynı kapsamda yeniden bildirmek mümkün değildir, ancak değeri yeniden atanabilir. let de hoisting'e tabidir, ancak "Temporal Dead Zone" (TDZ) adı verilen bir mekanizma nedeniyle bildirimden önce erişilirse hata verir.
function ornekLetKullanimi() {
    let ad = "Ali";
    console.log(ad); // Ali
    if (true) {
        let ad = "Veli"; // Farklı bir 'ad' değişkeni (blok kapsamlı)
        console.log(ad); // Veli
    }
    console.log(ad); // Ali (if bloğunun dışındaki 'ad' değişmedi)
    // let ad = "Ayşe"; // SyntaxError: 'ad' already been declared
    ad = "Ayşe"; // Yeniden atama yapılabilir
    console.log(ad); // Ayşe
}
ornekLetKullanimi();
// console.log(deneme); // ReferenceError: Cannot access 'deneme' before initialization (TDZ nedeniyle)
let deneme = "Test";const Anahtar Kelimesiconst ile bildirilen değişkenler de let gibi blok kapsamlıdır. En önemli farkı, bir kez değer atandıktan sonra bu değerin değiştirilememesidir. Yani, const ile bildirilen bir değişkene yeniden atama yapılamaz ve aynı isimle yeniden bildirim yapılamaz. const ile bir değişken bildirildiğinde, başlangıç değeri hemen atanmak zorundadır. Nesneler ve diziler için const kullanıldığında, değişkenin referansı sabittir, ancak nesnenin veya dizinin içindeki elemanlar değiştirilebilir.
function ornekConstKullanimi() {
    const PI = 3.14;
    console.log(PI); // 3.14
    // PI = 3.14159; // TypeError: Assignment to constant variable.
    // const PI = 3.0; // SyntaxError: 'PI' has already been declared
    if (true) {
        const SABIT_METIN = "Merhaba";
        console.log(SABIT_METIN); // Merhaba
    }
    // console.log(SABIT_METIN); // ReferenceError: SABIT_METIN is not defined (blok kapsamlı)
    const ayarlar = {
        tema: "koyu"
    };
    ayarlar.tema = "açık"; // Nesnenin içeriği değiştirilebilir
    console.log(ayarlar.tema); // açık
    // ayarlar = { tema: "mavi" }; // TypeError: Assignment to constant variable. (referans değiştirilemez)
}
ornekConstKullanimi();Aşağıdaki örnekler, farklı değişken bildirim yöntemlerinin gerçek dünya senaryolarında nasıl kullanılabileceğini göstermektedir.
// Örnek 1: Basit Değişken Atamaları
let kullaniciAdi = "john.doe"; // Değişebilir bir kullanıcı adı
const vergiOrani = 0.18;      // Sabit bir vergi oranı
var eskiSistemID = "A123";    // Eski sistemlerde var kullanımı
console.log(`Kullanıcı Adı: ${kullaniciAdi}`);    // Kullanıcı Adı: john.doe
console.log(`Vergi Oranı: ${vergiOrani}`);        // Vergi Oranı: 0.18
kullaniciAdi = "jane.doe"; // let ile bildirilen değer değiştirilebilir
console.log(`Yeni Kullanıcı Adı: ${kullaniciAdi}`); // Yeni Kullanıcı Adı: jane.doe
// vergiOrani = 0.20; // Hata verir: Assignment to constant variable.
// Örnek 2: Döngülerde let kullanımı
for (let i = 0; i < 3; i++) {
    console.log(`Döngü içindeki i: ${i}`); // 0, 1, 2
}
// console.log(i); // Hata verir: i is not defined (let blok kapsamlıdır)
for (var j = 0; j < 3; j++) {
    console.log(`Döngü içindeki j: ${j}`); // 0, 1, 2
}
console.log(`Döngü dışındaki j: ${j}`); // Döngü dışındaki j: 3 (var fonksiyon/global kapsamlıdır)
// Örnek 3: Nesne ve Dizi ile const
const kullaniciBilgileri = {
    isim: "Mehmet",
    yas: 30,
    aktif: true
};
kullaniciBilgileri.yas = 31; // Nesnenin özelliği değiştirilebilir
kullaniciBilgileri.sehir = "Ankara"; // Yeni özellik eklenebilir
console.log(kullaniciBilgileri); // { isim: 'Mehmet', yas: 31, aktif: true, sehir: 'Ankara' }
// kullaniciBilgileri = { isim: "Ayşe" }; // Hata verir: Assignment to constant variable. (referans değiştirilemez)
const sayilar = [1, 2, 3];
sayilar.push(4); // Diziye eleman eklenebilir
console.log(sayilar); // [1, 2, 3, 4]
// sayilar = [5, 6]; // Hata verir: Assignment to constant variable. (referans değiştirilemez)Adlandırma Kuralları: Değişken adları harf, sayı, alt çizgi (_) veya dolar işareti ($) ile başlayabilir. Sayı ile başlayamazlar. JavaScript anahtar kelimeleri (function, if, for vb.) değişken adı olarak kullanılamaz. Genellikle camelCase (kullaniciAdi) tercih edilir.
let ve const Kullanımı: Modern JavaScript geliştirmesinde, var yerine let ve const kullanılması şiddetle tavsiye edilir. Bu, kodun daha öngörülebilir olmasını sağlar, kapsam hatalarını azaltır ve "Temporal Dead Zone" sayesinde bildirim öncesi erişimi engeller.
const ile Sabit Referans: Bir değişkeni const ile bildirmek, o değişkenin değerinin sabit olduğu anlamına gelmez, referansının sabit olduğu anlamına gelir. İlkel tipler (sayı, metin, boolean) için bu aynı anlama gelirken, nesne ve diziler için referans sabittir ancak içindeki özellikler veya elemanlar değiştirilebilir.
Bildirim Olmadan Atama: Strict mode ("use strict";) kullanılmadığında, bir değişkeni var, let veya const olmadan doğrudan atamak mümkündür (x = 5;). Bu, otomatik olarak global bir değişken oluşturur ve genellikle kötü bir pratiktir, hatalara yol açabilir. Her zaman değişkenlerinizi bildirin.
Hoisting ve TDZ: var ile bildirilen değişkenler, kodun en üstüne taşınır ve başlangıç değeri undefined olarak atanır. let ve const de hoisting'e tabidir ancak "Temporal Dead Zone" (TDZ) nedeniyle bildirimden önce erişilemezler, bu da daha güvenli bir kullanım sunar.
                SQL (Structured Query Language), veritabanlarını yönetmek ve sorgulamak için kullanılan standart bir dildir. Bu dilin etkin bir şekilde kullanılabilmesi için temel sözdizimi kurallarının anlaşılması kritik öneme sahiptir. Sözdizimi, bir dilin komutlarını, ifadelerini ve yapılarını doğru bir şekilde oluşturmak için izlenmesi gereken kurallar bütünüdür. Bu kılavuz, SQL dilinin temel sözdizimi yapısını, bileşenlerini ve pratik kullanım örneklerini detaylı bir şekilde açıklayacaktır.
SQL ifadeleri genellikle bir anahtar kelimeyle başlar, ardından belirli parametreler ve koşullar gelir. En yaygın sözdizimi kalıbı aşağıdaki gibidir:
SELECT [DISTINCT] kolon1, kolon2, ...
FROM tablo_adı
WHERE koşul
GROUP BY kolon
HAVING koşul
ORDER BY kolon [ASC|DESC];Bu genel yapı, çoğu SQL sorgusunun temelini oluşturur. Her bir bileşen, belirli bir amaca hizmet eder ve sorgunun nasıl yürütüleceğini belirler.
SELECT: SELECT ifadesi, veritabanından veri almak için kullanılır. Hangi sütunların döndürüleceğini belirtirsiniz.
[DISTINCT]: DISTINCT anahtar kelimesi, seçilen sütunlardaki yinelenen değerleri ortadan kaldırarak yalnızca benzersiz değerlerin döndürülmesini sağlar. Köşeli parantezler, bu kısmın isteğe bağlı olduğunu gösterir.
kolon1, kolon2, ...: Seçilecek sütunların adlarıdır. Tüm sütunları seçmek için * karakteri kullanılabilir.
FROM tablo_adı: FROM ifadesi, verilerin hangi tablodan çekileceğini belirtir.
WHERE koşul: WHERE yan tümcesi, belirli bir koşulu karşılayan satırları filtrelemek için kullanılır. Bu, sorgunun döndüreceği veri kümesini daraltır.
GROUP BY kolon: GROUP BY yan tümcesi, aynı değere sahip satırları belirtilen sütunlara göre gruplar. Genellikle toplama fonksiyonlarıyla (COUNT, SUM, AVG vb.) birlikte kullanılır.
HAVING koşul: HAVING yan tümcesi, GROUP BY ile oluşturulan grupları filtrelemek için kullanılır. WHERE koşuluna benzer, ancak gruplar üzerinde çalışır.
ORDER BY kolon [ASC|DESC]: ORDER BY yan tümcesi, sonuç kümesini belirtilen sütuna göre artan (ASC - varsayılan) veya azalan (DESC) sırada sıralar.
;: Çoğu SQL veritabanında, bir SQL ifadesinin sonunu belirtmek için noktalı virgül (;) kullanılır. Bu, birden fazla ifadenin aynı anda çalıştırılmasını kolaylaştırır ve iyi bir pratiktir.
Aşağıdaki örnekler, yukarıda açıklanan sözdizimi bileşenlerinin nasıl kullanıldığını göstermektedir:
Örnek 1: Tüm Verileri Seçme
Bir tablodaki tüm sütunları ve satırları seçmek için SELECT * kullanılır.
SELECT *
FROM Calisanlar;Örnek 2: Belirli Sütunları Seçme
Yalnızca belirli sütunları seçmek için sütun adlarını virgülle ayırarak belirtin.
SELECT Ad, Soyad, Maas
FROM Calisanlar;Örnek 3: Koşullu Veri Seçimi (WHERE)
WHERE yan tümcesini kullanarak belirli bir koşulu karşılayan satırları filtreleyebilirsiniz.
SELECT Ad, Soyad
FROM Calisanlar
WHERE DepartmanID = 3;Örnek 4: Gruplama ve Toplama (GROUP BY, COUNT)
Departmanlara göre çalışan sayısını bulmak için GROUP BY ve COUNT fonksiyonunu kullanın.
SELECT DepartmanID, COUNT(CalisanID) AS ToplamCalisan
FROM Calisanlar
GROUP BY DepartmanID;Örnek 5: Grupları Filtreleme (HAVING)
Yukarıdaki örnekte, sadece 2'den fazla çalışanı olan departmanları listelemek için HAVING kullanılır.
SELECT DepartmanID, COUNT(CalisanID) AS ToplamCalisan
FROM Calisanlar
GROUP BY DepartmanID
HAVING COUNT(CalisanID) > 2;Örnek 6: Sıralama (ORDER BY)
Çalışanları maaşlarına göre azalan sırada sıralamak için ORDER BY kullanın.
SELECT Ad, Soyad, Maas
FROM Calisanlar
ORDER BY Maas DESC;Büyük/Küçük Harf Duyarlılığı: SQL anahtar kelimeleri genellikle büyük/küçük harf duyarlı değildir (örneğin, SELECT ve select aynıdır). Ancak, tablo ve sütun adları, kullandığınız veritabanı sistemine (örneğin, MySQL varsayılan olarak Linux'ta duyarlıdır) ve yapılandırmasına göre duyarlı olabilir. En iyi uygulama, tutarlı bir adlandırma stratejisi izlemektir.
Noktalı Virgül Kullanımı: Birçok veritabanı yönetim sistemi (DBMS), her SQL ifadesinin sonunda noktalı virgül (;) kullanılmasını gerektirir veya bunu iyi bir uygulama olarak teşvik eder. Bu, birden fazla ifadeyi tek bir sorguda çalıştırmanıza olanak tanır.
Okunabilirlik: Büyük ve karmaşık sorguları daha anlaşılır hale getirmek için girintileme ve boşluk kullanımı önemlidir. Ayrıca, sorgularınıza açıklama eklemek için -- Bu bir yorumdur (tek satır) veya /* Bu birden fazla satırlık bir yorumdur */ (çoklu satır) kullanabilirsiniz.
Güvenlik (SQL Injection): Kullanıcı girdilerini doğrudan SQL sorgularına eklemek yerine, parametreli sorgular veya hazır ifadeler (prepared statements) kullanarak SQL injection saldırılarına karşı önlem alın. Bu, veritabanı güvenliği için kritik bir adımdır.
Performans: Büyük veritabanlarında sorgu performansını optimize etmek için doğru indeksleme, sorgu planlarını anlama ve gereksiz veri çekmekten kaçınma gibi konulara dikkat edin. WHERE ve JOIN koşullarının etkinliği performansı doğrudan etkiler.
                Günümüz dijital dünyasında, evden veya istediğiniz yerden ek gelir elde etmenin pek çok yolu var. Bu yollardan biri de, belki de en kolay ve risksiz olanı: internetten anket doldurarak para kazanmak. "Anket doldurarak mı?" diye şaşırmış olabilirsiniz. Evet, doğru duydunuz! Piyasada ürün ve hizmetlerini geliştirmek isteyen şirketler, sizin gibi gerçek tüketicilerin fikirlerine paha biçilmez değer veriyor. Peki, 2025 yılında bu sistem gerçekten işe yarıyor mu? Ne kadar kazanabilirsiniz? Hangi platformlar güvenilir?
Bu makalede, internetten anket doldurarak para kazanma konusundaki tüm merak ettiklerinizi giderecek, size bu alandaki en güncel ve doğru bilgileri sunacağım. Hazırsanız, gelin birlikte bu ek gelir kapısını aralayalım!
Online anketler, pazar araştırma şirketleri tarafından tüketicilerin belirli ürünler, hizmetler veya genel konulardaki görüşlerini toplamak amacıyla oluşturulan dijital soru setleridir. Şirketler, yeni bir ürün piyasaya sürmeden önce veya mevcut bir ürününü geliştirirken, hedef kitlelerinin ne düşündüğünü bilmek isterler. İşte burada devreye siz giriyorsunuz!
Sizin değerli geri bildirimleriniz, şirketlerin stratejik kararlar almasına yardımcı olur. Bu bilgilerin değeri o kadar büyüktür ki, şirketler bu geri bildirimleri toplamak için pazar araştırma firmalarına ödeme yapar. Pazar araştırma firmaları da, anketleri dolduran kişilere (yani size) belirli bir miktar para veya hediye kartı şeklinde bir teşvik sunar. Kısacası, fikirleriniz şirketler için altın değerindedir ve bu değeri size geri ödemeye hazırdırlar.
Anket doldurarak zengin olacağınızı söylemek gerçekçi olmaz. Ancak, düzenli ve stratejik bir yaklaşımla, aylık cebinize hatırı sayılır bir ek gelir koyabilirsiniz. Kazancınız, katıldığınız anketlerin sayısına, süresine, karmaşıklığına ve tabii ki kullandığınız platformlara göre değişiklik gösterir.
Genel olarak, bir anketten kazanacağınız miktar 0.50$ ile 5$ arasında değişebilir. Bazı özel veya uzun anketler 10$ veya daha fazla ödeme yapabilir. Günde birkaç anket doldurarak ayda 50$ ile 200$ arasında bir ek gelir elde etmek oldukça mümkündür. Bu, faturalara destek olmak, küçük harcamaları karşılamak veya birikim yapmak için harika bir yoldur.
Piyasada yüzlerce anket sitesi bulunuyor, ancak hepsi güvenilir veya kazançlı değil. İşte size 2025 yılında öne çıkan, kullanıcılar tarafından beğenilen ve ödeme konusunda sorun yaşatmayan bazı güvenilir platformlar:
Sadece kaydolmak yeterli değil. İşte kazancınızı artırmak için uygulayabileceğiniz bazı stratejiler:
Her ek gelir yönteminde olduğu gibi, anket doldurmanın da kendine göre avantajları ve dezavantajları vardır:
Bu sorunun cevabı, beklentilerinize ve ne kadar zaman ayırmak istediğinize bağlıdır. Eğer amacınız hızlı ve kolay yoldan zengin olmaksa, online anketler sizin için doğru adres değildir. Ancak, ayda birkaç yüz liralık ek gelir elde etmek, boş zamanlarınızı verimli değerlendirmek ve fikirlerinizle katkıda bulunmak istiyorsanız, evet, kesinlikle değer!
Unutmayın, bu bir maraton değil, sprint. Düzenli ve sabırlı bir yaklaşımla, internetten anket doldurarak cebinize anlamlı bir katkı sağlayabilirsiniz. 2024 yılında da bu yöntem, dijital ek gelir kapıları arasında sağlam bir yerini koruyor. Başarılar dilerim!
2025 © Tüm Hakları Saklıdır.