“ Söz konusu olan vatansa, gerisi teferruat. ”
Mustafa K. Atatürk
Yükleniyor...
01

Ultra İşlenmiş Gıdaların Gizli Faydaları: Her Şey Kötü Mü?

Beslenme dünyasında ultra işlenmiş gıdalar (UİG'ler) genellikle şeytanlaştırılır. Haklı olarak da...

avatar Emin
02

JavaScript Sınıfları (Classes) Kullanım Rehberi

JavaScript, ES6 (ECMAScript 2015) ile birlikte nesne yönelimli programlama (OOP) ilkelerini daha ...

avatar Emin
03

JavaScript Dilinde Temel Sözdizimi (Syntax) Kullanımı

JavaScript, web geliştirmenin temel taşlarından biridir ve bu dilin gücünü tam olarak kullanabilm...

avatar Emin
04

Tarihe Geçen İlk Yüz: Televizyona Çıkan İlk İnsan Kimdi?

Her gün keyifle izlediğimiz, haberleri takip ettiğimiz, yeni dünyalara yelken açtığımız televizyo...

avatar Emin
05

Python Dilinde Değişkenlerin Kullanımı

Programlamada veriyi depolamanın ve yönetmenin temel yolu değişkenlerdir. Python dilinde de değiş...

avatar Emin
Son Yazılanlar
SQL Makaleleri
sql-dilinde-left-join-kullanimi
SQL Dilinde LEFT JOIN Kullanımı
SQL veritabanlarında, farklı tablolar arasında ilişkisel veri kümelerini birleştirmek temel bir işlemdir. LEFT JOIN (sol dış birleşim) işlemi, iki veya daha fazla tabloyu belirli bir koşul üzerinden birleştirirken, sol tablodaki tüm kayıtları, sağ tablodaki eşleşen kayıtlarla birlikte döndürür. Sağ tabloda eşleşme bulunamayan durumlarda, sağ tablonun sütunları için NULL değerleri döndürülür. Bu makale, LEFT JOIN'in sözdizimini, detaylı açıklamasını ve pratik kullanım örneklerini sunmaktadır. Temel Sözdizimi LEFT JOIN komutunun genel sözdizimi aşağıdaki gibidir: SELECT     sutun1, sutun2, ... FROM     sol_tablo LEFT JOIN     sag_tablo ON     sol_tablo.eslesme_sutunu = sag_tablo.eslesme_sutunu;softmush.com Detaylı Açıklama SELECT sutun1, sutun2, ...: Sorgu sonucunda döndürülmesini istediğiniz sütunları belirtirsiniz. Bu sütunlar hem sol hem de sağ tablodan gelebilir. FROM sol_tablo: Birleşimin sol tarafında yer alacak ana tabloyu belirtir. Bu tablodaki tüm kayıtlar sonuç kümesine dahil edilecektir. LEFT JOIN sag_tablo: Birleşimin sağ tarafında yer alacak tabloyu belirtir. Sol tablodaki kayıtlarla eşleşen kayıtlar bu tablodan alınır. ON sol_tablo.eslesme_sutunu = sag_tablo.eslesme_sutunu: İki tablo arasındaki eşleşme koşulunu tanımlar. Bu koşul genellikle birincil anahtar (PRIMARY KEY) ve yabancı anahtar (FOREIGN KEY) ilişkisi üzerinden kurulur. Pratik Kullanım Örnekleri Aşağıdaki örneklerde, Musteriler ve Siparisler adında iki tablo kullandığımızı varsayalım. Musteriler tablosunda MusteriID, Ad, Soyad sütunları; Siparisler tablosunda ise SiparisID, MusteriID, SiparisTarihi, Tutar sütunları bulunmaktadır. Örnek 1: Tüm Müşterileri ve Varsa Siparişlerini Listeleme Bu sorgu, tüm müşterileri ve onların mevcut siparişlerini listeler. Eğer bir müşterinin hiç siparişi yoksa, Siparisler tablosuna ait sütunlar için NULL değerleri döndürülür. SELECT     M.MusteriID,     M.Ad,     M.Soyad,     S.SiparisID,     S.SiparisTarihi,     S.Tutar FROM     Musteriler AS M LEFT JOIN     Siparisler AS S ON M.MusteriID = S.MusteriID;softmush.com Örnek 2: Henüz Sipariş Vermemiş Müşterileri Bulma LEFT JOIN ile birlikte WHERE koşulu kullanarak, sağ tabloda eşleşme bulunamayan kayıtları filtreleyebiliriz. Bu örnekte, henüz sipariş vermemiş müşteriler listelenir. SELECT     M.MusteriID,     M.Ad,     M.Soyad FROM     Musteriler AS M LEFT JOIN     Siparisler AS S ON M.MusteriID = S.MusteriID WHERE     S.SiparisID IS NULL;softmush.com Örnek 3: Birden Fazla LEFT JOIN Kullanımı Birden fazla tabloyu birleştirmek için zincirleme LEFT JOIN kullanılabilir. Örneğin, müşterilerin siparişlerini ve bu siparişlerin detaylarını görmek isteyebiliriz. SiparisDetaylari adında bir üçüncü tablo olduğunu varsayalım. SELECT     M.Ad,     S.SiparisID,     SD.UrunAdi,     SD.Miktar FROM     Musteriler AS M LEFT JOIN     Siparisler AS S ON M.MusteriID = S.MusteriID LEFT JOIN     SiparisDetaylari AS SD ON S.SiparisID = SD.SiparisID;softmush.com Önemli Notlar Sol Tablo Önceliği: LEFT JOIN, sol tablonun tüm kayıtlarını garanti eder. Sağ tabloda eşleşme bulunmasa bile sol tablodaki kayıtlar sonuç kümesinde yer alır. NULL Değerleri: Sağ tabloda eşleşen kayıt bulunamadığında, sağ tablodaki sütunlar için NULL değerleri döndürülür. Bu durum, eşleşmeyen kayıtları filtrelemek (örneğin, WHERE sag_tablo.anahtar_sutun IS NULL kullanarak) için kullanılabilir. Performans Etkisi: Büyük tablolarda JOIN işlemleri performans üzerinde etkili olabilir. İndeksli sütunlar üzerinde birleştirme yapmak sorgu hızını artırır. Alias Kullanımı: Tablo isimleri için kısa takma adlar (AS M, AS S gibi) kullanmak, sorguyu daha okunaklı hale getirir ve yazım hatalarını azaltır. INNER JOIN ile Farkı: INNER JOIN yalnızca iki tabloda da eşleşen kayıtları döndürürken, LEFT JOIN sol tablonun tüm kayıtlarını döndürür ve sağ tablodaki eşleşmeyenler için NULL kullanır.
avatar
Emin
1
0
JavaScript Makaleleri
javascript-dilinde-html-dom-kullanimi-detayli-rehber
JavaScript Dilinde HTML DOM Kullanımı: Detaylı Rehber
Web sayfaları, tarayıcılar tarafından yüklenirken bir Belge Nesne Modeli (DOM) olarak yapılandırılır. Bu model, HTML belgesinin mantıksal yapısını temsil eder ve JavaScript'in web sayfasının içeriğine, yapısına ve stiline dinamik olarak erişmesini ve bunları değiştirmesini sağlayan bir API (Uygulama Programlama Arayüzü) sunar. Bu makale, JavaScript kullanarak HTML DOM ile nasıl etkileşim kuracağınızı, elementleri nasıl seçeceğinizi, içeriklerini ve stillerini nasıl değiştireceğinizi ve olayları nasıl yöneteceğinizi adım adım açıklayacaktır. Temel Sözdizimi JavaScript'in DOM ile etkileşim kurmasının temelinde, belgedeki HTML elementlerini seçmek ve ardından bu elementlerin özelliklerine veya metotlarına erişmek yatar. Aşağıdaki sözdizimleri, en yaygın DOM seçim ve manipülasyon yöntemlerini özetlemektedir: // Element seçimi document.getElementById("elementId"); document.getElementsByClassName("className"); document.getElementsByTagName("tagName"); document.querySelector("cssSelector"); document.querySelectorAll("cssSelector"); // Element özellikleri ve metotları element.innerHTML; element.textContent; element.style.propertyName; element.setAttribute("attributeName", "value"); element.classList.add("className"); element.addEventListener("eventName", functionHandler); document.createElement("tagName"); parentElement.appendChild(childElement); parentElement.removeChild(childElement);softmush.com Detaylı Açıklama document Nesnesi: DOM'a erişimin ana giriş noktasıdır. Tüm HTML belgesini temsil eder. Element Seçim Metotları: document.getElementById("elementId"): Belirtilen id niteliğine sahip tek bir elementi döndürür. id'ler bir sayfada benzersiz olmalıdır. document.getElementsByClassName("className"): Belirtilen sınıf adına sahip tüm elementleri içeren bir HTMLCollection döndürür. Canlı bir koleksiyondur, yani DOM'daki değişiklikler koleksiyonu otomatik olarak günceller. document.getElementsByTagName("tagName"): Belirtilen etiket adına sahip tüm elementleri içeren bir HTMLCollection döndürür. document.querySelector("cssSelector"): Belirtilen CSS seçici ile eşleşen belgedeki ilk elementi döndürür. document.querySelectorAll("cssSelector"): Belirtilen CSS seçici ile eşleşen tüm elementleri içeren bir NodeList döndürür. Statik bir koleksiyondur. Element Özellikleri ve Metotları: element.innerHTML: Bir elementin HTML içeriğini (alt elementler dahil) alır veya ayarlar. HTML etiketlerini yorumlar. element.textContent: Bir elementin ve tüm alt elementlerinin metin içeriğini alır veya ayarlar. HTML etiketlerini metin olarak ele alır. element.style.propertyName: Bir elementin CSS stil özelliklerine erişim sağlar. Örneğin, element.style.backgroundColor = "red";. element.setAttribute("attributeName", "value"): Bir elementin belirtilen niteliğini ayarlar veya günceller. Örneğin, element.setAttribute("href", "https://example.com");. element.classList: Bir elementin CSS sınıflarını yönetmek için bir dizi metot (add, remove, toggle, contains) sunar. element.addEventListener("eventName", functionHandler): Bir elemente olay dinleyicisi ekler. Örneğin, bir butona tıklama olayını dinlemek için "click" kullanılır. document.createElement("tagName"): Belirtilen etiket adıyla yeni bir HTML elementi oluşturur. parentElement.appendChild(childElement): Belirtilen bir çocuğu, belirtilen ana elementin son çocuğu olarak ekler. parentElement.removeChild(childElement): Belirtilen ana elementten belirtilen çocuğu kaldırır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, JavaScript'in DOM ile nasıl etkileşim kurduğunu göstermektedir. Örnek 1: Bir HTML Elementinin İçeriğini Güncelleme Bu örnekte, bir paragraf elementinin metin içeriği JavaScript ile değiştirilmektedir. Merhaba Dünya! // id'si "mesaj" olan elementi seç const mesajElementi = document.getElementById("mesaj"); // Elementin metin içeriğini değiştir mesajElementi.textContent = "JavaScript ile mesaj güncellendi!"; softmush.com Örnek 2: Bir Elementin Stilini Değiştirme Bu örnek, bir elementinin arka plan rengini ve yazı rengini değiştirmektedir. Bu bir kutu. // id'si "kutu" olan elementi seç const kutuElementi = document.getElementById("kutu"); // Elementin stilini değiştir kutuElementi.style.backgroundColor = "lightblue"; kutuElementi.style.color = "darkblue"; kutuElementi.style.padding = "10px"; softmush.com Örnek 3: Yeni Bir Element Oluşturma ve Ekleme Bu örnek, dinamik olarak yeni bir liste öğesi oluşturup mevcut bir listeye ekler. Mevcut Öğeler // id'si "liste" olan ul elementini seç const listeElementi = document.getElementById("liste"); // Yeni bir li elementi oluştur const yeniListeOgesi = document.createElement("li"); // Yeni öğeye metin içeriği ekle yeniListeOgesi.textContent = "JavaScript ile eklenen yeni öğe"; // Yeni öğeyi listeye ekle listeElementi.appendChild(yeniListeOgesi); softmush.com Örnek 4: Bir Olay Dinleyicisi Ekleme Bu örnek, bir butona tıklanma olayını dinler ve tıklandığında bir paragrafın içeriğini günceller. Bana Tıkla Henüz tıklanmadı. // id'si "dugme" olan butonu seç const dugme = document.getElementById("dugme"); // id'si "sonuc" olan paragrafı seç const sonucParagrafi = document.getElementById("sonuc"); // Butona tıklama olayı dinleyicisi ekle dugme.addEventListener("click", function() { sonucParagrafi.textContent = "Butona tıklandı!"; sonucParagrafi.style.color = "green"; }); softmush.com Önemli Notlar Betik Yerleşimi ve Yükleme: JavaScript kodunuzun HTML DOM elementlerine erişmeye çalışmadan önce, bu elementlerin tarayıcı tarafından yüklenmiş ve DOM'a eklenmiş olması gerekir. Bu genellikle etiketini etiketinin kapanışından hemen önce yerleştirerek veya defer/async niteliklerini kullanarak sağlanır. Alternatif olarak, document.addEventListener("DOMContentLoaded", function() { /* kodunuz */ }); kullanarak kodunuzun DOM tamamen yüklendikten sonra çalışmasını sağlayabilirsiniz. id Benzersizliği: document.getElementById() metodu için kullanılan id nitelikleri, HTML belgesi içinde benzersiz olmalıdır. Aynı id'ye sahip birden fazla element bulunması durumunda, metot yalnızca ilk eşleşeni döndürecektir. HTMLCollection ve NodeList: getElementsByClassName ve getElementsByTagName metotları HTMLCollection, querySelectorAll ise NodeList döndürür. Bu koleksiyonlar dizi benzeri nesnelerdir ancak tüm dizi metotlarına (map, filter vb.) doğrudan sahip değildirler. Üzerlerinde döngü kurmak için for...of veya Array.from().forEach() kullanabilirsiniz. Performans İpuçları: Kapsamlı DOM manipülasyonları performans maliyetli olabilir. Büyük değişiklikler yaparken, elementleri DOM'dan kaldırın, değişiklikleri yapın ve sonra tekrar ekleyin. Ayrıca, birden fazla stil değişikliği için element.style.cssText özelliğini kullanabilir veya CSS sınıflarını (classList) manipüle edebilirsiniz. Güvenlik (XSS): Kullanıcı girdilerini innerHTML ile doğrudan DOM'a eklerken dikkatli olun. Kötü niyetli kullanıcılar, bu yöntemle sitenize Cross-Site Scripting (XSS) saldırıları yapabilirler. Güvenliğiniz için genellikle textContent kullanmak veya girdileri sanitize etmek daha iyidir. null Kontrolü: DOM elementlerini seçerken, bazen elementin sayfada var olmayabileceği durumlar olabilir. Bu tür durumlarda, döndürülen değer null olacaktır. Kodunuzun beklenmedik hatalar vermesini önlemek için element üzerinde işlem yapmadan önce bir null kontrolü yapmak iyi bir pratiktir (örneğin, if (element) { ... }).
avatar
Emin
4
0
CSS Makaleleri
css-dilinde-hizalama-align-ozelliklerinin-kapsamli-kullanimi
CSS Dilinde Hizalama (Align) Özelliklerinin Kapsamlı Kullanımı
Web tasarımında estetik ve kullanıcı deneyimi açısından düzenli bir yerleşim, bir sayfanın başarısı için kritik öneme sahiptir. CSS (Cascading Style Sheets), öğelerin konumlandırılması ve hizalanması konusunda güçlü araçlar sunar. Bu kılavuz, metinlerden kutu modellere kadar çeşitli web öğelerini etkili bir şekilde hizalamak için kullanabileceğiniz CSS özelliklerini teknik bir yaklaşımla ele almaktadır. Sayfa düzeninizi optimize etmek ve görsel hiyerarşiyi güçlendirmek için bu özelliklerin nasıl kullanılacağını detaylı bir şekilde inceleyeceğiz. Temel Sözdizimi CSS'te hizalama işlemleri, genellikle bir seçiciye uygulanan özellik-değer çiftleri şeklinde ifade edilir. Hizalama özelliği, belirli bir bağlama veya kapsayıcıya göre öğenin konumunu belirler. Temel sözdizimi aşağıdaki gibidir: selector { alignment-property: value; } softmush.com Burada selector, stillerin uygulanacağı HTML öğesini veya öğe grubunu temsil eder. alignment-property, hizalama türünü belirleyen CSS özelliğidir (örneğin, text-align, justify-content) ve value ise bu hizalamanın nasıl gerçekleştirileceğini (örneğin, center, flex-start) tanımlar. Detaylı Açıklama CSS'te hizalama, farklı bağlamlarda çeşitli özellikler aracılığıyla sağlanır. İşte en yaygın kullanılan hizalama yöntemleri ve özellikleri: Metin ve Satır İçi Öğelerin Hizalanması (text-align):Bu özellik, bir blok öğesinin içindeki metni ve satır içi (inline) öğeleri yatay olarak hizalamak için kullanılır. Yaygın değerleri left, right, center ve justify'dir. Dikey Hizalama (vertical-align):inline, inline-block veya table-cell öğelerinin dikey hizalamasını kontrol eder. Genellikle metin ve ikonların aynı satırda dikey olarak hizalanmasında kullanılır. Değerleri arasında top, middle, bottom, baseline ve yüzde değerleri bulunur. Blok Öğeleri Yatay Ortalamak (margin: auto):Belirli bir genişliğe sahip blok seviyesi öğeleri (örneğin, ) yatay olarak ortalamak için margin-left ve margin-right özelliklerini auto olarak ayarlamak yaygın bir yöntemdir. Bu, genellikle margin: 0 auto; şeklinde kullanılır. Flexbox ile Hizalama:CSS Flexbox, öğeleri tek boyutlu bir eksen boyunca (yatay veya dikey) hizalamak için güçlü bir model sunar. justify-content: Ana eksen boyunca (varsayılan olarak yatay) öğelerin nasıl dağıtılacağını kontrol eder. Değerleri: flex-start, flex-end, center, space-between, space-around, space-evenly. align-items: Çapraz eksen boyunca (varsayılan olarak dikey) öğelerin nasıl hizalanacağını kontrol eder. Değerleri: flex-start, flex-end, center, stretch, baseline. align-self: Tek bir flex öğesinin çapraz eksendeki hizalamasını, kapsayıcının align-items değerini geçersiz kılarak ayarlar. CSS Grid ile Hizalama:CSS Grid, öğeleri iki boyutlu (hem yatay hem dikey) bir ızgara içinde hizalamak için tasarlanmıştır. justify-items: Bir grid kapsayıcısının içindeki öğelerin satır içi (inline) eksende nasıl hizalanacağını kontrol eder. Değerleri: start, end, center, stretch. align-items: Bir grid kapsayıcısının içindeki öğelerin blok (block) eksende nasıl hizalanacağını kontrol eder. Değerleri: start, end, center, stretch. place-items: align-items ve justify-items için bir kısaltmadır. justify-self: Tek bir grid öğesinin satır içi eksendeki hizalamasını, kapsayıcının justify-items değerini geçersiz kılarak ayarlar. align-self: Tek bir grid öğesinin blok eksendeki hizalamasını, kapsayıcının align-items değerini geçersiz kılarak ayarlar. place-self: align-self ve justify-self için bir kısaltmadır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, farklı hizalama senaryolarını göstermektedir. Metin Hizalama Bir paragraf içindeki metni ortalamak için text-align özelliği kullanılır. Bu metin ortalanmış olacaktır. softmush.com .centered-text { text-align: center; color: #333; font-size: 1.2em; } softmush.com Blok Öğeyi Yatay Ortalamak Belirli bir genişliğe sahip bir öğesini sayfa içinde yatay olarak ortalamak için margin: auto kullanılır. Bu blok öğe ortalanmıştır. softmush.com .centered-block { width: 60%; /* Ortalamak için genişlik gerekli */ margin: 0 auto; padding: 20px; background-color: #f0f0f0; border: 1px solid #ccc; text-align: center; /* İçindeki metni de ortalar */ } softmush.com Flexbox ile Öğeleri Ortalamak Bir kapsayıcı içindeki öğeleri hem yatay hem de dikey olarak ortalamak için Flexbox kullanılır. Ortalanmış Öğe softmush.com .flex-container { display: flex; justify-content: center; /* Yatayda ortala */ align-items: center; /* Dikeyde ortala */ height: 200px; /* Kapsayıcıya yükseklik verilmeli */ background-color: #e0f2f7; border: 1px solid #a7d9ed; } .flex-item { padding: 15px 30px; background-color: #007bff; color: white; font-weight: bold; border-radius: 5px; } softmush.com Grid ile Öğeleri Ortalamak Bir grid kapsayıcısındaki öğeyi veya öğeleri hem yatay hem de dikey olarak ortalamak için Grid özellikleri kullanılır. Ortalanmış Grid Öğe softmush.com .grid-container { display: grid; place-items: center; /* Hem yatay hem dikeyde ortalar */ height: 200px; /* Kapsayıcıya yükseklik verilmeli */ background-color: #e6ffe6; border: 1px solid #b3e6b3; } .grid-item { padding: 15px 30px; background-color: #28a745; color: white; font-weight: bold; border-radius: 5px; } softmush.com Önemli Notlar Bağlama Duyarlılık: Hizalama özellikleri, uygulandıkları kapsayıcının veya öğenin display özelliğine göre farklılık gösterir. Örneğin, text-align yalnızca blok seviyesi kapsayıcıların içindeki metin ve satır içi öğeler üzerinde etkilidir; bir blok öğeyi kendi başına ortalamaz. Genişlik Kısıtlaması: Bir blok öğeyi margin: auto; ile yatay olarak ortalamak için öğeye mutlaka bir genişlik (width) değeri atanmalıdır. Aksi takdirde, öğe tüm mevcut genişliği kaplayacak ve ortalanmayacaktır. Dikey Ortalamada Zorluklar: Geleneksel CSS yöntemleriyle (Flexbox veya Grid olmadan) dikey ortalama genellikle daha karmaşıktır. vertical-align sadece satır içi öğeler veya tablo hücreleri için etkilidir. Blok öğeleri dikey olarak ortalamak için Flexbox, Grid veya mutlak konumlandırma (position: absolute; top: 50%; transform: translateY(-50%);) gibi modern teknikler tercih edilmelidir. Flexbox ve Grid Ekseni Anlayışı: Flexbox ve Grid'de hizalama yaparken, ana eksen (main-axis) ve çapraz eksen (cross-axis) kavramlarını iyi anlamak kritiktir. flex-direction veya grid-template-columns/rows gibi özellikler, bu eksenlerin yönünü belirler ve dolayısıyla justify-content ve align-items'ın davranışını doğrudan etkiler. Tarayıcı Uyumluluğu: Özellikle Flexbox ve Grid gibi modern layout modülleri, güncel tarayıcılarda geniş çapta desteklenmektedir. Ancak eski tarayıcıları hedefliyorsanız, ön ekler (vendor prefixes) veya alternatif yöntemler kullanmanız gerekebilir.
avatar
Emin
5
0
HTML Makaleleri
html-dilinde-html-layout-kullanimi-yapisal-duzenleme-kilavuzu
HTML Dilinde HTML Layout Kullanımı: Yapısal Düzenleme Kılavuzu
Web geliştirme sürecinde, etkili ve erişilebilir bir kullanıcı deneyimi sunmanın temelini, iyi yapılandırılmış bir HTML düzeni oluşturur. HTML layout, bir web sayfasının içeriğini mantıksal ve hiyerarşik bir şekilde organize etmek için kullanılan elemanları ve teknikleri ifade eder. Doğru layout kullanımı, arama motoru optimizasyonu (SEO) için kritik öneme sahip olduğu gibi, ekran okuyucular gibi yardımcı teknolojilerle etkileşimde bulunan kullanıcılar için de sayfa içeriğinin anlaşılabilirliğini artırır. Bu kılavuz, HTML'in yapısal elemanlarını kullanarak modern web sayfaları oluşturmanın temel prensiplerini detaylandıracaktır. Temel Sözdizimi (Syntax) HTML layout oluştururken kullanılan temel yapısal ve semantik elemanlar, bir web sayfasının ana bölgelerini tanımlar. Aşağıdaki kod bloğu, tipik bir HTML sayfa düzeninin temel sözdizimini göstermektedir. Web Sitesi Başlığı Ana Sayfa Hakkımızda Ana İçerik Bölümü Bu bölümde sayfanın ana içeriği yer alır. Yan Panel İlgili bilgiler veya reklamlar burada bulunabilir. © 2023 Tüm Hakları Saklıdır. softmush.com Detaylı Açıklama HTML5 ile tanıtılan semantik etiketler, geliştiricilere içeriğin amacını tarayıcılara ve arama motorlarına daha net bir şekilde iletme imkanı sunar. Bu etiketlerin her biri, belirli bir içeriğin türünü ve rolünü belirtir. : Bir dokümanın veya bölümün giriş içeriğini temsil eder. Genellikle başlıklar, logolar, navigasyon menüleri ve arama formları gibi ögeleri içerir. : Sayfadaki diğer bölümlere veya farklı sayfalara bağlantı sağlayan navigasyon linklerini içerir. Genellikle birincil navigasyon menüleri için kullanılır. : Dokümanın veya uygulamanın baskın içeriğini temsil eder. Bir HTML dokümanında yalnızca bir adet etiketi bulunmalıdır. : Bağımsız, kendi kendine yeten bir içerik parçasını temsil eder. Bir blog yazısı, haber makalesi veya kullanıcı yorumu gibi içerikler için idealdir. : Geniş bir belgeyi veya uygulamayı mantıksal tematik gruplara ayırmak için kullanılır. Genellikle bir başlık (-) ile başlar. : Ana içeriğin dışında kalan ancak ana içerikle ilişkili olan içeriği temsil eder. Genellikle yan paneller, reklamlar veya alıntı blokları için kullanılır. : Bir dokümanın veya bölümün altbilgisini temsil eder. Genellikle telif hakkı bilgileri, yazar bilgileri, iletişim bilgileri ve ilgili linkler bulunur. : Herhangi bir semantik anlamı olmayan jenerik bir kapsayıcıdır. Genellikle CSS ile stillendirmek veya JavaScript ile manipüle etmek için kullanılır. İçeriğin semantik bir etikete uymadığı durumlarda tercih edilir. : etiketinin satır içi (inline) karşılığıdır. Metnin bir bölümünü stillendirmek veya işaretlemek için kullanılır ve herhangi bir semantik anlam taşımaz. Pratik Kullanım Örnekleri Aşağıdaki örnekler, yukarıda açıklanan HTML layout elemanlarının farklı senaryolarda nasıl kullanılabileceğini göstermektedir. Örnek 1: Temel Web Sayfası Düzeni Bu örnek, tipik bir web sayfasının ana hatlarını, header, navigasyon, ana içerik ve footer kullanarak nasıl oluşturulacağını gösterir. Web Sitem Anasayfa Hizmetler İletişim Hoş Geldiniz! Bu, sitemizin ana içeriğidir. Sayfamızı keşfetmek için yukarıdaki menüyü kullanın. © 2023 Tüm Hakları Saklıdır. softmush.com Örnek 2: Blog Yazısı Düzeni Bir blog yazısı gibi kendi içinde bağımsız bir içeriği () ve bununla ilgili ek bilgileri () içeren bir düzen örneği. Blog Başlığı Ana Sayfa Kategoriler 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. İlgili Yazılar CSS ile Düzenleme SEO Dostu HTML © 2023 Blog Adı. softmush.com İpuçları/Önemli Notlar Etkili ve sürdürülebilir bir HTML layout oluşturmak için aşağıdaki ipuçlarını göz önünde bulundurmak önemlidir: Semantik Etiket Kullanımı: Her zaman içeriğin anlamına en uygun semantik HTML5 etiketlerini (, , , , , , ) tercih edin. Bu, hem SEO hem de erişilebilirlik açısından faydalıdır. Etiketinin Doğru Kullanımı: etiketini yalnızca içeriğin semantik bir etikete uymadığı veya stil veya komut dosyası hedefleri için jenerik bir kapsayıcıya ihtiyaç duyulduğu durumlarda kullanın. CSS ile Ayırma: HTML, içeriğin yapısını tanımlarken, içeriğin görsel sunumu ve yerleşimi tamamen CSS (Cascading Style Sheets) ile yönetilmelidir. HTML markup'ınıza stil bilgisi eklemekten kaçının. Erişilebilirlik: Semantik etiketler, ekran okuyucular gibi yardımcı teknolojilerin web sayfasını daha iyi anlamasına yardımcı olur. Bu da web sitenizin daha geniş bir kitleye ulaşmasını sağlar. Mobil Uyumluluk: Modern web layout'ları genellikle responsive tasarım ilkeleriyle birleştirilir. HTML yapınızı oluştururken, farklı ekran boyutlarına uyum sağlayabilecek esnek bir temel oluşturmaya özen gösterin.
avatar
Emin
5
0
Python Makaleleri
python-dilinde-math-modulu-kullanimi
Python Dilinde Math Modülü Kullanımı
Python'ın standart kütüphanesinin bir parçası olan math modülü, temel ve gelişmiş matematiksel fonksiyonlara erişim sağlar. Bu modül, bilimsel hesaplamalar, mühendislik uygulamaları ve karmaşık matematiksel problemlerin çözümü için vazgeçilmez bir araçtır. math modülü, çoğu durumda kayan noktalı sayılar (float) üzerinde işlem yapmak üzere tasarlanmıştır ve sabitler, trigonometrik fonksiyonlar, logaritmik fonksiyonlar, üs alma işlemleri ve daha fazlasını içerir. Temel Sözdizimi math modülünü kullanmak için öncelikle onu Python programınıza dahil etmeniz gerekmektedir. Bu işlem, genellikle dosyanın başında import anahtar kelimesi kullanılarak yapılır. Modül dahil edildikten sonra, içerdiği fonksiyonlara ve sabitlere math. öneki ile erişilir. import math # Bir fonksiyona erişim sonuc = math.sqrt(25) # Bir sabite erişim pi_degeri = math.pi softmush.com Detaylı Açıklama Yukarıdaki sözdizimi, math modülünün nasıl kullanılacağına dair temel prensipleri ortaya koymaktadır. Her bir bileşenin işlevi aşağıdaki gibidir: import math: Bu ifade, Python'a math adlı modülü yüklemesini söyler. Modül yüklendikten sonra, içinde tanımlı tüm fonksiyonlar, sınıflar ve değişkenler programınızda kullanılabilir hale gelir. math.fonksiyon_adı(argümanlar): Modül içindeki bir fonksiyona erişmek için kullanılır. math. öneki, fonksiyonun math modülüne ait olduğunu belirtir ve aynı ada sahip diğer fonksiyonlarla olası ad çakışmalarını önler. Örneğin, math.sqrt(25) ifadesi 25'in karekökünü hesaplar. math.sabit_adı: Modül içinde tanımlanmış matematiksel sabitlere erişmek için kullanılır. Örneğin, math.pi sabiti pi (π) değerini, math.e sabiti Euler sayısını (e) temsil eder. Pratik Kullanım Örnekleri Aşağıdaki örnekler, math modülünün çeşitli fonksiyonlarının gerçek dünya senaryolarında nasıl kullanılabileceğini göstermektedir. Örnek 1: Temel Sabitler ve Karekök Hesaplama import math # Pi ve Euler sabitlerini kullanma print(f"Pi değeri: {math.pi}") print(f"e değeri: {math.e}") # Bir sayının karekökünü bulma sayi = 144 karekok = math.sqrt(sayi) print(f"{sayi}'nin karekökü: {karekok}") # Bir sayının üssünü alma (2^3) us_alma = math.pow(2, 3) print(f"2 üzeri 3: {us_alma}") softmush.com Bu örnek, math.pi ve math.e gibi sabitlerin nasıl kullanıldığını ve math.sqrt() ile bir sayının karekökünün, math.pow() ile de bir sayının üssünün nasıl hesaplandığını göstermektedir. Örnek 2: Trigonometrik Fonksiyonlar import math # Açı değerini radyana çevirme (trigonometrik fonksiyonlar radyan bekler) derece = 90 radyan = math.radians(derece) print(f"{derece} derece radyan olarak: {radyan}") # Sinüs, Kosinüs ve Tanjant hesaplama sinus_degeri = math.sin(radyan) cosinus_degeri = math.cos(radyan) tanjant_degeri = math.tan(radyan) print(f"sin({derece}°): {sinus_degeri}") print(f"cos({derece}°): {cosinus_degeri}") print(f"tan({derece}°): {tanjant_degeri}") softmush.com Bu örnek, math.radians() fonksiyonunun dereceleri radyanlara dönüştürmek için nasıl kullanıldığını ve ardından math.sin(), math.cos(), math.tan() gibi trigonometrik fonksiyonların nasıl uygulandığını göstermektedir. Örnek 3: Logaritmik ve Tavan/Taban Fonksiyonları import math # Doğal logaritma (ln) ve 10 tabanında logaritma (log10) sayi_log = 100 dogal_log = math.log(sayi_log) taban10_log = math.log10(sayi_log) taban2_log = math.log2(sayi_log) # Python 2.6 ve sonrası print(f"{sayi_log}'un doğal logaritması: {dogal_log}") print(f"{sayi_log}'un 10 tabanında logaritması: {taban10_log}") print(f"{sayi_log}'un 2 tabanında logaritması: {taban2_log}") # Tavan (ceil) ve Taban (floor) değerleri ondalikli_sayi = 4.7 tavan_degeri = math.ceil(ondalikli_sayi) taban_degeri = math.floor(ondalikli_sayi) print(f"{ondalikli_sayi}'nin tavan değeri: {tavan_degeri}") print(f"{ondalikli_sayi}'nin taban değeri: {taban_degeri}") softmush.com Bu örnek, math.log(), math.log10(), math.log2() fonksiyonlarının farklı tabanlarda logaritma hesaplamak için kullanılışını ve math.ceil() ile bir sayıyı yukarı, math.floor() ile aşağı tam sayıya yuvarlamanın nasıl yapıldığını açıklamaktadır. Önemli Notlar Kayan Noktalı Sayılar (float): math modülündeki fonksiyonların çoğu, kayan noktalı sayılarla (float) çalışmak üzere tasarlanmıştır. Tam sayı (int) argümanları genellikle otomatik olarak kayan noktalı sayılara dönüştürülür. Açı Birimleri: Trigonometrik fonksiyonlar (sin, cos, tan vb.) açıları radyan cinsinden bekler. Derece cinsinden bir açıyı kullanmak için math.radians() fonksiyonunu kullanarak önce radyanlara dönüştürmeniz gerekmektedir. Hata Yönetimi: Geçersiz argümanlar (örneğin, negatif bir sayının karekökü math.sqrt(-1)) ValueError hatasına neden olabilir. Bu tür durumları ele almak için uygun hata yönetimi (try-except blokları) kullanılmalıdır. math.pow() ve ** Operatörü: Python'da üs alma işlemi için hem math.pow() fonksiyonu hem de ** operatörü bulunur. math.pow() her zaman kayan noktalı bir sonuç dönerken, ** operatörü, işlenenlerin türüne bağlı olarak bir tam sayı veya kayan noktalı sonuç döndürebilir. math.fabs() ve abs(): Mutlak değer almak için math.fabs() ve yerleşik abs() fonksiyonları mevcuttur. math.fabs() her zaman kayan noktalı bir sonuç dönerken, abs() işlenenle aynı türde bir sonuç döner.
avatar
Emin
21
0
SQL Makaleleri
sql-dilinde-inner-join-kullanimi-detayli-rehber
SQL Dilinde INNER JOIN Kullanımı: Detaylı Rehber
İlişkisel veritabanı yönetim sistemlerinde (RDBMS) veriler genellikle normalize edilmiş birden fazla tabloda saklanır. Bu tablolar arasındaki ilişkileri kullanarak anlamlı bir veri kümesi elde etmek için birleştirme (JOIN) işlemleri kritik öneme sahiptir. Bu makale, SQL'deki en yaygın ve temel birleştirme türlerinden biri olan INNER JOIN operatörünün kullanımını, sözdizimini ve pratik örneklerini teknik bir bakış açısıyla detaylandırmaktadır. Sözdizimi INNER JOIN, iki veya daha fazla tablodan ortak bir kolondaki eşleşen değerlere dayanarak satırları birleştirir. Yalnızca her iki tabloda da bir eşleşme bulunduğunda satırları sonuç kümesine dahil eder. SELECT kolon1, kolon2, ... FROM tablo1 INNER JOIN tablo2 ON tablo1.ortak_kolon = tablo2.ortak_kolon; softmush.com Detaylı Açıklama SELECT kolon1, kolon2, ...: Sonuç kümesinde görüntülemek istediğiniz kolonları belirtir. Bu kolonlar birleştirilen tablolardan herhangi birine ait olabilir. Kolon adları çakışıyorsa, tablo_adı.kolon_adı formatında belirtilmelidir. FROM tablo1: Birleştirme işlemine başlayacağınız ilk tabloyu belirtir. Bu genellikle "sol" tablo olarak adlandırılır. INNER JOIN tablo2: tablo1 ile birleştirmek istediğiniz ikinci tabloyu (sağ tablo) belirtir. ON tablo1.ortak_kolon = tablo2.ortak_kolon: Bu kısım, birleştirme koşulunu tanımlar. Her iki tablodaki hangi kolonların eşleşmesi gerektiğini belirtir. INNER JOIN yalnızca bu koşulun doğru olduğu satırları döndürür. Kolonlar genellikle tablolar arasındaki birincil ve yabancı anahtar ilişkilerini temsil eder. Pratik Kullanım Örnekleri Aşağıdaki örneklerde, bir eğitim veritabanı senaryosu üzerinden INNER JOIN kullanımını inceleyeceğiz. Veritabanımızda Ogrenciler ve Kayitlar adında iki tablo olduğunu varsayalım. Ogrenciler Tablosu: CREATE TABLE Ogrenciler ( OgrenciID INT PRIMARY KEY, Ad VARCHAR(50), Soyad VARCHAR(50) ); INSERT INTO Ogrenciler (OgrenciID, Ad, Soyad) VALUES (1, 'Ayşe', 'Yılmaz'), (2, 'Mehmet', 'Demir'), (3, 'Zeynep', 'Kaya'), (4, 'Ali', 'Can'); softmush.com Kayitlar Tablosu: CREATE TABLE Kayitlar ( KayitID INT PRIMARY KEY, OgrenciID INT, KursAdi VARCHAR(100), FOREIGN KEY (OgrenciID) REFERENCES Ogrenciler(OgrenciID) ); INSERT INTO Kayitlar (KayitID, OgrenciID, KursAdi) VALUES (101, 1, 'Veritabanı Yönetimi'), (102, 2, 'Programlamaya Giriş'), (103, 1, 'Web Geliştirme'), (104, 3, 'Veri Analizi'); softmush.com Örnek 1: İki Tabloyu Birleştirme Hangi öğrencinin hangi kursa kayıtlı olduğunu görmek için Ogrenciler ve Kayitlar tablolarını OgrenciID kolonu üzerinden birleştirelim. SELECT O.Ad, O.Soyad, K.KursAdi FROM Ogrenciler AS O INNER JOIN Kayitlar AS K ON O.OgrenciID = K.OgrenciID; softmush.com Açıklama: Bu sorgu, Ogrenciler tablosundaki her OgrenciID ile Kayitlar tablosundaki eşleşen OgrenciID değerlerini bulur. Sonuç olarak, kayıtlı her öğrencinin adı, soyadı ve aldığı kursun adını listeler. AS O ve AS K takma adlar (aliases) kullanarak sorguyu daha okunabilir hale getirdik. Örnek 2: Birden Fazla Tabloyu Birleştirme Şimdi üçüncü bir tablo, KursDetaylari ekleyelim ve bir öğrencinin aldığı kursun detaylarını (örneğin, ders saati) görmek isteyelim. KursDetaylari Tablosu: CREATE TABLE KursDetaylari ( KursAdi VARCHAR(100) PRIMARY KEY, DersSaati INT, KrediSayisi INT ); INSERT INTO KursDetaylari (KursAdi, DersSaati, KrediSayisi) VALUES ('Veritabanı Yönetimi', 45, 3), ('Programlamaya Giriş', 60, 4), ('Web Geliştirme', 50, 3), ('Veri Analizi', 75, 5); softmush.com Öğrencilerin hangi kurslara kayıtlı olduğunu ve bu kursların ders saatlerini listeleyen bir sorgu oluşturalım: SELECT O.Ad, O.Soyad, K.KursAdi, KD.DersSaati FROM Ogrenciler AS O INNER JOIN Kayitlar AS K ON O.OgrenciID = K.OgrenciID INNER JOIN KursDetaylari AS KD ON K.KursAdi = KD.KursAdi; softmush.com Açıklama: Bu sorgu, Ogrenciler, Kayitlar ve KursDetaylari tablolarını zincirleme bir şekilde birleştirir. İlk olarak öğrencilerle kayıtları, ardından kayıtlarla kurs detaylarını eşleştirerek her öğrencinin aldığı kursun adını ve ders saatini getirir. Örnek 3: Belirli Koşullara Göre Birleştirme ve Filtreleme Sadece 50 ders saatinden fazla olan kurslara kayıtlı öğrencileri görmek isteyelim: SELECT O.Ad, O.Soyad, K.KursAdi, KD.DersSaati FROM Ogrenciler AS O INNER JOIN Kayitlar AS K ON O.OgrenciID = K.OgrenciID INNER JOIN KursDetaylari AS KD ON K.KursAdi = KD.KursAdi WHERE KD.DersSaati > 50; softmush.com Açıklama: Önceki sorguya bir WHERE koşulu eklenerek, sadece DersSaati 50'den büyük olan kurslara kayıtlı öğrenciler filtrelenmiştir. INNER JOIN işlemi tamamlandıktan sonra filtreleme uygulanır. Önemli Notlar ON ve WHERE Koşulları: ON koşulu, tabloların nasıl birleştirileceğini tanımlarken, WHERE koşulu birleştirilmiş sonuç kümesini daha da filtrelemek için kullanılır. ON koşulundaki eşleşmeyen satırlar hiçbir zaman sonuç kümesine dahil edilmezken, WHERE koşulu birleştirme sonrası sonuçları etkiler. Kolon Adı Çakışmaları ve Takma Adlar: Farklı tablolarda aynı ada sahip kolonlar varsa (örneğin, her iki tabloda da bir ID kolonu), sorguda bu kolonları belirtirken tablo adı ön eki (tablo_adı.kolon_adı) veya takma adlar (alias.kolon_adı) kullanmak zorunludur. Bu, "ambiguous column name" (belirsiz kolon adı) hatasını önler ve sorgunun okunabilirliğini artırır. Performans İpuçları: Büyük tablolarda INNER JOIN performansı için birleştirme koşulunda kullanılan kolonlarda indekslerin bulunması kritik öneme sahiptir. İndeksler, veritabanı motorunun eşleşen satırları çok daha hızlı bulmasına yardımcı olur. NULL Değerler: INNER JOIN, ON koşulunda NULL değerlerle eşleşme yapmaz. Eğer bir tabloda eşleşme kolonu NULL ise, bu satır INNER JOIN sonucunda yer almaz. NULL değerleri de dahil etmek isterseniz, LEFT JOIN veya RIGHT JOIN gibi farklı JOIN türlerini değerlendirmeniz gerekebilir. Veri Bütünlüğü: INNER JOIN kullanırken, birleştirme koşulunda kullanılan kolonlardaki veri bütünlüğünün doğru olduğundan emin olun. Tutarsız veriler veya yanlış eşleşme koşulları hatalı veya eksik sonuçlara yol açabilir.
avatar
Emin
17
0
CSS Makaleleri
css-dilinde-inline-block-kullanimi
CSS Dilinde Inline-block Kullanımı
Web tasarımında elementlerin yerleşimi ve düzeni, kullanıcı deneyimi açısından kritik bir öneme sahiptir. CSS'in display özelliği, elementlerin tarayıcı tarafından nasıl işleneceğini belirler. Bu özellik, yaygın olarak kullanılan block ve inline değerlerinin yanı sıra, bu ikisinin avantajlarını birleştiren inline-block değerini de sunar. Bu makalede, inline-block'un ne olduğunu, nasıl kullanıldığını ve web sayfalarınızda esnek düzenler oluşturmak için sunduğu faydaları detaylıca inceleyeceğiz. Temel Sözdizimi Bir HTML elementine inline-block özelliklerini uygulamak için aşağıdaki CSS sözdizimi kullanılır: .element-adi { display: inline-block; }softmush.com Detaylı Açıklama CSS'te elementler genellikle ya block seviyesinde ya da inline seviyesinde davranır: block elementler: Tüm mevcut genişliği kaplar, yeni bir satırda başlar ve altındaki diğer elementleri de yeni bir satıra iter. Genişlik (width), yükseklik (height), üst/alt kenar boşluğu (margin-top, margin-bottom) ve dolgu (padding) değerleri uygulanabilir. Örnek: , , . inline elementler: Sadece içeriği kadar yer kaplar, yeni bir satırda başlamaz ve diğer inline elementlerle aynı satırda yer alır. Genişlik ve yükseklik değerleri genellikle göz ardı edilir; üst/alt kenar boşluğu ve dolgu değerleri elementin düzenini etkilemez. Örnek: , , . inline-block, bu iki davranışın en iyi yönlerini birleştirir: Bir inline element gibi diğer elementlerle aynı satırda yan yana durabilir. Bir block element gibi genişlik (width), yükseklik (height), kenar boşluğu (margin) ve dolgu (padding) değerleri uygulanabilir. vertical-align özelliği ile dikey olarak hizalanabilir, bu da esnek düzenler oluşturmada büyük kolaylık sağlar. Pratik Kullanım Örnekleri Aşağıdaki örnekler, inline-block'un farklı senaryolarda nasıl kullanılabileceğini göstermektedir. Örnek 1: Temel Kutu Düzeni Üç adet div elementini yan yana konumlandırmak ve onlara belirli boyutlar vermek için inline-block kullanabiliriz. Kutu 1 Kutu 2 Kutu 3softmush.com /* CSS Kodu */ .kutu { display: inline-block; width: 150px; height: 100px; margin: 10px; padding: 20px; background-color: #f0f0f0; border: 1px solid #ccc; text-align: center; line-height: 100px; /* İçeriği dikey ortalamak için */ }softmush.com Bu örnekte, her bir .kutu elementi hem yan yana dizilmiş hem de kendine ait genişlik, yükseklik ve kenar boşluklarına sahip olmuştur. Örnek 2: Yatay Navigasyon Menüsü Bir navigasyon menüsündeki liste öğelerini () yatay olarak hizalamak için inline-block sıklıkla tercih edilir. Ana Sayfa Hakkımızda Hizmetler İletişim softmush.com /* CSS Kodu */ nav ul { list-style: none; /* Liste işaretlerini kaldır */ margin: 0; padding: 0; background-color: #333; overflow: hidden; /* float kullanıldığında parent'ı temizlemek için */ } nav li { display: inline-block; } nav li a { display: block; /* Bağlantının tüm li alanını kaplaması için */ color: white; text-align: center; padding: 14px 16px; text-decoration: none; } nav li a:hover { background-color: #555; }softmush.com Burada, elementlerine display: inline-block; uygulanarak yan yana sıralanmaları sağlanmıştır. etiketine ise display: block; verilerek tıklanabilir alanın genişletilmesi ve padding uygulamasının doğru çalışması sağlanmıştır. Örnek 3: Form Elemanlarını Düzenleme Form etiketlerini () ve giriş alanlarını () yan yana hizalamak için de inline-block kullanılabilir. Adınız: E-posta: softmush.com /* CSS Kodu */ .form-grup label { display: inline-block; width: 90px; text-align: right; margin-right: 10px; } .form-grup input { display: inline-block; padding: 5px; margin-bottom: 10px; }softmush.com Bu örnekte, etiketler ve giriş alanları yan yana gelmiş ve etiketlere belirli bir genişlik verilerek giriş alanlarının daha düzenli görünmesi sağlanmıştır. Önemli Notlar ve İpuçları Boşluk Sorunu (Whitespace Issue): inline-block elementler arasında HTML kodunda bırakılan boşluklar (satır sonları, boşluklar) tarayıcı tarafından küçük bir boşluk olarak yorumlanabilir. Bu istenmeyen boşlukları gidermek için CSS (font-size: 0; parent elementte, sonra çocukta tekrar ayarla), HTML (etiketleri birleştirme yorumları), veya nadiren margin-left: -4px; gibi teknikler kullanılabilir. Ancak modern yaklaşımlarda flexbox veya grid gibi alternatifler bu sorunu doğal olarak çözmektedir. Dikey Hizalama (vertical-align): inline-block elementler, inline elementler gibi davranarak vertical-align özelliği ile dikey olarak hizalanabilir. Bu, aynı satırdaki farklı yükseklikteki elementlerin üst, orta veya alt hizalanmasında oldukça kullanışlıdır. Genişlik ve Yükseklik Kontrolü: inline-block elementlere doğrudan width ve height değerleri atanabilir, bu da düzen kontrolünü önemli ölçüde artırır. Bu, inline elementlerde mümkün değildir. Tarayıcı Uyumluluğu: display: inline-block; özelliği oldukça eski bir özelliktir ve tüm modern tarayıcılar tarafından geniş çapta desteklenir. Bu nedenle, genel uyumluluk konusunda endişe etmenize gerek yoktur. Alternatif Düzen Modelleri: Karmaşık ve duyarlı (responsive) düzenler oluşturmak için inline-block hala geçerli bir seçenek olsa da, günümüzde flexbox ve CSS Grid gibi daha güçlü ve esnek düzen modelleri mevcuttur. Bu modern yaklaşımlar, özellikle boşluk sorunları gibi inline-block'un bazı sınırlamalarını aşar.
avatar
Emin
9
0
Python Makaleleri
python-dilinde-tarih-ve-saat-islemleri-datetime-modulu-kullanimi
Python Dilinde Tarih ve Saat İşlemleri: `datetime` Modülü Kullanımı
Python, tarih ve saat verilerini işlemek için güçlü ve esnek bir modül olan datetime modülünü sunar. Bu modül, tarihleri, saatleri veya her ikisini birden temsil eden nesnelerle çalışmayı kolaylaştırır. Bir uygulamanın olayları zaman damgasıyla kaydetmesi, randevuları planlaması veya belirli bir zaman dilimindeki verileri analiz etmesi gerektiğinde, datetime modülü temel bir araç haline gelir. Temel Sözdizimi datetime modülü, farklı ihtiyaçlar için çeşitli sınıflar sunar. En yaygın kullanılanları şunlardır: date: Yıl, ay ve gün bilgilerini içerir. time: Saat, dakika, saniye ve mikrosaniye bilgilerini içerir. datetime: Hem tarih hem de saat bilgilerini içerir. timedelta: İki tarih veya saat arasındaki farkı temsil eder. Bu sınıfları kullanmak için öncelikle modülün içe aktarılması gerekir: from datetime import date, time, datetime, timedeltasoftmush.com Detaylı Açıklama Her bir sınıfın temel kullanımını ve nesne oluşturma yöntemlerini inceleyelim: date Sınıfı Bir date nesnesi oluşturmak için date(yıl, ay, gün) yapısı kullanılır. Yıl dört haneli, ay 1-12 arası, gün 1-31 arası bir değer olmalıdır. from datetime import date bugun = date(2023, 10, 26) print(bugun) # Çıktı: 2023-10-26softmush.com Mevcut tarihi almak için date.today() metodu kullanılır. from datetime import date bugun_an = date.today() print(f"Bugünün tarihi: {bugun_an}") # Örnek Çıktı: Bugünün tarihi: 2023-10-26softmush.com time Sınıfı Bir time nesnesi oluşturmak için time(saat, dakika, saniye, mikrosaniye) yapısı kullanılır. Mikrosaniye isteğe bağlıdır. Saat 0-23, dakika 0-59, saniye 0-59, mikrosaniye 0-999999 aralığında olmalıdır. from datetime import time su_an_saat = time(14, 30, 0, 500000) # 14:30:00.500000 print(su_an_saat) # Çıktı: 14:30:00.500000softmush.com datetime Sınıfı Hem tarih hem de saat bilgilerini içeren en yaygın kullanılan sınıftır. Bir datetime nesnesi oluşturmak için datetime(yıl, ay, gün, saat, dakika, saniye, mikrosaniye) yapısı kullanılır. Saat, dakika, saniye ve mikrosaniye parametreleri isteğe bağlıdır. from datetime import datetime belirli_zaman = datetime(2023, 10, 26, 15, 45, 30) print(belirli_zaman) # Çıktı: 2023-10-26 15:45:30softmush.com Mevcut tarih ve saati almak için datetime.now() metodu kullanılır. from datetime import datetime su_an = datetime.now() print(f"Şu anki tarih ve saat: {su_an}") # Örnek Çıktı: Şu anki tarih ve saat: 2023-10-26 15:45:30.123456softmush.com timedelta Sınıfı İki date, time veya datetime nesnesi arasındaki farkı temsil eder. Ayrıca, bir tarih veya saate belirli bir süre eklemek veya çıkarmak için de kullanılabilir. from datetime import datetime, timedelta bugun = datetime.now() gelecek_hafta = bugun + timedelta(weeks=1) gecen_ay = bugun - timedelta(days=30) print(f"Bugün: {bugun}") print(f"Gelecek hafta: {gelecek_hafta}") print(f"Geçen ay: {gecen_ay}")softmush.com Pratik Kullanım Örnekleri Tarih ve Saat Formatlama (strftime) strftime() metodu, datetime nesnelerini belirli bir formatta string'e dönüştürmek için kullanılır. Format kodları, tarih ve saat bileşenlerini temsil eder. from datetime import datetime simdi = datetime.now() print(f"Varsayılan format: {simdi}") # Örnek: 2023-10-26 15:45:30.123456 # Özel formatlama formatli_tarih_saat = simdi.strftime("%Y-%m-%d %H:%M:%S") print(f"Formatlı (YYYY-MM-DD HH:MM:SS): {formatli_tarih_saat}") # Örnek: 2023-10-26 15:45:30 formatli_tarih_turkce = simdi.strftime("%d %B %Y, %A") print(f"Formatlı (DD Ay YYYY, Gün): {formatli_tarih_turkce}") # Örnek: 26 Ekim 2023, Perşembe formatli_saat_am_pm = simdi.strftime("%I:%M %p") print(f"Formatlı (HH:MM AM/PM): {formatli_saat_am_pm}") # Örnek: 03:45 PMsoftmush.com Yaygın strftime format kodları: %Y: Dört haneli yıl (örn. 2023) %m: İki haneli ay (01-12) %d: İki haneli gün (01-31) %H: 24 saat formatında saat (00-23) %M: İki haneli dakika (00-59) %S: İki haneli saniye (00-59) %f: Mikrosaniye (000000-999999) %A: Haftanın tam adı (örn. Perşembe) %B: Ayın tam adı (örn. Ekim) %a: Haftanın kısa adı (örn. Per) %b: Ayın kısa adı (örn. Eki) %j: Yılın günü (001-366) %w: Haftanın günü (0 Pazar, 6 Cumartesi) %x: Yerel tarih formatı %X: Yerel saat formatı %c: Yerel tarih ve saat formatı %I: 12 saat formatında saat (01-12) %p: AM/PM göstergesi String'den Tarih ve Saate Dönüştürme (strptime) strptime() metodu, belirli bir formatta string bir ifadeyi datetime nesnesine dönüştürmek için kullanılır. Bu, özellikle dış kaynaklardan alınan tarih verilerini işlerken önemlidir. from datetime import datetime tarih_string = "26-10-2023 16:00:00" format_string = "%d-%m-%Y %H:%M:%S" donusturulen_tarih = datetime.strptime(tarih_string, format_string) print(f"String'den dönüştürülen datetime nesnesi: {donusturulen_tarih}") # Çıktı: String'den dönüştürülen datetime nesnesi: 2023-10-26 16:00:00 # Farklı bir format diger_tarih_string = "2023/10/26 4:00 PM" diger_format = "%Y/%m/%d %I:%M %p" donusturulen_tarih_2 = datetime.strptime(diger_tarih_string, diger_format) print(f"İkinci örnek: {donusturulen_tarih_2}") # Çıktı: İkinci örnek: 2023-10-26 16:00:00softmush.com strptime metodunda kullanılan format string'in, dönüştürülecek string ile tam olarak eşleşmesi gerektiğini unutmamak önemlidir; aksi takdirde bir ValueError hatası alınır. Tarih ve Saat Karşılaştırmaları datetime nesneleri, standart karşılaştırma operatörleri (, =, ==, !=) kullanılarak kolayca karşılaştırılabilir. from datetime import datetime simdi = datetime.now() gelecek_zaman = datetime(2024, 1, 1, 0, 0, 0) # Yeni Yıl gecmis_zaman = datetime(2023, 1, 1, 0, 0, 0) # Geçen Yıl Başlangıcı print(f"Şimdi < Gelecek Zaman: {simdi < gelecek_zaman}") print(f"Şimdi > Geçmiş Zaman: {simdi > gecmis_zaman}") print(f"Gelecek Zaman == Geçmiş Zaman: {gelecek_zaman == gecmis_zaman}")softmush.com Önemli Notlar Zaman Dilimleri (Timezones): datetime modülü varsayılan olarak zaman dilimi bilgisini içermez (naive datetime nesneleri). Zaman dilimi farklarını yönetmek için pytz gibi üçüncü taraf kütüphaneler veya Python 3.9 ve sonrası için zoneinfo modülü kullanılması önerilir. Performans: Büyük ölçekli zaman serisi işlemleri veya çok sayıda tarih hesaplaması yapılıyorsa, pandas kütüphanesi gibi daha optimize edilmiş araçlar değerlendirilebilir. Hata Yönetimi: strptime() kullanırken, geçersiz bir tarih string'i veya uyumsuz bir format verilirse ValueError hatası fırlatılır. Bu durumları try-except blokları ile yönetmek önemlidir. Modül İçe Aktarımı: Genellikle from datetime import datetime, date, time, timedelta şeklinde belirli sınıfları içe aktarmak daha yaygındır. Ancak tüm modülü import datetime olarak içe aktarıp datetime.datetime.now() gibi kullanmak da mümkündür.
avatar
Emin
9
0
Bilim Makaleleri
ultra-islenmis-gidalarin-gizli-faydalari-her-sey-kotu-mu
Ultra İşlenmiş Gıdaların Gizli Faydaları: Her Şey Kötü Mü?
Beslenme dünyasında ultra işlenmiş gıdalar (UİG'ler) genellikle şeytanlaştırılır. Haklı olarak da, çoğu zaman yüksek şeker, tuz ve sağlıksız yağ içerikleriyle obezite, kalp hastalıkları ve diyabet gibi sağlık sorunlarıyla ilişkilendirilirler. Ancak bir gazeteci ve SEO yazarı olarak, konulara her zaman daha derinlemesine bakmayı severim. Peki, gerçekten de tüm ultra işlenmiş gıdalar tamamen zararlı mıdır? Yoksa bu geniş kategorinin içinde, belirli koşullar altında fayda sağlayabilecek bazı "gri alanlar" var mı? Bugün, beslenme uzmanlarının bile şaşırtıcı bulabileceği bir konuyu ele alacağız: Hangi ultra işlenmiş gıdalar faydalı olabilir? Bu, kolay bir soru değil ve cevabı da basit "evet" veya "hayır" şeklinde değil. Unutmayalım ki "ultra işlenmiş" terimi, gıdanın ne kadar endüstriyel işlemden geçtiğini ve genellikle katkı maddeleri içerdiğini ifade eder. Bu, her zaman besin değerinin düşük olduğu anlamına gelmeyebilir, ancak çoğu zaman böyle olur. Ancak bazı istisnalar, özellikle modern yaşamın getirdiği ihtiyaçlar ve beslenme eksiklikleriyle mücadele etmek adına önemli roller üstlenebilir. Ultra İşlenmiş Gıda Nedir ve Neden Kötü Bir Üne Sahiptir? Öncelikle, ultra işlenmiş gıdanın tanımını netleştirelim. NOVA sınıflandırmasına göre, ultra işlenmiş gıdalar (Grup 4), genellikle evde bulunmayan endüstriyel içerikler ve çoklu işleme aşamaları içeren ürünlerdir. Şekerleme, fast food, paketli atıştırmalıklar, gazlı içecekler bu kategoriye girer. Genellikle lezzetli, ucuz ve uzun raf ömrüne sahip olmaları için tasarlanmışlardır. Bu özellikler onları cazip kılarken, besin değerlerinin düşük olması ve aşırı tüketim eğilimi nedeniyle sağlık için risk oluştururlar. Peki, bu kötü ünün arkasında yatan nedenler nelerdir? Çoğu UİG, doğal lif, vitamin ve mineral açısından fakirdir. Bunun yerine, enerji yoğunluğu yüksek, ancak besin değeri düşük "boş kalori" sağlarlar. Ayrıca, tatlandırıcılar, renklendiriciler, emülgatörler gibi katkı maddeleri de içerirler ki bunların uzun vadeli etkileri hala tartışılmaktadır. Ancak tüm bunlara rağmen, bazı UİG'ler, belirli beslenme ihtiyaçlarını karşılamak üzere özel olarak tasarlanmıştır ve bu bağlamda faydalı olabilir. Gözden Kaçan Faydalı Ultra İşlenmiş Gıdalar (İstisnalar) İşte size şaşırtıcı gelebilecek, ancak dikkatli bir bakış açısıyla faydalı sayılabilecek ultra işlenmiş gıda örnekleri: Zenginleştirilmiş Kahvaltılık Gevrekler (Düşük Şekerli ve Tam Tahıllı Seçenekler): Evet, birçoğu şeker yüklüdür ve kaçınılması gereken ürünlerdir. Ancak, bazı kahvaltılık gevrekler, özellikle tam tahıllı olanlar ve ilave şeker oranı düşük tutulanlar, demir, B vitaminleri (özellikle folik asit) ve lif gibi önemli besin maddeleriyle zenginleştirilmiştir. Özellikle hamile kadınlar için folik asit takviyesi, çocuklarda demir eksikliği anemisi riskini azaltmak veya vegan/vejetaryen bireylerin B12 vitamini alımını desteklemek adına pratik ve etkili bir yol olabilir. Burada anahtar kelime "düşük şekerli" ve "tam tahıllı" olmasıdır. Bitkisel Süt Alternatifleri (Zenginleştirilmiş Olanlar): Badem sütü, soya sütü, yulaf sütü gibi ürünler, laktoz intoleransı olanlar, süt alerjisi olanlar veya vegan beslenenler için harika alternatiflerdir. Bu ürünlerin çoğu, inek sütünde bulunan kalsiyum, D vitamini ve B12 vitamini gibi önemli besin maddeleriyle zenginleştirilmiştir. Doğal hallerinde bu vitamin ve mineralleri içermezler, bu yüzden endüstriyel işlemle "ultra işlenmiş" kategorisine girseler de, beslenme eksikliklerini gidermek adına kritik bir rol oynarlar. Etiket okuma burada çok önemlidir; zenginleştirilmiş olup olmadığını kontrol edin ve ilave şekerden kaçının. Bebek Mamaları: Anne sütünün yerine geçemese de, bazı durumlarda anne sütünün yetersiz kaldığı veya hiç verilemediği durumlarda bebek mamaları hayati öneme sahiptir. Bu mamalar, bebeklerin sağlıklı gelişimi için gerekli olan tüm besin maddelerini (protein, karbonhidrat, yağ, vitaminler ve mineraller) içerecek şekilde bilimsel olarak formüle edilmiş ultra işlenmiş ürünlerdir. En titizlikle düzenlenmiş gıda ürünlerinden biridir ve milyonlarca bebeğin yaşamını kurtarmış veya sağlıklı büyümesine olanak sağlamıştır. Sporcu Besinleri (Özellikle Protein Tozları ve Bazı Barlar): Yoğun antrenman yapan sporcular, kas onarımı ve gelişimi için normal beslenmeyle alamayacakları kadar yüksek miktarda proteine ihtiyaç duyabilirler. Protein tozları, peynir altı suyu (whey), kazein veya bitkisel bazlı (bezelye, pirinç vb.) olabilir ve hızlı ve konsantre bir protein kaynağı sunar. Benzer şekilde, bazı sporcu barları, özellikle ilave şeker içermeyen ve yüksek protein/lif oranına sahip olanlar, antrenman sonrası toparlanma veya öğün yerine geçebilecek pratik çözümler sunabilir. Bunlar ultra işlenmiş kategorisine girse de, belirli bir ihtiyaca yönelik olarak optimize edilmişlerdir. Tıbbi Beslenme Ürünleri (Örn. Besin Takviyeli İçecekler): Hastanelerde, yaşlı bakım evlerinde veya evde yeme güçlüğü çeken, iştahsız veya özel beslenme gereksinimleri olan bireyler için kullanılan besin takviyeli içecekler (örneğin, Ensure, Boost gibi markalar), beslenme yetersizliğini önlemek veya tedavi etmek için tasarlanmış ultra işlenmiş ürünlerdir. Bu ürünler, tüm makro ve mikro besinleri dengeli bir şekilde içerir ve hastaların sağlığını sürdürmeleri için kritik öneme sahiptir. Neden Bu Gıdalar "Faydalı" Kategorisine Girebilir? Bu örneklerde de görüldüğü gibi, ultra işlenmiş gıdaların faydalı olabilmesinin temel nedenleri şunlardır: Besin Zenginleştirmesi (Fortifikasyon): Vitamin ve mineral eksiklikleriyle mücadele etmek için gıdalara eklenen besin maddeleri, özellikle hassas popülasyonlar için büyük önem taşır. Erişilebilirlik ve Kolaylık: Bazı ultra işlenmiş gıdalar, özellikle yoğun yaşam tarzına sahip bireyler veya kısıtlı mutfak imkanları olanlar için, dengeli bir öğün veya besin takviyesi sağlamanın en pratik yolunu sunar. Özel Beslenme İhtiyaçları: Alerjiler, intoleranslar, hastalıklar veya sporcu beslenmesi gibi özel durumlar, belirli ultra işlenmiş gıdaların vazgeçilmez olmasını sağlayabilir. Raf Ömrü ve Güvenlik: İşlenmiş gıdalar, bozulma riskini azaltarak gıda güvenliğini artırır ve gıda israfını önlemeye yardımcı olabilir. Dikkat Edilmesi Gerekenler ve Altın Kurallar Bu istisnalar olsa da, ultra işlenmiş gıda tüketimine yaklaşımımızda dikkatli olmalıyız. Çoğu ultra işlenmiş gıda hala ana beslenme kaynağımız olmamalıdır. İşte dikkat etmeniz gerekenler: Etiket Okuma: Her zaman besin etiketlerini kontrol edin. Şeker, tuz ve doymuş yağ oranının düşük, lif, vitamin ve mineral içeriğinin yüksek olduğundan emin olun. İçerik Listesi: İçerik listesi ne kadar kısa ve anlaşılırsa o kadar iyidir. Bilmediğiniz, telaffuzu zor katkı maddelerinin çokluğu genellikle iyiye işaret değildir. Bütünsel Beslenme Odaklılık: Bu "faydalı" ultra işlenmiş gıdalar bile, taze meyve, sebze, tam tahıllar, baklagiller ve yağsız protein kaynaklarından oluşan dengeli bir diyetin sadece küçük bir parçasını oluşturmalıdır. Bağlam Önemlidir: Bir sporcu için protein tozu faydalıyken, hareketsiz bir birey için gereksiz kalori kaynağı olabilir. Tüketim kararınızı kişisel ihtiyaçlarınıza ve yaşam tarzınıza göre verin. Sonuç olarak, ultra işlenmiş gıdalar dünyası siyah ve beyaz değildir. Evet, büyük bir kısmı sağlığımız için risk taşıyor ve mümkün olduğunca kaçınmalıyız. Ancak, modern gıda mühendisliği ve beslenme biliminin birleşimiyle, belirli ultra işlenmiş ürünler, özellikle besin eksikliklerini gidermek, özel diyet ihtiyaçlarını karşılamak veya hayat kurtarıcı çözümler sunmak adına önemli bir rol oynayabilir. Önemli olan, bilinçli seçimler yapmak, etiketleri okumak ve genel beslenme düzenimizin büyük bir kısmını işlenmemiş veya minimum işlenmiş gıdalardan oluşturmaktır. Her zaman olduğu gibi, denge ve bilgi anahtardır.
avatar
Emin
14
0
SQL Makaleleri
sql-joins-iliskisel-veritabanlarinda-birlestirme-islemleri
SQL Joins: İlişkisel Veritabanlarında Birleştirme İşlemleri
İlişkisel veritabanları, veri bütünlüğünü sağlamak ve yedekliliği azaltmak amacıyla ilgili verileri genellikle birden fazla tabloda saklar. Eksiksiz bir bilgi kümesi elde etmek, bu farklı tabloların verilerini birleştirmeyi sıkça gerektirir. SQL Joins, aralarındaki ilgili bir sütuna dayanarak iki veya daha fazla tablodan satırları bağlayarak bu işlemi gerçekleştirmek için temel bir mekanizma sunar. Karmaşık veritabanı şemalarında farklı SQL Join türlerini anlamak, verimli ve doğru veri çekimi için hayati öneme sahiptir. Sözdizimi SQL Join operatörlerinin genel sözdizimi aşağıdaki gibidir: SELECT kolon1, kolon2, ... FROM tablo1 [INNER | LEFT | RIGHT | FULL] JOIN tablo2 ON tablo1.ortak_kolon = tablo2.ortak_kolon WHERE kosul;softmush.com Detaylı Açıklama Yukarıdaki sözdiziminde yer alan her bir bileşen, belirli bir amaca hizmet eder: SELECT kolon1, kolon2, ...: Sorgu sonucunda gösterilecek sütunları belirtir. Bu sütunlar birleştirilen tablolardan herhangi birinden seçilebilir. FROM tablo1: Sorgunun ana tablosunu belirtir. Birleştirme işlemi bu tablodan başlar. [INNER | LEFT | RIGHT | FULL] JOIN tablo2: Birleştirme türünü ve ikinci tabloyu belirtir. Dört ana Join türü vardır: INNER JOIN: İki tabloda da eşleşen değerlere sahip satırları döndürür. Eğer her iki tabloda da bir eşleşme yoksa, o satır sonuç kümesine dahil edilmez. En yaygın kullanılan Join türüdür. LEFT JOIN (veya LEFT OUTER JOIN): Sol tablodaki tüm satırları döndürür ve sağ tablodan eşleşen satırları getirir. Sol tablodaki bir satır için sağ tabloda eşleşme bulunamazsa, sağ tablonun sütunları için NULL değerleri döndürülür. RIGHT JOIN (veya RIGHT OUTER JOIN): Sağ tablodaki tüm satırları döndürür ve sol tablodan eşleşen satırları getirir. Sağ tablodaki bir satır için sol tabloda eşleşme bulunamazsa, sol tablonun sütunları için NULL değerleri döndürülür. FULL JOIN (veya FULL OUTER JOIN): Her iki tablodaki tüm satırları döndürür. Bir tabloda eşleşme olmasa bile, diğer tablodan gelen eşleşmeyen satırlar da dahil edilir ve eşleşmeyen taraftaki sütunlar için NULL değerleri döndürülür. ON tablo1.ortak_kolon = tablo2.ortak_kolon: Join koşulunu belirtir. Bu koşul, iki tablo arasındaki hangi sütunların eşleştirilmesi gerektiğini tanımlar. Genellikle bu, birincil anahtar (Primary Key) ve yabancı anahtar (Foreign Key) ilişkisi olan sütunlardır. WHERE kosul: İsteğe bağlı olarak, birleştirme işlemi tamamlandıktan sonra sonuç kümesini daha da filtrelemek için kullanılır. Pratik Kullanım Örnekleri Aşağıdaki örnekler için iki tablo kullandığımızı varsayalım: -- Calisanlar Tablosu CREATE TABLE Calisanlar ( CalisanID INT PRIMARY KEY, Ad VARCHAR(50), Soyad VARCHAR(50), DepartmanID INT ); INSERT INTO Calisanlar (CalisanID, Ad, Soyad, DepartmanID) VALUES (1, 'Ayşe', 'Yılmaz', 101), (2, 'Mehmet', 'Demir', 102), (3, 'Zeynep', 'Kaya', 101), (4, 'Ali', 'Can', 103), (5, 'Elif', 'Tekin', NULL); -- Departmanlar Tablosu CREATE TABLE Departmanlar ( DepartmanID INT PRIMARY KEY, DepartmanAdi VARCHAR(50) ); INSERT INTO Departmanlar (DepartmanID, DepartmanAdi) VALUES (101, 'İnsan Kaynakları'), (102, 'Muhasebe'), (103, 'Pazarlama'), (104, 'Ar-Ge');softmush.com INNER JOIN Örneği Bu örnek, sadece hem Calisanlar hem de Departmanlar tablolarında eşleşen DepartmanID değerlerine sahip çalışanları ve departman adlarını döndürür. SELECT C.Ad, C.Soyad, D.DepartmanAdi FROM Calisanlar AS C INNER JOIN Departmanlar AS D ON C.DepartmanID = D.DepartmanID;softmush.com Çıktı Açıklaması: DepartmanID değeri NULL olan 'Elif Tekin' ve Departmanlar tablosunda eşleşmesi olmayan 'Ar-Ge' departmanı sonuç kümesine dahil edilmez. Sadece eşleşen veriler listelenir. LEFT JOIN Örneği Bu örnek, Calisanlar tablosundaki tüm çalışanları ve varsa ilgili departman adlarını döndürür. Departmanı olmayan çalışanlar için departman adı NULL olarak görünür. SELECT C.Ad, C.Soyad, D.DepartmanAdi FROM Calisanlar AS C LEFT JOIN Departmanlar AS D ON C.DepartmanID = D.DepartmanID;softmush.com Çıktı Açıklaması: 'Elif Tekin' (DepartmanID'si NULL olan) listede yer alır ve DepartmanAdi sütunu için NULL değeri gösterilir. Departmanlar tablosunda olup Calisanlar tablosunda eşleşmesi olmayan 'Ar-Ge' departmanı sonuçta yer almaz. RIGHT JOIN Örneği Bu örnek, Departmanlar tablosundaki tüm departmanları ve varsa bu departmanlarda çalışan kişilerin adlarını döndürür. Çalışanı olmayan departmanlar için çalışan adları NULL olarak görünür. SELECT C.Ad, C.Soyad, D.DepartmanAdi FROM Calisanlar AS C RIGHT JOIN Departmanlar AS D ON C.DepartmanID = D.DepartmanID;softmush.com Çıktı Açıklaması: 'Ar-Ge' departmanı (DepartmanID'si 104) listede yer alır ve Ad ile Soyad sütunları için NULL değerleri gösterilir. Calisanlar tablosunda olup Departmanlar tablosunda eşleşmesi olmayan 'Elif Tekin' sonuçta yer almaz. FULL JOIN Örneği Bu örnek, her iki tablodaki tüm satırları döndürür. Eşleşme olmayan yerlerde NULL değerleri görünür. SELECT C.Ad, C.Soyad, D.DepartmanAdi FROM Calisanlar AS C FULL JOIN Departmanlar AS D ON C.DepartmanID = D.DepartmanID;softmush.com Çıktı Açıklaması: Hem departmanı olmayan 'Elif Tekin' (DepartmanAdi NULL) hem de çalışanı olmayan 'Ar-Ge' departmanı (Ad ve Soyad NULL) sonuç kümesinde yer alır. Diğer tüm eşleşen satırlar da gösterilir. Önemli Notlar Tablo Takma Adları (Aliases): Join işlemlerinde, tablo adları yerine AS anahtar kelimesiyle takma adlar (örneğin Calisanlar AS C) kullanmak sorguları daha kısa ve okunabilir hale getirir. Bu, özellikle birden fazla tabloyla çalışırken veya bir tabloyu kendiyle birleştirirken (self-join) çok faydalıdır. Performans: Büyük tablolar üzerinde karmaşık Join işlemleri performans sorunlarına yol açabilir. Uygun indeksleme ve sorgu optimizasyonları, bu sorunların önüne geçmede kritik öneme sahiptir. NULL Değerler: LEFT, RIGHT ve FULL JOIN kullanırken, eşleşme olmayan taraftaki sütunlar için NULL değerlerinin döndürüldüğünü unutmayın. Bu durum, veri analizi yaparken dikkat edilmesi gereken önemli bir noktadır. Birden Fazla JOIN: Bir sorguda ikiden fazla tabloyu birleştirmek için birden fazla JOIN ifadesi art arda kullanılabilir. JOIN Koşulu: ON anahtar kelimesiyle belirtilen koşul, tablolar arasındaki ilişkinin doğru bir şekilde tanımlanmasını sağlar. Yanlış veya eksik bir koşul, hatalı veya eksik sonuçlara yol açabilir.
avatar
Emin
9
0
JavaScript Makaleleri
javascript-dilinde-asenkron-programlama-kapsamli-bir-kilavuz
JavaScript Dilinde Asenkron Programlama: Kapsamlı Bir Kılavuz
JavaScript, doğası gereği tek iş parçacıklı (single-threaded) bir dildir. Bu durum, uzun süren veya dış kaynaklara bağımlı işlemleri (örneğin, ağ istekleri, dosya okuma/yazma) doğrudan ana iş parçacığında yürütmenin kullanıcı arayüzünü kilitlemesine ve uygulamanın donmasına neden olacağı anlamına gelir. Bu tür senaryolarda uygulamanın yanıt verebilirliğini korumak ve verimli çalışmasını sağlamak için asenkron programlama teknikleri kullanılır. Bu kılavuz, JavaScript'te asenkron işlemlerin nasıl yönetildiğini, özellikle modern async/await sözdizimi ve altında yatan Promise mekanizmasını adım adım açıklamaktadır. Sözdizimi Modern JavaScript'te asenkron kod yazmanın en yaygın ve okunabilir yolu async ve await anahtar kelimelerini kullanmaktır. Bu sözdizimi, Promise tabanlı asenkron kodun senkron koda benzer bir şekilde yazılmasını sağlar. async function fetchData() { try { const response = await fetch('https://api.example.com/data'); const data = await response.json(); console.log(data); } catch (error) { console.error('Veri çekme hatası:', error); } } fetchData(); softmush.com Detaylı Açıklama async Anahtar Kelimesi: Bir fonksiyonun önüne async anahtar kelimesini eklemek, o fonksiyonu her zaman bir Promise döndüren asenkron bir fonksiyon yapar. Eğer fonksiyon açıkça bir Promise döndürmüyorsa, JavaScript otomatik olarak döndürülen değeri bir Promise içine sarar. Bu, asenkron fonksiyonların zincirleme (chaining) bir şekilde veya await ile kullanılabilmesini sağlar. await Anahtar Kelimesi: Sadece async olarak işaretlenmiş bir fonksiyonun içinde kullanılabilen await anahtar kelimesi, bir Promise'in çözülmesini (yani başarılı bir şekilde tamamlanmasını veya reddedilmesini) bekler. await kullanılan satırda kodun yürütülmesi duraklatılır ve Promise çözüldüğünde devam eder. Eğer Promise başarılı olursa, await ifadesi Promise'in değerini döndürür. Eğer Promise reddedilirse, await bir hata fırlatır ve bu hata try...catch bloğu ile yakalanabilir. Promise Nesnesi: async/await sözdiziminin temelinde Promise nesnesi yatar. Bir Promise, asenkron bir işlemin nihai sonucunu (başarı değeri veya hata nedeni) temsil eden bir JavaScript nesnesidir. Üç ana durumu vardır: pending (beklemede): Asenkron işlem henüz tamamlanmadı. fulfilled (tamamlandı/çözüldü): Asenkron işlem başarıyla tamamlandı ve bir değer döndürdü. rejected (reddedildi): Asenkron işlem bir hata nedeniyle başarısız oldu. Promise'ler, .then() metodu ile başarılı sonuçları, .catch() metodu ile hataları ve .finally() metodu ile her iki durumda da çalışacak kod bloklarını yönetmek için kullanılır. Pratik Kullanım Örnekleri Örnek 1: Temel Asenkron İşlem ve Veri Çekme Bu örnek, bir ağ isteğini simüle eden bir fonksiyonun async/await ile nasıl çağrıldığını ve sonucunun nasıl işlendiğini göstermektedir. function simulateNetworkRequest(url) { return new Promise(resolve => { setTimeout(() => { console.log(`Veri ${url} adresinden başarıyla çekildi.`); resolve({ id: 1, data: `Veri ${url} için` }); }, 2000); // 2 saniye gecikme }); } async function getDataFromApi() { console.log('API\'den veri çekiliyor...'); const result = await simulateNetworkRequest('https://api.example.com/users'); console.log('Çekilen veri:', result); console.log('Veri çekme işlemi tamamlandı.'); } getDataFromApi(); // Beklenen Çıktı: // API'den veri çekiliyor... // (2 saniye sonra) // Veri https://api.example.com/users adresinden başarıyla çekildi. // Çekilen veri: { id: 1, data: 'Veri https://api.example.com/users için' } // Veri çekme işlemi tamamlandı. softmush.com Örnek 2: Hata Yönetimi Asenkron işlemlerde hata yönetimi kritik öneme sahiptir. try...catch blokları, await ile tetiklenen Promise reddedilmelerini yakalamak için kullanılır. function simulateFailedNetworkRequest(url) { return new Promise((resolve, reject) => { setTimeout(() => { if (Math.random() > 0.5) { // Rastgele hata simülasyonu reject(new Error(`Hata: ${url} adresinden veri çekilemedi.`)); } else { resolve({ id: 2, data: `Başarılı veri ${url} için` }); } }, 1500); }); } async function fetchDataWithErrorHandling() { console.log('Hata yönetimi ile veri çekiliyor...'); try { const data = await simulateFailedNetworkRequest('https://api.example.com/products'); console.log('Çekilen veri:', data); } catch (error) { console.error('Bir hata oluştu:', error.message); } finally { console.log('Veri çekme girişimi sonlandı.'); } } fetchDataWithErrorHandling(); // Beklenen Çıktı (başarılı olursa): // Hata yönetimi ile veri çekiliyor... // (1.5 saniye sonra) // Çekilen veri: { id: 2, data: 'Başarılı veri https://api.example.com/products için' } // Veri çekme girişimi sonlandı. // Beklenen Çıktı (hata olursa): // Hata yönetimi ile veri çekiliyor... // (1.5 saniye sonra) // Bir hata oluştu: Hata: https://api.example.com/products adresinden veri çekilemedi. // Veri çekme girişimi sonlandı. softmush.com Örnek 3: Paralel Asenkron İşlemler Birden fazla asenkron işlemi aynı anda başlatmak ve hepsinin tamamlanmasını beklemek için Promise.all() kullanılabilir. Bu, bekleme sürelerini optimize eder. function fetchResource(resourceName, delay) { return new Promise(resolve => { setTimeout(() => { console.log(`${resourceName} çekildi.`); resolve(`${resourceName} verisi`); }, delay); }); } async function fetchMultipleResources() { console.log('Kaynaklar paralel olarak çekiliyor...'); const [users, products, orders] = await Promise.all([ fetchResource('Kullanıcılar', 3000), // 3 saniye fetchResource('Ürünler', 1000), // 1 saniye fetchResource('Siparişler', 2000) // 2 saniye ]); console.log('Tüm kaynaklar çekildi.'); console.log('Kullanıcılar:', users); console.log('Ürünler:', products); console.log('Siparişler:', orders); } fetchMultipleResources(); // Beklenen Çıktı: // Kaynaklar paralel olarak çekiliyor... // (1 saniye sonra) Ürünler çekildi. // (2 saniye sonra) Siparişler çekildi. // (3 saniye sonra) Kullanıcılar çekildi. // Tüm kaynaklar çekildi. // Kullanıcılar: Kullanıcılar verisi // Ürünler: Ürünler verisi // Siparişler: Siparişler verisi softmush.com Önemli Notlar await Kullanımı: await anahtar kelimesi yalnızca async olarak işaretlenmiş fonksiyonların içinde kullanılabilir. Global kapsamda veya senkron fonksiyonlarda doğrudan await kullanmaya çalışmak sözdizimi hatasına yol açacaktır. async Fonksiyonların Dönüş Değeri: Her async fonksiyon, döndürdüğü değeri otomatik olarak bir Promise içine sarar. Eğer bir değer döndürülmezse, Promise.resolve(undefined) döndürülür. Hata Yönetimi: async/await ile hata yönetimi için try...catch blokları kullanmak, senkron koddaki hata yönetimine benzer bir yapı sunarak kodu daha okunabilir hale getirir. Promise reddedildiğinde, await bir hata fırlatır ve bu catch bloğu tarafından yakalanır. Promise.all() ve Paralellik: Birden fazla bağımsız asenkron işlemi paralel olarak yürütmek ve hepsinin sonucunu beklemek için Promise.all() kullanın. Bu, toplam yürütme süresini önemli ölçüde azaltabilir. Eğer işlemlerden herhangi biri reddedilirse, Promise.all() hemen reddedilerek hatayı döndürür. Bloke Edici Olmayan (Non-blocking) Yapı: Asenkron işlemler, uzun süren görevlerin ana iş parçacığını bloke etmesini engeller. Bu sayede uygulamanız kullanıcı etkileşimlerine yanıt vermeye devam eder ve daha akıcı bir kullanıcı deneyimi sunar. Callback Hell'den Kaçınma: async/await, iç içe geçmiş yoğun geri çağırma (callback) fonksiyonlarından kaynaklanan "callback hell" sorununu çözmek için modern ve daha temiz bir alternatif sunar. Bu, kodun okunabilirliğini ve bakımını büyük ölçüde iyileştirir.
avatar
Emin
8
0
HTML Makaleleri
html-dilinde-html-dosya-yollarinin-kullanimi
HTML Dilinde HTML Dosya Yollarının Kullanımı
Web belgeleri içerisinde harici kaynaklara, örneğin görsellere, stil sayfalarına veya JavaScript dosyalarına referans vermek, modern web geliştirmenin temelini oluşturur. Bu referanslar, tarayıcının belirtilen kaynağı doğru bir şekilde bulabilmesi için dosya yolları (file paths) aracılığıyla tanımlanır. HTML'de dosya yollarının doğru kullanımı, sitenizin işlevselliği, performans kalitesi ve sürdürülebilirliği açısından kritik öneme sahiptir. Temel Sözdizimi HTML'de dosya yolları temelde iki ana kategoriye ayrılır: göreceli (relative) yollar ve mutlak (absolute) yollar. Her iki yol türünün de kendine özgü kullanım senaryoları ve sözdizimleri mevcuttur. Göreceli Yollar: Mevcut HTML dosyasının konumuna bağlı olarak hedeflenen kaynağın konumunu belirtir. Sözdizimi, mevcut dizine göre ileri, geri veya aynı dizin içinde gezinmeyi içerir. softmush.com Mutlak Yollar: İki alt kategoriye ayrılır: kök-göreceli (root-relative) yollar ve tam URL (full URL) yollar. Kök-Göreceli Yollar: Web sitesinin kök dizininden (root directory) başlayarak kaynağın konumunu belirtir. Bir eğik çizgi (/) ile başlar. softmush.com Tam URL Yollar: Protokol (http:// veya https://), alan adı ve kaynağın tam yolu dahil olmak üzere, kaynağın internet üzerindeki tam adresini belirtir. Genellikle harici kaynaklar veya CDN'ler için kullanılır. Example Sayfası softmush.com Detaylı Açıklama Dosya yollarındaki çeşitli gösterimlerin anlamları aşağıdaki gibidir: dosya.html veya resim.jpg: Bu gösterim, referans verilen dosyanın mevcut HTML dosyasının bulunduğu aynı dizinde olduğunu belirtir. Örneğin, index.html ve resim.jpg aynı klasördeyse, yeterlidir. klasor/dosya.html veya css/stil.css: Bu gösterim, referans verilen dosyanın mevcut dizin içindeki belirtilen alt dizinde olduğunu ifade eder. Örneğin, index.html'den css adlı bir alt klasördeki stil.css dosyasına erişmek için href="css/stil.css" kullanılır. ./klasor/dosya.html: Başındaki ./, mevcut dizini (current directory) temsil eder. Bu, klasor/dosya.html ile aynı anlama gelir ancak bazen okunabilirliği artırmak veya mevcut dizini açıkça belirtmek için kullanılır. Çoğu durumda isteğe bağlıdır. ../klasor/dosya.html: ../ gösterimi, mevcut dizinin bir üst dizinini (parent directory) ifade eder. Kaynak, mevcut dosyanın bulunduğu dizinin bir seviye yukarısındaki bir dizinde veya onun alt dizinlerinde yer alıyorsa kullanılır. Örneğin, proje/sayfalar/alt_sayfa.html dosyasından proje/resimler/foto.jpg'ye erişmek için src="../resimler/foto.jpg" kullanılır. /klasor/dosya.html: Başlangıçtaki /, web sitesinin kök dizinini (root directory) temsil eder. Bu tür yollar, sitenin herhangi bir yerinden kaynağa sabit bir şekilde erişim sağlar ve genellikle büyük sitelerde veya kalıcı bağlantılar için tercih edilir. Örneğin, /img/logo.png, web sitesinin kök dizinindeki img klasörünün içindeki logo.png dosyasını işaret eder. https://www.example.com/klasor/dosya.html: Bu, kaynağın tam URL'sini ifade eder. Web üzerindeki herhangi bir konumu işaret edebilir ve genellikle harici sitelerden veya CDN'lerden kaynak yüklemek için kullanılır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, farklı senaryolarda dosya yollarının HTML içerisinde nasıl kullanıldığını göstermektedir: Örnek 1: Aynı Dizin İçindeki Resim index.html ve banner.jpg aynı dizinde: softmush.com Örnek 2: Alt Dizin İçindeki Stil Dosyası index.html, css klasörü ve css/main.css: softmush.com Örnek 3: Üst Dizin İçindeki JavaScript Dosyası Dizin yapısı: proje/pages/hakkinda.html ve proje/js/script.js softmush.com Örnek 4: Kök-Göreceli Yolla Resim ve Bağlantı Web sitesinin kök dizininde img ve pages klasörleri var. img/logo.png ve pages/iletisim.html: İletişim softmush.com Örnek 5: Harici Kaynak (Tam URL) Bir CDN'den (Content Delivery Network) alınan bir JavaScript kütüphanesi: softmush.com Önemli Notlar Dizin Yapısı: Projenizin dizin yapısını iyi organize etmek, dosya yollarının yönetimini büyük ölçüde kolaylaştırır. Kaynakları mantıksal klasörlere ayırın (örn. img, css, js). Büyük/Küçük Harf Duyarlılığı: Bazı web sunucuları (özellikle Linux tabanlı olanlar) dosya adlarında ve yollarında büyük/küçük harf duyarlıdır. Örneğin, Resim.jpg ile resim.jpg farklı dosyalar olarak algılanabilir. Tutarlılık için genellikle küçük harf kullanılması tavsiye edilir. Kök-Göreceli Yolların Avantajları: Kök-göreceli yollar, sayfanın konumu değişse bile (örn. URL yeniden yazma veya sayfa derinliği) kaynaklara erişimi sabit tutar. Bu, büyük ve karmaşık sitelerde bağlantı yönetimini basitleştirir. Göreceli Yolların Dezavantajları: Göreceli yollar, HTML dosyasının konumu değiştiğinde bozulabilir. Geliştirme ortamında çalışırken pratik olsa da, dinamik URL yapılarına sahip sitelerde sorunlara yol açabilir. Boşluk ve Özel Karakterler: Dosya ve klasör adlarında boşluk veya özel karakterler (örn. #, &, %) kullanmaktan kaçının. Bu durumlar URL kodlaması gerektirebilir ve hatalara yol açabilir. Bunun yerine kısa çizgiler (-) veya alt çizgiler (_) tercih edin. Test Etme: Her zaman tüm dosya yollarınızı farklı tarayıcılarda ve farklı sunucu ortamlarında test edin. Geliştirme ortamınızda çalışan bir yol, üretim sunucusunda çalışmayabilir.
avatar
Emin
10
0
Python Makaleleri
python-dilinde-modullerin-etkin-kullanimi
Python Dilinde Modüllerin Etkin Kullanımı
Python programlama dili, kodun yeniden kullanılabilirliğini ve projelerin düzenini sağlamak amacıyla modül kavramını benimsemiştir. Modüller, Python kodunun organize edilmiş birimleridir ve fonksiyonlar, sınıflar, değişkenler gibi yapıları içerebilir. Bu yaklaşım, büyük ölçekli uygulamaların geliştirilmesini kolaylaştırır, kodu daha okunabilir hale getirir ve hata ayıklama sürecini optimize eder. Bir modül, esasen .py uzantılı bir dosyadır ve başka Python programları tarafından içe aktarılarak kullanılabilir. Bu rehber, Python dilinde modüllerin nasıl tanımlandığını, nasıl içe aktarıldığını ve etkin bir şekilde nasıl kullanıldığını adım adım açıklayacaktır. Temel Sözdizimi Python'da bir modülü veya modül içindeki belirli bileşenleri içe aktarmak için çeşitli sözdizimleri mevcuttur. Her bir sözdizimi, farklı kullanım senaryolarına hizmet eder. Tüm modülü içe aktarma: import module_namesoftmush.com Modülü bir takma ad (alias) ile içe aktarma: import module_name as alias_namesoftmush.com Modülden belirli nesneleri içe aktarma: from module_name import object_name_1, object_name_2softmush.com Modülden belirli bir nesneyi takma ad ile içe aktarma: from module_name import object_name as alias_namesoftmush.com Modüldeki tüm nesneleri içe aktarma (önerilmez): from module_name import *softmush.com Detaylı Açıklama import module_name: Bu ifade, belirtilen modülün tamamını mevcut kapsam içine alır. Modül içindeki fonksiyonlara, sınıflara veya değişkenlere erişmek için her zaman modül adını önek olarak kullanmak gerekir. Örneğin, math modülündeki sqrt fonksiyonuna math.sqrt() şeklinde erişilir. import module_name as alias_name: Bu yöntem, özellikle uzun modül adlarına sahip modüller için veya farklı modüllerden aynı isimde nesneler içe aktarılırken isim çakışmalarını önlemek amacıyla kullanılır. Modüle daha kısa veya daha açıklayıcı bir takma ad verilir. Kullanım örneği: alias_name.object_name. from module_name import object_name_1, object_name_2: Bu sözdizimi, bir modülün tamamını değil, yalnızca belirli fonksiyonlarını, sınıflarını veya değişkenlerini içe aktarır. İçe aktarılan nesneler doğrudan kendi isimleriyle kullanılabilir; modül adını önek olarak kullanmaya gerek kalmaz. Bu, kodun daha kısa ve okunabilir olmasını sağlayabilir. from module_name import object_name as alias_name: Bu, belirli bir nesneyi içe aktarırken ona bir takma ad atamanın yoludur. Özellikle içe aktarılan nesnenin adı mevcut kapsamdaki başka bir isimle çakışıyorsa veya daha kısa bir isimle kullanılmak isteniyorsa faydalıdır. from module_name import *: Bu ifade, belirtilen modüldeki tüm genel nesneleri (alt çizgi ile başlamayanlar) mevcut kapsam içine aktarır. Kodun kısalmasını sağlasa da, isim çakışmalarına (namespace pollution) neden olabileceği ve kodun okunabilirliğini azaltabileceği için genellikle önerilmez. Hangi nesnelerin içe aktarıldığını açıkça görmek zorlaşır. Pratik Kullanım Örnekleri Örnek 1: Standart math Modülünü Kullanma Bu örnek, Python'ın yerleşik math modülünü kullanarak basit matematiksel işlemlerin nasıl gerçekleştirileceğini gösterir. import math # Pi sayısına erişim print(f"Pi sayısı: {math.pi}") # Karekök hesaplama sayi = 16 karekok = math.sqrt(sayi) print(f"{sayi}'nin karekökü: {karekok}") # Faktöriyel hesaplama fakt = math.factorial(5) print(f"5'in faktöriyeli: {fakt}")softmush.com Örnek 2: random Modülünü Takma Ad ile Kullanma random modülünü rnd takma adıyla içe aktararak rastgele sayı üretimini gösteren bir örnektir. import random as rnd # 1 ile 100 arasında rastgele bir tam sayı üretme rastgele_sayi = rnd.randint(1, 100) print(f"Üretilen rastgele sayı: {rastgele_sayi}") # Rastgele bir eleman seçme liste = ["elma", "armut", "kiraz", "muz"] secilen_meyve = rnd.choice(liste) print(f"Seçilen meyve: {secilen_meyve}")softmush.com Örnek 3: datetime Modülünden Belirli Nesneleri İçe Aktarma datetime modülünden sadece date ve timedelta sınıflarını içe aktararak mevcut tarih ve gelecekteki bir tarihi hesaplama örneği. from datetime import date, timedelta # Bugünün tarihini alma bugun = date.today() print(f"Bugünün tarihi: {bugun}") # 7 gün sonraki tarihi hesaplama gelecek_tarih = bugun + timedelta(days=7) print(f"7 gün sonraki tarih: {gelecek_tarih}")softmush.com Örnek 4: Kendi Modülünüzü Oluşturma ve Kullanma Bu örnek, kendi .py dosyanızı (modülünüzü) oluşturup başka bir Python betiğinde nasıl kullanacağınızı gösterir. İlk olarak, my_module.py adında bir dosya oluşturalım: # my_module.py def selamla(isim): """Belirtilen ismi selamlayan bir fonksiyon.""" return f"Merhaba, {isim}!" def topla(a, b): """İki sayıyı toplayan bir fonksiyon.""" return a + b softmush.com Şimdi bu modülü main_app.py adında başka bir dosyada kullanalım (aynı dizinde olmalılar): # main_app.py import my_module # my_module'deki selamla fonksiyonunu kullanma mesaj = my_module.selamla("Dünya") print(mesaj) # my_module'deki topla fonksiyonunu kullanma sonuc = my_module.topla(10, 20) print(f"Toplam: {sonuc}") # Belirli bir fonksiyonu doğrudan içe aktarma from my_module import selamla print(selamla("Python"))softmush.com Önemli Notlar İsim Çatışmaları (Namespace Pollution): from module import * ifadesi, modüldeki tüm nesneleri doğrudan mevcut ad alanına getirir. Bu, kendi kodunuzdaki değişken veya fonksiyon isimleriyle çakışmalara yol açabilir ve hatalara neden olabilir. Bu nedenle, bu kullanım genellikle kaçınılması gereken bir pratiktir. Modül Arama Yolu (sys.path): Python, import ifadesiyle bir modül ararken belirli dizinlere bakar. Bu dizinler sys.path listesinde bulunur. Kendi modüllerinizin bulunabilmesi için ya mevcut çalışma dizininde olmaları ya da sys.path'e eklenmiş bir dizinde yer almaları gerekir. Göreceli İçe Aktarmalar (Relative Imports): Büyük projelerde, bir paketin içindeki alt modüller arasında içe aktarma yaparken göreceli içe aktarmalar (örneğin, from . import other_module veya from .. import parent_module) kullanılır. Bu, kodun taşınabilirliğini artırır. Modül Yeniden Yükleme: Bir modülü değiştirdikten sonra, Python yorumlayıcısını yeniden başlatmadan değişiklikleri görmek için importlib.reload(module_name) kullanılabilir. Ancak bu, genellikle geliştirme aşamasında kullanılır ve üretim kodunda nadiren ihtiyaç duyulur. Modül Adlandırma Kuralları: Python topluluğunda kabul görmüş adlandırma standartlarına (PEP 8) uymak önemlidir. Modül adları genellikle küçük harflerle ve alt çizgilerle ayrılmış kelimelerle (snake_case) yazılır (örneğin, my_utility_module.py). Döngüsel İçe Aktarmalar (Circular Imports): İki veya daha fazla modülün birbirini doğrudan veya dolaylı olarak içe aktarması durumunda döngüsel içe aktarma oluşur. Bu durum, çalışma zamanı hatalarına yol açabilir ve kodun anlaşılmasını zorlaştırır. Tasarımda bu tür döngülerden kaçınılmalıdır.
avatar
Emin
18
0
SQL Makaleleri
sql-dilinde-sql-aliases-kullanimi
SQL Dilinde SQL Aliases Kullanımı
SQL (Yapısal Sorgu Dili), veritabanlarından bilgi almak, yönetmek ve değiştirmek için kullanılan güçlü bir dildir. Büyük ve karmaşık veritabanlarıyla çalışırken, sorguların anlaşılırlığı ve bakımı kritik öneme sahiptir. İşte bu noktada SQL Aliases (takma adlar) devreye girer. Aliases, tablolara veya sütunlara geçici olarak farklı bir ad atamanıza olanak tanır. Bu sayede sorgularınız daha kısa, daha okunabilir ve aynı zamanda daha yönetilebilir hale gelir. Özellikle uzun tablo adları, karmaşık sütun ifadeleri veya birden fazla tablonun birleştirildiği durumlarda aliases kullanımı, sorgu mantığını netleştirmek için vazgeçilmez bir araçtır. Sözdizimi SQL Aliases kullanımı iki ana formda incelenebilir: sütun aliases ve tablo aliases. Sütun Aliases: SELECT column_name AS alias_name FROM table_name;softmush.com veya SELECT column_name alias_name FROM table_name;softmush.com Tablo Aliases: SELECT alias_name.column_name FROM table_name AS alias_name;softmush.com veya SELECT alias_name.column_name FROM table_name alias_name;softmush.com Detaylı Açıklama Her iki alias türü de sorgunun kapsamı içinde geçerli olan geçici isimler atar ve veritabanındaki gerçek tablo veya sütun adlarını değiştirmez. AS Anahtar Kelimesi: Sütun veya tablo aliases tanımlarken AS anahtar kelimesi isteğe bağlıdır. Ancak, sorgu okunabilirliğini artırdığı için genellikle kullanılması tavsiye edilir. Örneğin, SELECT column_name AS alias_name ifadesi, SELECT column_name alias_name ifadesine göre daha açıklayıcıdır. Sütun Aliases: Bir sütuna veya bir sütun ifadesine (örneğin, iki sütunun birleştirilmesi veya bir matematiksel işlem sonucu) geçici bir ad vermek için kullanılır. Bu, özellikle raporlama amacıyla daha anlamlı ve kullanıcı dostu başlıklar oluşturmak veya hesaplanmış değerlere kolayca referans vermek istediğinizde faydalıdır. Eğer takma ad boşluk içeriyorsa veya özel karakterler barındırıyorsa, çift tırnak (") veya köşeli parantez ([]) içine alınması gerekebilir (veritabanı sistemine göre değişir). Tablo Aliases: Bir tabloya geçici bir ad vermek için kullanılır. Bu, genellikle karmaşık sorgularda, özellikle JOIN işlemleriyle birden fazla tablo birleştirildiğinde veya bir tablonun kendi kendine birleştirildiği (self-join) durumlarda sorguyu kısaltmak ve sütun adları arasındaki belirsizliği ortadan kaldırmak için çok kullanışlıdır. Tablo takma adları, sorgunun FROM veya JOIN bölümlerinde tanımlanır ve sorgunun geri kalanında tabloya bu takma ad ile referans verilir. Pratik Kullanım Örnekleri Aşağıdaki örnekler, SQL Aliases'ın farklı senaryolarda nasıl kullanıldığını göstermektedir. Örneklerde Musteriler (MusteriID, Ad, Soyad, Email) ve Siparisler (SiparisID, MusteriID, SiparisTarihi, ToplamTutar) adında iki tablonun var olduğu varsayılmıştır. Örnek 1: Sütun Takma Adı ile Daha Okunabilir Çıktı Müşterilerin ad ve soyadını tek bir sütunda 'Tam Adı' olarak görmek isteyelim. SELECT Ad AS MusteriAdi, Soyad AS MusteriSoyadi, Ad || ' ' || Soyad AS TamAdi FROM Musteriler;softmush.com Bu sorgu, Ad sütununu MusteriAdi, Soyad sütununu MusteriSoyadi ve Ad ile Soyad'ı birleştirerek oluşan ifadeyi TamAdi olarak döndürür. Örnek 2: Tablo Takma Adları ile JOIN Sorgusunu Kısaltma Müşteri adlarını ve yaptıkları siparişlerin toplam tutarlarını listelemek isteyelim. SELECT m.Ad, m.Soyad, s.SiparisID, s.ToplamTutar FROM Musteriler AS m JOIN Siparisler AS s ON m.MusteriID = s.MusteriID WHERE s.ToplamTutar > 100;softmush.com Burada Musteriler tablosuna m, Siparisler tablosuna ise s takma adı verilmiştir. Bu sayede sorgu içindeki referanslar (örneğin m.Ad yerine Musteriler.Ad) daha kısa ve nettir. Örnek 3: Hesaplanan Sütuna Takma Ad Verme Her siparişin ortalama tutarını hesaplayıp, bu ortalamayı 'Ortalama Sipariş Tutarı' olarak adlandıralım. SELECT AVG(ToplamTutar) AS "Ortalama Sipariş Tutarı" FROM Siparisler;softmush.com Bu örnekte, hesaplanan AVG(ToplamTutar) değerine "Ortalama Sipariş Tutarı" adını verdik. Takma ad boşluk içerdiği için çift tırnak kullanılmıştır. Örnek 4: Self-Join (Kendine Birleştirme) ile Takma Ad Kullanımı Aynı şehirden iki farklı müşteriyi bulmak isteyelim (Musteriler tablosunda bir de Sehir sütunu olduğunu varsayalım). SELECT m1.Ad AS Musteri1_Ad, m1.Soyad AS Musteri1_Soyad, m2.Ad AS Musteri2_Ad, m2.Soyad AS Musteri2_Soyad, m1.Sehir FROM Musteriler AS m1 JOIN Musteriler AS m2 ON m1.Sehir = m2.Sehir AND m1.MusteriID m2.MusteriID;softmush.com Musteriler tablosunu iki farklı takma ad (m1 ve m2) ile kendi kendine birleştirerek, aynı şehirden farklı müşterileri bulabiliyoruz. Takma adlar, hangi sütunun hangi 'versiyon'dan geldiğini netleştirmeye yardımcı olur. Önemli Notlar Geçici Kapsam: Aliases, yalnızca oluşturuldukları sorgunun yürütülmesi boyunca geçerlidir. Veritabanının şemasını kalıcı olarak değiştirmezler. AS İsteğe Bağlıdır: Çoğu SQL veritabanında AS anahtar kelimesi, hem sütun hem de tablo takma adları için isteğe bağlıdır. Ancak, sorgunun okunabilirliğini artırmak için kullanılması şiddetle tavsiye edilir. Boşluklu veya Özel Karakterli Takma Adlar: Eğer bir takma ad boşluk içeriyorsa veya özel karakterler barındırıyorsa (örneğin, "Toplam Satışlar"), veritabanı sisteminize bağlı olarak çift tırnak ("), köşeli parantez ([]) veya ters tırnak (` `) içine alınması gerekebilir. Kullanım Kısıtlamaları: Sütun takma adları genellikle SELECT, ORDER BY ve GROUP BY yan tümcelerinde kullanılabilir. Ancak, çoğu veritabanı sisteminde WHERE yan tümcesinde doğrudan kullanılamazlar. Bunun nedeni, WHERE yan tümcesi işlenirken sütun takma adlarının henüz tanımlanmamış olmasıdır. Bu tür durumlarda, takma adı içeren ifadeyi tekrar yazmanız veya bir alt sorgu (subquery) kullanmanız gerekebilir. Okunabilirlik ve Karmaşıklık: Aliases, sorguları kısaltarak ve anlaşılır hale getirerek okunabilirliği artırır. Ancak, aşırı kısa veya anlamsız takma adlar (örneğin, a, b gibi) kullanmak, sorguyu başka bir geliştiricinin anlamasını zorlaştırabilir. İyi adlandırılmış takma adlar seçmek önemlidir.
avatar
Emin
6
0
CSS Makaleleri
css-overflow-ozelligi-icerik-tasmasini-yonetme
CSS Overflow Özelliği: İçerik Taşmasını Yönetme
Web tasarımında, bir elementin içeriğinin ayrılan alana sığmadığı durumlar sıkça karşılaşılır. CSS'in overflow özelliği, bu tür içerik taşmalarını yönetmek için güçlü bir mekanizma sunar. Bu özellik, bir elementin içeriği, belirtilen boyutlarından daha büyük olduğunda ne olacağını kontrol etmeyi sağlar. Doğru kullanıldığında, overflow özelliği web sayfalarının düzenini korurken kullanıcı deneyimini önemli ölçüde iyileştirebilir. Bu makale, overflow özelliğinin sözdizimini, değerlerini ve pratik kullanım senaryolarını detaylı bir şekilde inceleyecektir. Sözdizimi overflow özelliği, bir elementin içeriğinin kutusunun dışına taştığı zaman ne olacağını belirler. Bu özellik hem yatay (overflow-x) hem de dikey (overflow-y) taşmaları ayrı ayrı kontrol etmek için kullanılabilir, veya kısa yol olarak overflow tek başına her iki yönü de aynı anda etkileyebilir. selector { overflow: visible | hidden | scroll | auto | initial | inherit; overflow-x: visible | hidden | scroll | auto | initial | inherit; /* Yatay taşmayı kontrol eder */ overflow-y: visible | hidden | scroll | auto | initial | inherit; /* Dikey taşmayı kontrol eder */ } softmush.com Detaylı Açıklama overflow özelliğinin alabileceği anahtar kelime değerleri ve bunların anlamları aşağıda açıklanmıştır. visible: Varsayılan değerdir. İçerik, elementin kutusunun dışına taşsa bile görünür kalır. Bu durum, diğer elementlerin üzerine binebilir ve sayfa düzenini bozabilir. hidden: İçeriğin elementin kutusunun dışına taşan kısımlarını gizler. Kullanıcı bu gizli içeriğe erişemez. scroll: Hem yatay hem de dikey yönlerde kaydırma çubukları ekler, içerik taşsın veya taşmasın. Bu, her zaman kaydırma çubuklarının görünür olacağı anlamına gelir, bu da bazen görsel tutarsızlığa neden olabilir. auto: Yalnızca içerik taştığında kaydırma çubuklarını ekler. Yatay veya dikey taşma varsa, ilgili kaydırma çubuğu görünür hale gelir. Bu genellikle en esnek ve kullanıcı dostu seçenektir. overlay: scroll ile benzerdir ancak kaydırma çubukları içeriğin üzerine biner, bu da içeriğin boyutunu küçültmez. Modern tarayıcılarda bu genellikle auto ile aynı şekilde davranır, ancak eski tarayıcılarda farklılık gösterebilir. initial: Özelliği varsayılan değerine ayarlar (visible). inherit: Özelliği üst elementinden miras alır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, overflow özelliğinin farklı değerlerinin nasıl çalıştığını göstermektedir. Her örnekte, .container sınıfına sahip bir elementi, belirli bir genişlik ve yüksekliğe sahip olup, içine sığmayan uzun bir metin içerir. Örnek 1: overflow: visible; (Varsayılan Davranış) Bu örnekte, içerik elementin dışına taşacak ve görünür kalacaktır. Bu metin, kabın belirlenen boyutlarından çok daha uzundur. overflow: visible; değeri nedeniyle, metin kabın dışına taşacak ve tamamen görünür kalacaktır. Bu, diğer sayfa elementleriyle çakışmalara neden olabilir ve genel düzeni bozabilir. Web sayfalarında bu varsayılan davranışı kontrol etmek önemlidir. /* CSS Kodu */ .visible-example { width: 200px; height: 100px; border: 2px solid #ccc; overflow: visible; /* Varsayılan değer */ } softmush.com Örnek 2: overflow: hidden; İçeriğin taşan kısımları gizlenecektir. Kullanıcı bu kısımları göremez veya erişemez. Bu metin, kabın belirlenen boyutlarından çok daha uzundur. overflow: hidden; değeri nedeniyle, kabın dışına taşan kısımlar tamamen gizlenecektir. Kullanıcı bu gizli içeriğe hiçbir şekilde erişemez. Bu, içeriğin önemli bir bölümünün kaybolmasına yol açabilir. /* CSS Kodu */ .hidden-example { width: 200px; height: 100px; border: 2px solid #ccc; overflow: hidden; } softmush.com Örnek 3: overflow: scroll; Taşma olsun olmasın, her zaman kaydırma çubukları görünecektir. Bu metin, kabın belirlenen boyutlarından çok daha uzundur. overflow: scroll; değeri sayesinde, içeriğe erişmek için her zaman kaydırma çubukları görünecektir, içerik taşsa da taşmasa da. Hem yatay hem de dikey kaydırma çubukları her zaman mevcuttur. Bu, tutarlı bir kullanıcı arayüzü sağlayabilir ancak bazen gereksiz kaydırma çubuklarına yol açabilir. /* CSS Kodu */ .scroll-example { width: 200px; height: 100px; border: 2px solid #ccc; overflow: scroll; } softmush.com Örnek 4: overflow: auto; Yalnızca içerik taştığında kaydırma çubukları görünecektir. Bu, genellikle en iyi uygulamadır. Bu metin, kabın belirlenen boyutlarından çok daha uzundur. overflow: auto; değeri en esnek çözümü sunar; sadece içerik taştığında ilgili kaydırma çubukları (yatay veya dikey) görünür hale gelir. İçerik sığıyorsa, kaydırma çubukları görünmez. Bu, kullanıcı deneyimini optimize eder. /* CSS Kodu */ .auto-example { width: 200px; height: 100px; border: 2px solid #ccc; overflow: auto; } softmush.com Örnek 5: overflow-x ve overflow-y kullanımı Bu örnekte, yatay taşma gizlenirken dikey taşma için kaydırma çubuğu eklenecektir. Bu metin, özellikle yatayda çok uzun, dikeyde ise normalden biraz daha uzundur. overflow-x: hidden; ve overflow-y: scroll; değerleri ile yatay taşma gizlenecek, ancak dikey taşma için kaydırma çubuğu her zaman görünür olacaktır. Bu, farklı yönlerde farklı taşma davranışları gerektiğinde faydalıdır. /* CSS Kodu */ .specific-example { width: 150px; height: 100px; border: 2px solid #ccc; white-space: nowrap; /* Metnin yatayda taşmasını sağlamak için */ overflow-x: hidden; overflow-y: scroll; } softmush.com Önemli Notlar overflow özelliğini kullanırken, elemente mutlaka bir width veya max-width ile height veya max-height değeri atamanız önemlidir. Aksi takdirde, element içeriğine göre genişleyip daralacağı için taşma durumu oluşmayabilir. overflow: hidden; kullanırken dikkatli olun. Önemli içeriğin kullanıcıdan gizlenmesine neden olabilir ve erişilebilirlik sorunları yaratabilir. overflow: scroll; her zaman kaydırma çubukları göstereceği için, içeriğin taşmadığı durumlarda bile gereksiz görsel öğeler yaratabilir. Genellikle overflow: auto; daha iyi bir kullanıcı deneyimi sunar. Satır içi elementler (, vb.) için overflow özelliği doğrudan uygulanamaz. Bu elementlerin display özelliği block, inline-block veya flex gibi bir değere ayarlanmalıdır. position: absolute; veya position: fixed; ile konumlandırılmış alt elementler, üst elementlerinin overflow özelliğinden etkilenmeyebilir. Bu durum, taşma bağlamını (stacking context) anlamayı gerektirir. Özellikle mobil cihazlarda kaydırma çubuklarının görünümü ve davranışı tarayıcılar arasında farklılık gösterebilir. Kaydırma çubuklarını özelleştirmek için tarayıcı önekli CSS özellikleri kullanılabilir (örneğin, Webkit tabanlı tarayıcılar için ::-webkit-scrollbar).
avatar
Emin
11
0
Python Makaleleri
python-dilinde-python-iterators-kullanimi
Python Dilinde Python Iterators Kullanımı
Python'da iterators (yineleyiciler), verimli ve bellek dostu bir şekilde veri koleksiyonları üzerinde gezinmek için temel bir mekanizma sunar. Bu kavram, listeler, demetler, dizeler gibi standart koleksiyon türlerinin ve özel veri yapılarının nasıl döngülenebildiğini anlamak için hayati öneme sahiptir. Bir iterator, bir dizi veri üzerinde adım adım ilerlemeyi sağlayan bir nesnedir ve Python'ın for döngülerinin arkasındaki gücü temsil eder. Bu makale, Python iterators kavramını, temel sözdizimini ve pratik uygulama yöntemlerini detaylı bir şekilde açıklayacaktır. Sözdizimi Python'da bir iterator oluşturmak ve kullanmak için temel olarak iki ana fonksiyon ve özel metotlar bulunur: iter(): Bir nesneden bir iterator elde etmek için kullanılır. next(): Bir iteratörden bir sonraki öğeyi almak için kullanılır. Kendi iterator'ınızı tanımlamak istediğinizde, sınıfınızda aşağıdaki özel metotları (`dunder metotlar`) uygulamanız gerekmektedir: __iter__(self): Bu metot, bir iteratör nesnesi döndürmelidir. Genellikle, bu metot çağrıldığında `self` (nesnenin kendisi) döndürülür. __next__(self): Bu metot, bir sonraki öğeyi döndürmelidir. Tüm öğeler tüketildiğinde, StopIteration istisnasını yükseltmelidir. Detaylı Açıklama Bir iterable (yinelenebilir) nesne, üzerinde döngü yapılabilecek herhangi bir nesnedir; yani, bu nesneden bir iterator elde edilebilir. Listeler, demetler, dizeler ve sözlükler Python'daki yaygın yinelenebilir nesnelerdir. Bu nesneler, __iter__() metodunu uygularlar ve bu metot çağrıldığında kendilerinden bir iterator nesnesi döndürürler. Bir iterator ise, bir iterable nesneden elde edilen ve durumu hatırlayabilen bir nesnedir. Iterator nesnesinin __next__() metodu vardır. Bu metot her çağrıldığında, iterator'ın temsil ettiği veri dizisinden bir sonraki öğeyi verir. Dizide başka öğe kalmadığında, __next__() metodu otomatik olarak StopIteration istisnasını yükseltir. Bu istisna, döngü mekanizmalarına (örneğin for döngüsüne) öğelerin tükendiğini bildirir. for döngüsü, perde arkasında bu mekanizmayı kullanır: Öncelikle, döngü yapılacak nesne üzerinde iter() fonksiyonunu çağırarak bir iterator elde eder. Ardından, her döngü adımında bu iterator üzerinde next() fonksiyonunu çağırır. StopIteration istisnası yükseltildiğinde döngüyü sonlandırır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, Python iterators'ın nasıl çalıştığını ve nasıl kendi iterator'ınızı oluşturabileceğinizi göstermektedir. Örnek 1: Standart Bir Iterable Üzerinde Iterator Kullanımı Bir liste üzerinde iter() ve next() fonksiyonlarının doğrudan kullanımını inceleyelim. # Bir iterable liste tanımlayın my_list = [10, 20, 30, 40] # Listeden bir iterator elde edin my_iterator = iter(my_list) # next() fonksiyonunu kullanarak öğeleri tek tek alın print(next(my_iterator)) # Çıktı: 10 print(next(my_iterator)) # Çıktı: 20 print(next(my_iterator)) # Çıktı: 30 print(next(my_iterator)) # Çıktı: 40 # Tüm öğeler tüketildiğinde StopIteration istisnası yükselir # print(next(my_iterator)) # Hata: StopIteration softmush.com Örnek 2: Kendi Iterator Sınıfınızı Oluşturma Belirli bir aralıktaki sayıları üreten özel bir iterator sınıfı tanımlayalım. class MyRangeIterator: def __init__(self, start, end): self.current = start self.end = end def __iter__(self): # Iterator nesnesinin kendisini döndürür return self def __next__(self): if self.current < self.end: # Mevcut değeri döndür ve bir sonraki adıma hazırla value = self.current self.current += 1 return value else: # Aralık bittiğinde StopIteration yükselt raise StopIteration # Kendi iterator sınıfımızı kullanarak bir nesne oluşturalım my_custom_range = MyRangeIterator(1, 5) # for döngüsü ile iterator'ı kullanalım print("For döngüsü ile:") for num in my_custom_range: print(num) # Çıktı: 1 2 3 4 # Iterator bir kez tüketildikten sonra tekrar kullanılamaz (yeni bir nesne oluşturulmalı) print("\nManuel next() ile (yeni iterator):") my_custom_range_manual = MyRangeIterator(1, 3) print(next(my_custom_range_manual)) # Çıktı: 1 print(next(my_custom_range_manual)) # Çıktı: 2 # print(next(my_custom_range_manual)) # Hata: StopIteration softmush.com Önemli Notlar Iterable ve Iterator Farkı: Bir iterable, üzerinde döngü yapılabilecek bir nesnedir (__iter__() metoduna sahiptir). Bir iterator ise, bu iterable'dan elde edilen ve bir sonraki öğeyi döndürme yeteneğine sahip olan (__next__() metoduna sahip) bir nesnedir. Her iterator bir iterable'dır, ancak her iterable bir iterator değildir. Bellek Verimliliği: Iteratorlar, tüm veri kümesini belleğe yüklemek yerine, öğeleri talep edildiğinde birer birer ürettikleri için özellikle büyük veri kümeleriyle çalışırken bellek dostu bir çözüm sunar. Bu, "lazy evaluation" (tembel değerlendirme) prensibine dayanır. StopIteration İstisnası: Bu istisna, bir iterator'ın tüm öğelerini tüketmesi durumunda __next__() metodu tarafından otomatik olarak yükseltilir. Bu, Python'daki döngü mekanizmalarının döngüyü güvenli bir şekilde sonlandırmasını sağlar. Tek Kullanımlık Yapı: Çoğu iterator, öğeleri bir kez tükettikten sonra sıfırlanmaz ve tekrar kullanılamaz. Eğer aynı veri kümesi üzerinde tekrar döngü yapmak isterseniz, iterable nesneden yeni bir iterator elde etmeniz gerekir. Generator'lar ile İlişkisi: Python'da generator'lar, iterator oluşturmanın daha basit ve kısa bir yoludur. yield anahtar kelimesi kullanılarak tanımlanan generator fonksiyonları veya generator ifadeleri, otomatik olarak bir iterator döndürür ve __iter__() ile __next__() metotlarını sizin yerinize yönetir.
avatar
Emin
24
0
SQL Makaleleri
sql-dilinde-between-operatoru-aralik-bazli-veri-sorgulama
SQL Dilinde BETWEEN Operatörü: Aralık Bazlı Veri Sorgulama
SQL, ilişkisel veritabanlarını yönetmek ve sorgulamak için kullanılan güçlü bir dildir. Veri tabanlarından belirli koşullara uyan kayıtları çekmek, analitik ve raporlama süreçlerinin temelini oluşturur. Bu bağlamda, belirli bir aralıktaki değerleri filtrelemek için kullanılan BETWEEN operatörü, sorguları daha okunabilir ve etkili hale getiren önemli bir araçtır. Bu makale, BETWEEN operatörünün sözdizimini, detaylı kullanımını ve pratik örneklerini ele alacaktır. Sözdizimi BETWEEN operatörünün temel sözdizimi aşağıdaki gibidir: SELECT kolon1, kolon2, ... FROM tablo_adi WHERE kolon_adi BETWEEN deger1 AND deger2;softmush.com Detaylı Açıklama Yukarıdaki sözdiziminde yer alan her bir bileşenin anlamı aşağıda açıklanmıştır: SELECT kolon1, kolon2, ...: Sorgu sonucunda gösterilmesini istediğiniz kolonları belirtirsiniz. Tüm kolonları seçmek için * kullanabilirsiniz. FROM tablo_adi: Verilerin çekileceği tablonun adını belirtir. WHERE kolon_adi: Filtreleme koşulunun uygulanacağı kolonu belirtir. Bu kolon, sayısal, metin veya tarih/saat veri tipinde olabilir. BETWEEN: Belirtilen aralığın başlangıcını ve sonunu dahil ederek bir koşul oluşturduğunu belirten anahtar kelimedir. deger1: Aralık başlangıç değeridir. Bu değer, kolon_adi ile aynı veri tipinde olmalıdır. AND: BETWEEN operatörü ile birlikte kullanılan ve aralık bitiş değerini belirten mantıksal operatördür. deger2: Aralık bitiş değeridir. Bu değer de kolon_adi ile aynı veri tipinde olmalıdır. BETWEEN operatörü, deger1 ve deger2 dahil olmak üzere, bu iki değer arasındaki tüm kayıtları döndürür. Mantıksal olarak, kolon_adi >= deger1 AND kolon_adi = ve = 50 AND Fiyat
avatar
Emin
13
0
JavaScript Makaleleri
javascript-siniflari-classes-kullanim-rehberi
JavaScript Sınıfları (Classes) Kullanım Rehberi
JavaScript, ES6 (ECMAScript 2015) ile birlikte nesne yönelimli programlama (OOP) ilkelerini daha net ve tanıdık bir sözdizimi ile uygulamak için sınıfları (classes) tanıttı. Sınıflar, prototip tabanlı kalıtım üzerine inşa edilmiş sentaktik bir şeker (syntactic sugar) olup, nesne oluşturmak ve kalıtımı yönetmek için daha anlaşılır bir yapı sunar. Bu makale, JavaScript sınıflarının temel kullanımını, sözdizimini ve pratik uygulamalarını detaylı bir şekilde ele alacaktır. Temel Sözdizimi class SınıfAdı { constructor(parametre1, parametre2) { this.özellik1 = parametre1; this.özellik2 = parametre2; } metotAdı(argüman) { // Metot içeriği return this.özellik1 + argüman; } get getterAdı() { return this.özellik1; } set setterAdı(yeniDeğer) { this.özellik1 = yeniDeğer; } static statikMetot() { return "Bu bir statik metottur."; } } softmush.com Detaylı Açıklama JavaScript sınıfları, bir nesnenin nasıl oluşturulacağını tanımlayan bir şablon görevi görür. Temel bileşenleri şunlardır: class Anahtar Kelimesi: Bir sınıf tanımlamak için kullanılır. Sınıf adı genellikle büyük harfle başlar (PascalCase). constructor() Metodu: Bir sınıfın özel bir metodudur. Sınıftan yeni bir nesne (instance) oluşturulduğunda otomatik olarak çağrılır. Nesnenin başlangıç durumunu (özelliklerini) ayarlamak için kullanılır. Eğer bir sınıf için açıkça bir constructor tanımlanmazsa, JavaScript varsayılan, boş bir constructor ekler. Özellikler (Properties): Sınıf örneklerinin sahip olduğu verilerdir. constructor içinde this.özellikAdı = değer; şeklinde tanımlanır ve her örnek için benzersiz olabilir. Metotlar (Methods): Sınıf örneklerinin gerçekleştirebileceği eylemleri tanımlayan fonksiyonlardır. metotAdı(argümanlar) { ... } şeklinde tanımlanır ve sınıfın prototipine eklenir. Getter ve Setter Metotları: Özelliklerin değerlerine kontrollü erişim sağlamak için kullanılırlar. Bir özelliğin değerini okumak için get, değiştirmek için set anahtar kelimeleriyle tanımlanırlar. Bunlar aslında birer fonksiyon olmasına rağmen, özellik gibi erişilirler. Statik Metotlar (Static Methods): Bir sınıfın kendisine ait olan, ancak sınıfın örneklerine ait olmayan metotlardır. Bu metotlar, sınıfın adıyla doğrudan çağrılır ve genellikle sınıfın örneklerine özgü olmayan yardımcı fonksiyonlar veya fabrika metotları için kullanılır. static anahtar kelimesiyle tanımlanır. Pratik Kullanım Örnekleri Örnek 1: Temel Sınıf Tanımlama ve Kullanımı Aşağıdaki örnek, bir Kişi sınıfının nasıl tanımlandığını ve bu sınıftan nasıl nesneler oluşturulduğunu göstermektedir. Ayrıca sınıfın metotlarının nasıl çağrıldığını da içerir. class Kişi { constructor(ad, soyad, yaş) { this.ad = ad; this.soyad = soyad; this.yaş = yaş; } tamAdGetir() { return `${this.ad} ${this.soyad}`; } yaşınıArtır() { this.yaş++; console.log(`${this.tamAdGetir()} şimdi ${this.yaş} yaşında.`); } } // Sınıftan yeni bir nesne oluşturma const kişi1 = new Kişi("Ali", "Can", 30); console.log(kişi1.tamAdGetir()); // Çıktı: Ali Can const kişi2 = new Kişi("Ayşe", "Yılmaz", 25); kişi2.yaşınıArtır(); // Çıktı: Ayşe Yılmaz şimdi 26 yaşında. softmush.com Örnek 2: Kalıtım (Inheritance) Kullanımı Sınıflar, extends anahtar kelimesiyle başka bir sınıftan kalıtım alabilir. Bu, alt sınıfın üst sınıfın özelliklerini ve metotlarını miras almasını sağlar. class Çalışan extends Kişi { constructor(ad, soyad, yaş, pozisyon) { super(ad, soyad, yaş); // Üst sınıfın constructor'ını çağırır this.pozisyon = pozisyon; } çalışmaDurumu() { return `${this.tamAdGetir()} ${this.pozisyon} pozisyonunda çalışmaktadır.`; } } const çalışan1 = new Çalışan("Deniz", "Ak", 35, "Yazılımcı"); console.log(çalışan1.tamAdGetir()); // Çıktı: Deniz Ak (Kişi sınıfından miras alındı) console.log(çalışan1.çalışmaDurumu()); // Çıktı: Deniz Ak Yazılımcı pozisyonunda çalışmaktadır. çalışan1.yaşınıArtır(); // Çıktı: Deniz Ak şimdi 36 yaşında. (Kişi sınıfından miras alındı) softmush.com Örnek 3: Getter, Setter ve Statik Metot Kullanımı Bu örnek, bir sınıf içinde getter, setter ve statik metotların nasıl tanımlanıp kullanılacağını göstermektedir. class Ayarlar { constructor(tema) { this._tema = tema; // Özel bir özellik gibi davranır } get tema() { return this._tema; } set tema(yeniTema) { if (yeniTema === "açık" || yeniTema === "koyu") { this._tema = yeniTema; console.log(`Tema ${yeniTema} olarak ayarlandı.`); } else { console.warn("Geçersiz tema değeri. 'açık' veya 'koyu' kullanın."); } } static uygulamaBilgisi() { return "Uygulama Adı: MyWebApp v1.0"; } } const kullanıcıAyarları = new Ayarlar("koyu"); console.log(kullanıcıAyarları.tema); // Çıktı: koyu (getter çağrıldı) kullanıcıAyarları.tema = "açık"; // setter çağrıldı console.log(kullanıcıAyarları.tema); // Çıktı: açık kullanıcıAyarları.tema = "mavi"; // Geçersiz tema uyarısı console.log(Ayarlar.uygulamaBilgisi()); // Çıktı: Uygulama Adı: MyWebApp v1.0 (statik metot çağrıldı) softmush.com Önemli Notlar ve İpuçları Hoisting Yok: Fonksiyon bildirimlerinin aksine, JavaScript sınıfları "hoist" edilmezler. Yani, bir sınıfı tanımlamadan önce kullanamazsınız. Önce sınıfı tanımlamalı, sonra örneğini oluşturmalısınız. Tek Sorumluluk Prensibi: Her sınıfın tek bir sorumluluğu olmaya özen gösterin. Bu, kodunuzu daha okunabilir, sürdürülebilir ve test edilebilir hale getirir. this Anahtar Kelimesi: Sınıf metotları içinde this anahtar kelimesi, o metodu çağıran sınıf örneğine (instance) referans verir. this'in bağlamı (context) fonksiyonun nasıl çağrıldığına bağlı olarak değişebilir, bu nedenle özellikle callback fonksiyonlarında dikkatli olun (gerekirse arrow fonksiyonları veya .bind() kullanın). super() Kullanımı: Alt sınıfların constructor metodunda, üst sınıfın constructor metodunu çağırmak için super() kullanılmalıdır. super() çağrılmadan önce this anahtar kelimesine erişilemez. Sınıflar Fonksiyondur: JavaScript sınıfları aslında özel bir tür fonksiyondur. typeof SınıfAdı ifadesi "function" döndürür. Bu, JavaScript'in prototip tabanlı doğasının bir yansımasıdır.
avatar
Emin
12
0
CSS Makaleleri
css-z-index-kullanimi-ogelerin-yigilma-baglamini-yonetme
CSS Z-index Kullanımı: Öğelerin Yığılma Bağlamını Yönetme
CSS'te öğelerin yığılma bağlamı içindeki derinliğini kontrol etmek için kullanılan z-index özelliği, üç boyutlu bir düzen hissi yaratmada kritik bir rol oynar. Bu özellik, çakışan öğelerin hangi sırayla görüntüleneceğini belirleyerek görsel hiyerarşiyi yönetir. Sözdizimi z-index özelliği, bir öğenin yığılma sırasını belirlemek için bir tamsayı değeri alır. element { position: ; /* required */ z-index: | auto; } softmush.com z-index özelliğinin doğru şekilde çalışabilmesi için, hedef öğenin mutlaka position özelliği değerinin static dışında (yani relative, absolute, fixed veya sticky) bir değere sahip olması gerekir. Aksi takdirde, z-index'in hiçbir etkisi olmayacaktır. Değerler aşağıdaki gibidir: : Bu, öğenin yığılma bağlamı içindeki dikey sırasını belirleyen bir tamsayıdır. Daha yüksek bir değer, öğenin diğerlerine göre daha önde görünmesini sağlar. Negatif değerler de kullanılabilir ve bu durumda öğe, varsayılan akıştaki öğelerin arkasına yerleşebilir. Örnek: 1, 100, -5. auto: Bu, öğenin yığılma sırasının ebeveyninin yığılma sırasıyla aynı olmasını sağlar. Bu, varsayılan değerdir ve yeni bir yığılma bağlamı oluşturmaz. Örnekler Aşağıdaki örnek, çakışan iki kutunun z-index kullanılarak nasıl sıralandığını göstermektedir. Kutulardan biri diğerinin üzerinde görünecektir. Z-index Örneği .box { width: 100px; height: 100px; position: absolute; border: 1px solid black; font-size: 20px; display: flex; justify-content: center; align-items: center; } .box1 { background-color: lightblue; top: 50px; left: 50px; z-index: 1; /* Bu kutu daha önde olacak */ } .box2 { background-color: lightcoral; top: 70px; left: 70px; z-index: 2; /* Bu kutu en önde olacak */ } Kutu 1 Kutu 2 softmush.com Yukarıdaki örnekte, .box2 sınıfına sahip öğe, z-index: 2; değeri sayesinde .box1 sınıfına sahip öğenin (z-index: 1;) üzerinde görüntülenecektir. Eğer z-index değerleri eşit olsaydı veya hiç belirtilmeseydi, HTML yapısındaki sıraya göre daha sonra gelen öğe daha üstte olurdu. Negatif z-index kullanımı ile bir öğeyi diğer öğelerin veya arka planın arkasına yerleştirmek mümkündür. Bu, özellikle sabit başlıkların veya menülerin içeriğin arkasına geçmesi istenen durumlarda faydalıdır. Negatif Z-index Örneği body { height: 200vh; /* Scrollbar için yeterli yükseklik */ margin: 0; font-family: sans-serif; } .header { position: fixed; top: 0; left: 0; width: 100%; height: 60px; background-color: #333; color: white; text-align: center; line-height: 60px; z-index: -1; /* İçeriğin arkasına gitsin */ } .content { margin-top: 80px; /* Header'ın üstünden başlasın */ padding: 20px; background-color: #f0f0f0; min-height: 100vh; } .overlay-box { position: absolute; top: 100px; left: 20px; width: 200px; height: 150px; background-color: rgba(255, 0, 0, 0.5); z-index: 0; /* Normal akışta önde olsun */ color: white; padding: 10px; } Sabit Başlık (Z-index: -1) Bu içerik, başlığın üzerinde görünecektir. Bu kutu, başlığın üzerinde ve içeriğin içinde. Aşağı kaydırarak başlığın içeriğin arkasına geçtiğini görebilirsiniz. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. softmush.com Önemli Notlar position Gerekliliği: z-index özelliği yalnızca position değeri static olmayan (relative, absolute, fixed veya sticky) öğeler üzerinde etkilidir. Yığılma Bağlamı (Stacking Context): Her z-index değeri, bir yığılma bağlamı içinde değerlendirilir. Bir öğe yeni bir yığılma bağlamı oluşturduğunda, onun içindeki tüm alt öğeler, ebeveynlerinin z-index değeri tarafından belirlenen o bağlam içinde sıralanır. Ebeveynin z-index değeri, alt öğelerin kendi aralarındaki sıralamadan önce gelir. Yeni Yığılma Bağlamı Oluşturan Durumlar: position değeri static olmayan ve z-index değeri auto dışında olan öğeler yeni bir yığılma bağlamı oluşturur. Ayrıca, opacity değeri 1'den küçük olan, transform, filter, perspective gibi belirli CSS özelliklerini içeren öğeler de yeni yığılma bağlamları oluşturabilir. Sıra Belirleme: Aynı yığılma bağlamında ve aynı z-index değerine sahip iki öğe arasında, HTML belgesinde daha sonra tanımlanan öğe görsel olarak daha üstte görünür. Negatif Değerler: Negatif z-index değerleri, bir öğeyi genellikle varsayılan akıştaki öğelerin arkasına, hatta bazen body veya html arka planının arkasına bile yerleştirebilir. Ancak bu, tarayıcı ve diğer stillere bağlı olarak dikkatle kullanılmalıdır.
avatar
Emin
10
0
Python Makaleleri
python-dilinde-arrays-kullanimi-temelden-ileri-seviyeye-kapsamli-kilavuz
Python Dilinde Arrays Kullanımı: Temelden İleri Seviyeye Kapsamlı Kılavuz
Python programlama dilinde, veri koleksiyonlarını depolamak için çeşitli yapılar bulunur. En yaygın kullanılanlardan biri list olsa da, özellikle sayısal verilerle çalışırken bellek verimliliği ve performans açısından array modülü önemli bir alternatif sunar. Bu makale, Python'ın array modülünü kullanarak tip-belirli dizilerin nasıl oluşturulduğunu, yönetildiğini ve günlük programlama görevlerinde nasıl kullanılabileceğini teknik detaylarıyla açıklamaktadır. Sözdizimi array modülünü kullanmak için öncelikle bu modülün içe aktarılması gerekmektedir. Dizi oluşturma işlemi, dizinin depolayacağı veri tipini belirten bir "tip kodu" ve başlangıç elemanlarını içeren bir iterable nesne ile gerçekleştirilir. from array import array dizi_adi = array('tip_kodu', [eleman1, eleman2, ...])softmush.com Detaylı Açıklama array modülünün temel yapısı iki ana bileşenden oluşur: tip_kodu (Type Code): Bu tek karakterlik string, dizinin depolayacağı veri tipini belirtir. Her tip kodu, belirli bir C veri tipine karşılık gelir ve dizideki tüm elemanların bu tipte olmasını sağlar. Bu sayede bellek kullanımı optimize edilir. Yaygın kullanılan bazı tip kodları şunlardır: 'b': İşaretli küçük tam sayı (signed char) 'B': İşaretsiz küçük tam sayı (unsigned char) 'h': İşaretli kısa tam sayı (signed short) 'H': İşaretsiz kısa tam sayı (unsigned short) 'i': İşaretli tam sayı (signed int) 'I': İşaretsiz tam sayı (unsigned int) 'l': İşaretli uzun tam sayı (signed long) 'L': İşaretsiz uzun tam sayı (unsigned long) 'q': İşaretli uzun uzun tam sayı (signed long long) (Sadece belirli sistemlerde mevcuttur) 'Q': İşaretsiz uzun uzun tam sayı (unsigned long long) (Sadece belirli sistemlerde mevcuttur) 'f': Kayan nokta (float) 'd': Çift hassasiyetli kayan nokta (double) iterable: Bu, dizinin başlangıç elemanlarını içeren bir koleksiyondur. Genellikle bir list kullanılır, ancak tuple veya başka bir iterable nesne de olabilir. Dizi oluşturulurken bu iterable içindeki elemanlar belirtilen tip_kodu'na dönüştürülür. Eğer eleman tipi, tip_kodu ile uyumlu değilse TypeError hatası alınır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, Python array modülünün farklı senaryolarda nasıl kullanılabileceğini göstermektedir. 1. Temel Dizi Oluşturma ve Elemanlara Erişim 'i' tip kodu ile işaretli tam sayılardan oluşan bir dizi oluşturalım ve elemanlarına erişelim. from array import array # 'i' tip kodlu (işaretli tam sayı) bir dizi oluşturma int_array = array('i', [1, 2, 3, 4, 5]) print("Oluşturulan Dizi:", int_array) print("Dizinin Boyutu:", len(int_array)) # İndeks kullanarak elemanlara erişim print("İlk Eleman:", int_array[0]) print("Son Eleman:", int_array[-1]) # Elemanı güncelleme int_array[2] = 10 print("Güncellenmiş Dizi:", int_array)softmush.com 2. Farklı Veri Tipleriyle Çalışma Kayan noktalı sayılar için 'f' tip kodunu kullanarak bir dizi oluşturalım. from array import array # 'f' tip kodlu (float) bir dizi oluşturma float_array = array('f', [1.0, 2.5, 3.7, 4.2]) print("Float Dizi:", float_array) # Eleman ekleme float_array.append(5.9) print("append() sonrası:", float_array) # Eleman kaldırma float_array.remove(2.5) # Değere göre kaldırır print("remove() sonrası:", float_array) # Yeni bir dizi ile genişletme another_float_array = array('f', [6.1, 7.3]) float_array.extend(another_float_array) print("extend() sonrası:", float_array)softmush.com 3. Dosyadan Veri Okuma/Yazma array nesneleri, özellikle büyük ikili veri setleriyle çalışırken doğrudan dosya işlemleri için de kullanılabilir. from array import array import os # Bir dizi oluştur data = array('i', [10, 20, 30, 40, 50]) file_name = "array_data.bin" # Diziyi ikili dosyaya yazma with open(file_name, 'wb') as f: data.tofile(f) print(f"Dizi '{file_name}' dosyasına yazıldı.") # Dosyadan geri okuma read_data = array('i') # Boş bir dizi oluştur with open(file_name, 'rb') as f: read_data.fromfile(f, len(data)) # Orijinal boyutu kadar oku print("Dosyadan okunan dizi:", read_data) # Dosyayı temizle os.remove(file_name) print(f"'{file_name}' dosyası silindi.")softmush.com Önemli Notlar ve İpuçları Bellek Verimliliği: array.array, list nesnelerine göre daha az bellek kullanır çünkü tüm elemanları aynı tipte tutar ve bu elemanlar arka planda kompakt bir C dizisi olarak depolanır. Büyük sayısal veri setleriyle çalışırken bu önemlidir. Tip Kısıtlaması: array nesneleri yalnızca belirtilen tip_kodu'na uygun verileri depolayabilir. Farklı tiplerde eleman eklemeye çalışmak TypeError hatasına yol açar. Bu, list'in esnekliğine kıyasla bir kısıtlamadır. Performans: Tip-belirli olması ve doğrudan bellek erişimine izin vermesi nedeniyle, özellikle sayısal işlemler ve dosya G/Ç (I/O) operasyonlarında array nesneleri list'lere göre daha hızlı performans sergileyebilir. list ile Farkı: Python'da list, farklı veri tiplerini aynı anda barındırabilen genel amaçlı, dinamik bir dizi gibidir. array.array ise belirli bir veri tipine sıkı sıkıya bağlıdır ve genellikle büyük, homojen sayısal veri koleksiyonları için tercih edilir. Eğer esnekliğe ihtiyacınız varsa list kullanın; bellek ve performans kritikse ve verileriniz homojense array düşünün. Modül İçe Aktarma: array modülü standart kütüphanenin bir parçasıdır ve ek kurulum gerektirmez. Kullanmadan önce from array import array veya import array şeklinde içe aktarmalısınız. Diğer Operasyonlar: array nesneleri, append(), extend(), insert(), pop(), remove() gibi list'e benzer birçok yöntemi destekler. Ayrıca tofile(), fromfile(), tobytes(), frombytes() gibi ikili dosya ve bayt işlemleri için özel yöntemleri de vardır.
avatar
Emin
12
0
SQL Makaleleri
sql-in-operatoru-setler-icindeki-veri-kontrolu
SQL IN Operatörü: Setler İçindeki Veri Kontrolü
Veritabanı yönetim sistemlerinde (DBMS) veri sorgulama, belirli kriterlere uyan kayıtları seçmek için kritik bir işlemdir. SQL IN operatörü, bir sütundaki değerin, belirtilen bir değer listesi içinde veya bir alt sorgu tarafından döndürülen sonuç kümesi içinde olup olmadığını kontrol etmek için kullanılan güçlü ve esnek bir araçtır. Bu operatör, birden fazla OR koşulunu tek bir ifadeyle ele alarak sorguların okunabilirliğini ve yazım kolaylığını önemli ölçüde artırır. SQL IN Operatörünün Sözdizimi IN operatörünün temel sözdizimi iki ana biçimde incelenebilir: doğrudan bir değer listesiyle kullanım ve bir alt sorgu ile kullanım. -- Değer listesiyle kullanım: SELECT kolon_adi_1, kolon_adi_2, ... FROM tablo_adi WHERE hedef_kolon_adi IN (deger_1, deger_2, deger_3, ...); -- Alt sorguyla kullanım: SELECT kolon_adi_1, kolon_adi_2, ... FROM tablo_adi WHERE hedef_kolon_adi IN (SELECT alt_sorgu_kolonu FROM diger_tablo WHERE kosul); softmush.com Detaylı Açıklama SELECT kolon_adi_1, kolon_adi_2, ...: Sorgu sonucunda hangi sütunların döndürüleceğini belirtir. Standart SQL SELECT ifadesidir. FROM tablo_adi: Verilerin hangi tablodan çekileceğini belirtir. WHERE hedef_kolon_adi: IN operatörü ile karşılaştırılacak olan sütunu ifade eder. IN: Bu anahtar kelime, hedef_kolon_adi değerinin parantez içindeki listede veya alt sorgu sonucunda bulunup bulunmadığını kontrol eder. (deger_1, deger_2, deger_3, ...): Virgülle ayrılmış bir dizi sabit değerdir. hedef_kolon_adi, bu listedeki herhangi bir değere eşitse koşul doğru kabul edilir. Metin değerleri tek tırnak (') içinde, sayısal değerler ise tırnaksız yazılmalıdır. (SELECT alt_sorgu_kolonu FROM diger_tablo WHERE kosul): Bu, bir alt sorgudur. IN operatörü, hedef_kolon_adi değerinin bu alt sorgunun döndürdüğü tek sütunlu sonuç kümesinde olup olmadığını kontrol eder. Bu yöntem, dinamik bir değer listesi oluşturmak için idealdir. NOT IN: IN operatörünün tam tersidir. hedef_kolon_adi değerinin belirtilen listede veya alt sorgu sonucunda OLMADIĞINI kontrol eder. Pratik Kullanım Örnekleri Aşağıdaki örneklerde, bir Urunler tablosu (UrunID, UrunAdi, Kategori, Fiyat) ve bir Siparisler tablosu (SiparisID, MusteriID, UrunID, SiparisTarihi) ile Musteriler tablosu (MusteriID, MusteriAdi, Sehir) olduğunu varsayalım. Örnek 1: Belirli Kategorilerdeki Ürünleri Seçme Bu örnek, Urunler tablosundan 'Elektronik' veya 'Ev Gereçleri' kategorilerine ait tüm ürünleri getirir. SELECT UrunAdi, Kategori, Fiyat FROM Urunler WHERE Kategori IN ('Elektronik', 'Ev Gerecleri'); softmush.com Örnek 2: Belirli Müşterilerin Siparişlerini Bulma (Sayısal Değer Listesi) Belirli MusteriID'lere sahip siparişleri listeler. SELECT SiparisID, MusteriID, SiparisTarihi FROM Siparisler WHERE MusteriID IN (101, 105, 112); softmush.com Örnek 3: Bir Alt Sorgu ile Müşterilerin Şehirlerine Göre Siparişlerini Bulma Bu örnek, 'Ankara' veya 'İzmir' şehirlerinde ikamet eden müşterilerin tüm siparişlerini getirir. Burada Musteriler tablosundan dönen MusteriID'ler, Siparisler tablosundaki filtreleme için kullanılır. SELECT S.SiparisID, M.MusteriAdi, M.Sehir, S.SiparisTarihi FROM Siparisler AS S JOIN Musteriler AS M ON S.MusteriID = M.MusteriID WHERE S.MusteriID IN (SELECT MusteriID FROM Musteriler WHERE Sehir IN ('Ankara', 'Izmir')); softmush.com Örnek 4: Belirli Kategoriler Dışındaki Ürünleri Seçme (NOT IN Kullanımı) Bu örnek, 'Giyim' ve 'Kitap' kategorileri dışındaki tüm ürünleri listeler. SELECT UrunAdi, Kategori, Fiyat FROM Urunler WHERE Kategori NOT IN ('Giyim', 'Kitap'); softmush.com Önemli Notlar ve İpuçları Performans: Çok uzun değer listeleri veya karmaşık alt sorgular içeren IN operatörleri, bazı durumlarda performans sorunlarına yol açabilir. Özellikle listeler binlerce değer içeriyorsa veya alt sorgu büyük miktarda veri döndürüyorsa, sorgu optimizasyonunu gözden geçirmek (örneğin JOIN kullanmak) gerekebilir. NULL Değerler: IN operatörü, listedeki NULL değerleriyle karşılaştırıldığında özel bir davranış sergiler. Eğer listede NULL varsa, hedef_kolon_adi IN (deger_1, NULL) ifadesi, hedef_kolon_adi'nın NULL olmasına rağmen NULL ile eşleşmez. NOT IN durumunda ise, alt sorgu veya değer listesi NULL bir değer içeriyorsa, NOT IN koşulu asla doğru (TRUE) değerini döndürmez. Bu nedenle, NULL değerlerinin varlığına dikkat edilmelidir. Alternatifler: Basit ve kısa değer listeleri için IN operatörü idealdir. Ancak, çok sayıda OR koşulu yazmak yerine IN kullanmak okunabilirliği artırır. Eğer performans endişeleri varsa ve alt sorgunun döndürdüğü veri kümesi büyükse, JOIN işlemleri veya EXISTS operatörü gibi alternatifler değerlendirilebilir. Veri Tipi Tutarlılığı: IN operatörü içinde kullanılan değerlerin veya alt sorgunun döndürdüğü değerlerin, karşılaştırıldığı sütunun veri tipiyle uyumlu olması önemlidir. Aksi takdirde, beklenmedik sonuçlar veya hata mesajları alınabilir. Dinamik Listeler: IN operatörünü bir alt sorgu ile kullanmak, koşulların dinamik olarak belirlenmesini sağlar. Bu, özellikle bir tablodaki veriye dayanarak başka bir tablodaki kayıtları filtrelemek gerektiğinde çok kullanışlıdır.
avatar
Emin
21
0
JavaScript Makaleleri
javascript-te-ecmascript-versiyonlarini-anlama-ve-etkili-kullanimi
JavaScript’te ECMAScript Versiyonlarını Anlama ve Etkili Kullanımı
JavaScript, sürekli gelişen bir programlama dilidir ve bu gelişim, ECMAScript (ES) standartları aracılığıyla tanımlanır. ECMAScript, dilin temel özelliklerini, sözdizimini ve semantiğini belirleyen standarttır; JavaScript ise bu standardın en bilinen uygulamasıdır. Geliştiricilerin modern web uygulamaları oluşturabilmesi için, dilin farklı versiyonlarında sunulan yeni özellikleri anlaması ve bunları etkin bir şekilde kullanması kritik öneme sahiptir. Bu makale, ECMAScript versiyonlarının JavaScript geliştirme üzerindeki etkilerini ve modern özellikleri projelerinizde nasıl uygulayacağınızı detaylandırmaktadır. ECMAScript Standartları ve Sözdizimi Evrimi JavaScript'in sözdizimi, ECMAScript standartlarının her yeni sürümüyle birlikte evrimleşmektedir. Bu evrim, daha okunaklı, verimli ve güçlü kod yazma imkanı sunar. En belirgin değişikliklerden biri, değişken tanımlama mekanizmasında yaşanmıştır. ES6 (ECMAScript 2015) öncesinde sadece var anahtar kelimesi kullanılırken, ES6 ile birlikte let ve const anahtar kelimeleri tanıtılmıştır. Bu yeni anahtar kelimeler, blok kapsam (block-scoping) ve yeniden atama kısıtlamaları gibi önemli iyileştirmeler getirmiştir. // ES5 (veya öncesi) değişken tanımlama var degiskenAdet = 10; if (true) { var degiskenAdet = 20; // Aynı kapsamda yeniden tanımlanabilir, beklenen davranışı değiştirebilir. console.log(degiskenAdet); // Çıktı: 20 } console.log(degiskenAdet); // Çıktı: 20 (Beklenenden farklı olabilir) // ES6+ ile değişken tanımlama let sayac = 0; const PI = 3.14; if (true) { let sayac = 1; // Yeni bir blok kapsamlı değişken console.log(sayac); // Çıktı: 1 // PI = 3.14159; // Hata: const ile tanımlanan bir değişken yeniden atanamaz. } console.log(sayac); // Çıktı: 0 (Blok dışındaki orijinal değişken) softmush.com Detaylı Açıklama ECMAScript, her yıl yeni bir sürümle güncellenerek dile yeni özellikler ekler. Bu sürümler genellikle ES5 (2009), ES6/ES2015, ES2016, ES2017 ve devam eden yıllık güncellemeler şeklinde adlandırılır. ECMAScript Nedir? ECMAScript, Ecma International tarafından standardize edilen bir betik dili belirtimidir. JavaScript, JScript ve ActionScript gibi diller bu standardın uygulamalarıdır. Sürüm Evrimi ve Özellikler: Her yeni sürüm, dile yeni sözdizimi ve API'lar ekler. Örneğin, ES6 ile ok fonksiyonları (=>), sınıf sözdizimi (class), şablon dizeleri (template literals), destructuring atama ve modüller (import/export) gibi önemli özellikler gelmiştir. Daha sonraki sürümlerde ise async/await (ES2017), nesne yayma operatörü (object spread operator) ve dinamik içe aktarmalar (dynamic imports) gibi özellikler eklenmiştir. Uyumluluk Sorunları: Yeni ECMAScript özellikleri her tarayıcı veya Node.js ortamında hemen desteklenmeyebilir. Eski tarayıcılar, modern JavaScript kodunu anlayamayabilir ve bu durum hatalara yol açabilir. Transpilasyon ve Polyfiller: Bu uyumluluk sorununu çözmek için iki ana yöntem kullanılır: Transpilasyon: Modern JavaScript kodunu, eski JavaScript versiyonlarına dönüştürme işlemidir. En popüler transpilatör Babel'dir. Bu sayede geliştiriciler yeni özelliklerle kod yazabilirken, sonuçta ortaya çıkan kod geniş bir yelpazedeki eski ortamlarla uyumlu olur. Polyfiller: Eski tarayıcılarda eksik olan modern JavaScript özelliklerini (örneğin, Promise veya Array.prototype.includes gibi API'lar) taklit eden kod parçacıklarıdır. Transpilasyon sözdizimini dönüştürürken, polyfiller API'ların eksik işlevselliğini sağlar. Pratik Kullanım Örnekleri Aşağıdaki örnekler, farklı ECMAScript versiyonlarında tanıtılan özelliklerin kullanımını ve bunların eski yaklaşımlarla karşılaştırmasını göstermektedir. Örnek 1: Ok Fonksiyonları (Arrow Functions) - ES6 Ok fonksiyonları, daha kısa ve daha sezgisel bir fonksiyon sözdizimi sunar ve this bağlamının nasıl işlediği konusunda önemli değişiklikler yapar. // ES5 fonksiyon tanımı function sumES5(a, b) { return a + b; } console.log("ES5 Toplam:", sumES5(5, 3)); // Çıktı: ES5 Toplam: 8 // ES6 Ok Fonksiyonu const sumES6 = (a, b) => a + b; console.log("ES6 Toplam:", sumES6(5, 3)); // Çıktı: ES6 Toplam: 8 // 'this' bağlamı farkı function CounterES5() { this.count = 0; setInterval(function() { // 'this' burada Global/Window nesnesine işaret eder (strict mode'da undefined) // Bu yüzden 'self = this' gibi bir yaklaşıma ihtiyaç duyulur. console.log("ES5 Counter:", this.count++); }, 1000); } // new CounterES5(); // Çalıştırıldığında hata verebilir veya beklenenden farklı çalışır function CounterES6() { this.count = 0; setInterval(() => { // Ok fonksiyonları, tanımlandıkları kapsamdaki 'this' değerini korur (lexical this). console.log("ES6 Counter:", this.count++); }, 1000); } // new CounterES6(); // Beklendiği gibi çalışır softmush.com Örnek 2: Asenkron İşlemler için async/await - ES2017 async ve await anahtar kelimeleri, Promise tabanlı asenkron kodu senkron koda benzer bir şekilde yazmayı sağlayarak okunabilirliği artırır. // Bir Promise döndüren örnek fonksiyon function veriGetir() { return new Promise(resolve => { setTimeout(() => { resolve("Veri başarıyla alındı!"); }, 2000); }); } // ES5/ES6 Promises ile asenkron işlem veriGetir().then(mesaj => { console.log("Promise ile:", mesaj); // 2 saniye sonra çalışır }); // ES2017 async/await ile asenkron işlem async function veriyiIsle() { console.log("Veri bekleniyor..."); const mesaj = await veriGetir(); // Promise tamamlanana kadar bekler console.log("Async/Await ile:", mesaj); // Promise tamamlandıktan sonra çalışır console.log("İşlem tamamlandı."); } veriyiIsle(); softmush.com Önemli Notlar Hedef Ortam Farkındalığı: Kodunuzu yazarken, hedeflediğiniz tarayıcılar ve Node.js sürümleri gibi çalışma ortamlarının hangi ECMAScript özelliklerini desteklediğini daima göz önünde bulundurun. caniuse.com gibi kaynaklar bu konuda size yardımcı olabilir. Babel ve Webpack Kullanımı: Büyük ölçekli projelerde veya geniş tarayıcı desteği gerektiren durumlarda, Babel gibi bir transpilatör ve Webpack gibi bir bundler kullanmak neredeyse zorunludur. Bu araçlar, modern kodunuzu eski ortamlara uyumlu hale getirirken, aynı zamanda kodunuzu optimize etmenize ve modülleri yönetmenize olanak tanır. Polyfiller'ı Doğru Kullanın: Transpilatörler sözdizimsel değişiklikleri yönetirken, yeni API'lar için polyfiller'lara ihtiyaç duyulur. Yalnızca projenizin ihtiyaç duyduğu polyfiller'ları dahil ederek paket boyutunu minimumda tutun. Progressive Enhancement (Aşamalı Geliştirme): Mümkün olduğunda, en yeni özelliklerle kod yazın ve eski ortamlara düşüş (fallback) sağlayın. Bu, modern tarayıcılarda daha zengin bir deneyim sunarken, eski tarayıcılarda temel işlevselliği korur. Güncel Kalın: ECMAScript standartları her yıl yeni özelliklerle güncellendiği için, dilin en son yeniliklerini takip etmek ve bunları projelerinizde nasıl kullanabileceğinizi öğrenmek önemlidir.
avatar
Emin
12
0
Bilim Makaleleri
bir-yil-issiz-adada-hayatta-kalma-sanati-ve-kendini-kesfetme-yolculugu
Bir Yıl Issız Adada: Hayatta Kalma Sanatı ve Kendini Keşfetme Yolculuğu
Herkesin hayallerini süsleyen, macera filmlerine konu olan bir senaryo vardır: Issız bir adada tek başına kalmak. Çoğu kişi için bu, kısa süreli bir kaçış, bir fantezi olarak kalır. Benim içinse, bir yıl boyunca süren gerçek bir yaşam deneyimine dönüştü. Okyanusun ortasında, medeniyetten uzakta, tamamen kendi başıma geçirdiğim bu 365 gün, bana sadece hayatta kalmayı değil, aynı zamanda kendimi ve insan doğasını da öğretti. Bu yolculukta neler öğrendiğimi sizinle paylaşmak istiyorum. İlk Şok ve Hayatta Kalma İçgüdüsü Adaya ilk ayak bastığım anı asla unutamam. Bir gemi kazasının ardından kendimi bu yeşil cennetin kumsallarında bulduğumda, başlangıçta hissettiğim şey heyecandan çok saf bir korkuydu. En yakın yerleşim yerine binlerce mil uzakta olduğumu biliyordum. İlk günler, tamamen temel ihtiyaçlarımı karşılamaya odaklandım. Su, yiyecek ve barınak. Bu üçlüyü güvence altına almak, hayatta kalmamın anahtarıydı. Tatlı Su Kaynağı Bulmak: En öncelikli meseleydi. Adanın iç kısımlarını keşfederek, şans eseri bir tatlı su kaynağına ulaştım. Bu, hayata tutunmam için bir umut ışığı oldu. Yiyecek Avı ve Toplayıcılık: Balık tutmayı, deniz ürünleri toplamayı ve adada yetişen yenilebilir bitkileri ayırt etmeyi hızla öğrendim. Her öğün, doğanın bana sunduğu bir lütuftu. Barınak İnşa Etmek: İlk başta derme çatma bir kulübe kurdum. Zamanla, bambu ve büyük yaprakları kullanarak, beni yağmurdan ve rüzgardan koruyacak daha sağlam bir yapı inşa ettim. Bu ilk haftalar, insan beyninin kriz anında ne kadar hızlı adaptasyon gösterebildiğini, içgüdülerin ne kadar güçlü olduğunu bana net bir şekilde gösterdi. Her gün yeni bir meydan okumaydı ve her meydan okuma beni daha da güçlendiriyordu. Doğayla Bütünleşme ve Yeni Bir Rutin İlk şoku atlattıktan sonra, adanın ritmine ayak uydurmaya başladım. Güneşin doğuşuyla uyanıyor, batışıyla günü sonlandırıyordum. Zaman kavramı değişmişti; artık saatler değil, gelgitler, ayın evreleri ve mevsimsel değişiklikler rehberimdi. Doğayla böylesine iç içe yaşamak, daha önce hiç deneyimlemediğim bir huzuru beraberinde getirdi. Günlerim belirli bir rutine oturmuştu: Sabah erkenden uyanıp su kaynağımı kontrol etmek, odun toplamak, ateş yakmak, balık ağı kurmak veya yiyecek aramak. Öğleden sonraları genellikle barınağımı onarmak, aletler yapmak (keskin taşlar, ip için lifler) veya adayı keşfetmekle geçerdi. Akşamları ise yaktığım ateşin başında oturup, yıldızları izlemek ve sessizliğin sesini dinlemek en büyük keyfimdi. Bu süreçte, doğanın bir parçası olduğumu, onunla uyum içinde yaşamanın ne kadar önemli olduğunu anladım. Her canlı, her bitki, ekosistemin vazgeçilmez bir parçasıydı ve ben de onlardan biriydim. Bu farkındalık, hayata bakış açımı kökten değiştirdi. Yalnızlık mı, Yalıtılmışlık mı? Zihinsel Dönüşüm Fiziksel hayatta kalma mücadelesi kadar, belki de daha fazlası, zihinsel dayanıklılığımı test eden bir süreçti. Issız bir adada tek başına olmak, yalnızlık ile yalıtılmışlık arasındaki ince çizgiyi bana öğretti. Başlangıçta derin bir yalnızlık hissi beni ele geçirse de, zamanla bu durum yerini huzurlu bir yalıtılmışlığa bıraktı. Kendimle yüzleşmek, geçmişi sorgulamak, geleceği düşünmek için bolca vaktim oldu. Hiçbir dış uyaran olmadan, zihnim berraklaştı. Önceliklerim değişti. Materyalist dünyanın dayattığı değerlerin ne kadar anlamsız olduğunu, gerçek zenginliğin iç huzurunda ve doğayla bağlantıda yattığını fark ettim. Kendi iç sesimi dinlemeyi, kendi kendime yetmeyi öğrendim. Bu, hayatımın en yoğun kişisel gelişim süreciydi. Zihinsel sağlığımı korumak için kendime küçük ritüeller yaratmıştım: Her gün denizde yüzmek, adanın en yüksek noktasına tırmanıp manzarayı seyretmek, kumsala şekiller çizmek. Bunlar, monotonluğu kırmanın ve ruhumu beslemenin yollarıydı. Bir yıl sonra, adaya ayak basan o korkmuş insandan çok farklı, daha sakin, daha bilge ve daha dayanıklı biri olmuştum. Öğrendiğim En Değerli Dersler Issız adadaki bir yıl, bana paha biçilmez dersler verdi. Bu dersler sadece hayatta kalma teknikleriyle sınırlı kalmadı, aynı zamanda insan olmanın, yaşamanın ve var olmanın derin anlamlarını kavramamı sağladı. İşte o adadan yanımda getirdiğim en önemli öğretiler: Minimalizmin Gücü: Gerçekten neye ihtiyacımız olduğunu, neyin sadece bir arzu olduğunu anladım. Bir avuç alet, doğal yiyecekler ve basit bir barınakla yaşanabileceğini deneyimledim. Azla yetinmek, aslında çok daha fazlasına sahip olmak demekmiş. Anın Kıymeti: Geçmişin pişmanlıkları ve geleceğin kaygıları olmadan, sadece "şimdi"de yaşamanın ne demek olduğunu öğrendim. Her nefes, her gün batımı, her taze su damlası bir mucizeydi. Problem Çözme Yeteneği: Her gün yeni bir sorunla karşılaştım ve her birine kendi başıma çözüm bulmak zorundaydım. Bu, yaratıcılığımı ve pratik zekamı inanılmaz derecede geliştirdi. Doğanın Bilgeliği: Hava durumunu okumayı, bitkilerin iyileştirici gücünü, hayvanların davranışlarını gözlemlemeyi öğrendim. Doğa, dünyanın en büyük öğretmenidir. İnsan Bağlantısının Önemi: Paradoxik bir şekilde, en yalnız olduğum yerde insan bağlantısının değerini anladım. Bir gülümseme, bir sohbetin, sevgi ve dostluğun ne kadar kıymetli olduğunu fark ettim. Medeniyete döndüğümde, bu bağlantılara daha önce hiç olmadığı kadar değer verecektim. Psikolojik Dayanıklılık ve Umut: Umutsuzluğa kapıldığım anlar oldu ama her zaman küçük bir umut ışığı buldum. İnsanın ne kadar dayanıklı olabileceğini, ruhunun her koşulda hayata tutunabileceğini gördüm. Umut, en güçlü hayatta kalma aracıdır. Issız adada geçirdiğim bir yıl, hayatımın en zorlu ama aynı zamanda en öğretici dönemiydi. Bu deneyim, beni değiştirdi, dönüştürdü ve dünyaya yepyeni bir gözle bakmamı sağladı. Belki siz de bir gün kendinizi böyle bir durumda bulmazsınız, ama umarım benim öğrendiklerim, günlük hayatınızdaki önceliklerinizi sorgulamanıza ve doğayla daha derin bir bağ kurmanıza yardımcı olur. Unutmayın, en büyük macera, her zaman kendi içimizde saklıdır.
avatar
Emin
13
0
CSS Makaleleri
css-dilinde-position-ozelliginin-detayli-kullanimi
CSS Dilinde `position` Özelliğinin Detaylı Kullanımı
CSS'te elementlerin belge akışı içindeki yerleşimini ve görsel konumlandırmasını belirleyen temel özelliklerden biri position'dır. Bu özellik, geliştiricilere elementleri normal belge akışından çıkararak veya akış içinde belirli kurallara göre hareket ettirerek karmaşık düzenler oluşturma imkanı sunar. Web arayüzlerinde hassas kontrol sağlamak ve dinamik görsel efektler yaratmak için position özelliğinin farklı değerlerini anlamak esastır. Sözdizimi position özelliği, bir elementin konumlandırma türünü belirtmek için kullanılır. Aşağıdaki değerlerden birini alabilir: position: static | relative | absolute | fixed | sticky;softmush.com Detaylı Açıklama Her bir position değeri, elementin konumlandırma mantığını farklı şekillerde etkiler: static: Bu, elementlerin varsayılan konumlandırma değeridir. Elementler, belgenin normal akışı içinde yer alır. top, right, bottom, left ve z-index özellikleri bu durumda hiçbir etki yaratmaz. relative: Element, normal konumuna göre konumlandırılır. top, right, bottom veya left özellikleri kullanılarak normal konumundan uzaklaştırılabilir. Ancak, elementin orijinal konumu belgede hala yer kaplar ve diğer elementlerin yerleşimini etkiler. absolute: Element, normal belge akışından çıkarılır ve en yakın konumlandırılmış (static olmayan) üst öğesine göre konumlandırılır. Eğer konumlandırılmış bir üst öğe yoksa, başlangıçtaki kapsayıcı bloğa (genellikle elementi) göre konumlanır. absolute konumlandırılmış bir element, diğer elementlerin yerleşimini etkilemez. fixed: Element, tarayıcı penceresine (viewport) göre konumlandırılır. Sayfa kaydırılsa bile ekranın aynı yerinde kalır. absolute gibi, normal belge akışından çıkarılır ve diğer elementlerin yerleşimini etkilemez. Navigasyon çubukları veya "başa dön" butonları için idealdir. sticky: Bu değer, relative ve fixed konumlandırmanın bir karışımıdır. Element, belirli bir kaydırma eşiğine ulaşana kadar relative olarak davranır, eşik aşıldığında ise fixed olarak davranmaya başlar. top, right, bottom veya left özelliklerinden en az biri belirtilmelidir. Pratik Kullanım Örnekleri Aşağıdaki örnekler, position özelliklerinin farklı kullanım senaryolarını göstermektedir. Örnek 1: relative Kullanımı Bu örnekte, bir kutu normal akışında konumlandırılır ancak left ve top değerleri ile hafifçe kaydırılır. Relative Kutu .container { width: 200px; height: 200px; background-color: #f0f0f0; border: 1px solid #ccc; margin-bottom: 30px; } .box { width: 100px; height: 100px; background-color: lightblue; border: 1px solid blue; text-align: center; line-height: 100px; } .relative-box { position: relative; left: 20px; top: 20px; }softmush.com Örnek 2: absolute Kullanımı Burada, iç kutu dış kutuya göre konumlandırılır ve sağ üst köşeye sabitlenir. Absolute Kutu .parent-absolute { position: relative; /* Çocuk elementi için konumlandırma bağlamı sağlar */ width: 300px; height: 150px; background-color: #ffe0b2; border: 1px solid orange; margin-top: 20px; } .child-absolute { position: absolute; top: 10px; right: 10px; width: 80px; height: 80px; background-color: #ffcc80; border: 1px solid #e65100; text-align: center; line-height: 80px; }softmush.com Örnek 3: fixed Kullanımı Bu örnek, sayfa kaydırılsa bile ekranın sağ alt köşesinde sabit kalan bir butonu gösterir. Bu sayfa kaydırılabilen içerik içerir. Aşağıya kaydırın ve fixed butonu görün.Başa Dön .fixed-button { position: fixed; bottom: 20px; right: 20px; padding: 10px 15px; background-color: #4CAF50; color: white; border: none; border-radius: 5px; cursor: pointer; z-index: 1000; }softmush.com Örnek 4: sticky Kullanımı Bir başlık, belirli bir kaydırma noktasından sonra ekranın üst kısmına yapışık kalır. Bu içerik sticky başlığın üzerindedir. Aşağıya doğru kaydırın. ... ... Yapışkan Başlık ... ... ... ... Daha fazla içerik. .sticky-container { height: 600px; /* İçeriğin kaydırılabilmesi için yükseklik */ overflow-y: scroll; border: 1px solid grey; } .sticky-header { position: sticky; top: 0; background-color: #d1ecf1; padding: 10px; border-bottom: 1px solid #bee5eb; z-index: 1; }softmush.com Önemli Notlar Yalnızca konumlandırılmış (static olmayan) elementler için z-index özelliği etki eder. z-index, elementlerin üst üste binme sırasını belirler. absolute ve fixed konumlandırılmış elementler, normal belge akışından tamamen çıkarılır. Bu, diğer elementlerin onların varlığından habersizce yerleşeceği anlamına gelir. relative konumlandırılmış bir element, normal akışta yer kaplamaya devam eder. Yalnızca görsel olarak kaydırılır. sticky konumlandırmanın çalışabilmesi için top, right, bottom veya left özelliklerinden en az birinin tanımlanması gereklidir. absolute konumlandırılmış bir elementin referans noktası, en yakın static olmayan üst elementidir. Bu üst elementin position özelliği relative, absolute, fixed veya sticky olmalıdır.
avatar
Emin
13
0
HTML Makaleleri
html-de-id-niteligi-kullanimi-kapsamli-bir-rehber
HTML&#039;de `id` Niteliği Kullanımı: Kapsamlı Bir Rehber
HTML (HyperText Markup Language) belgelerinde, elemanları benzersiz bir şekilde tanımlamak için kullanılan temel niteliklerden biri id niteliğidir. Bu nitelik, bir web sayfasındaki belirli bir elemana özel bir kimlik atayarak, o elemanın CSS ile stilize edilmesini, JavaScript ile manipüle edilmesini veya sayfa içi bağlantılar (çapa bağlantıları) için hedef olarak kullanılmasını sağlar. Her id değeri, tüm HTML belgesi içinde benzersiz olmalıdır; bu, bir kimlik kartı numarası gibi, her elemanın kendine özgü bir tanımlayıcısı olduğu anlamına gelir. Sözdizimi id niteliği, herhangi bir HTML etiketine aşağıdaki genel sözdizimi ile eklenir: İçeriksoftmush.com Burada; : Kimlik atanan HTML elemanını (örneğin, , , , vb.) temsil eder. id: Elemana benzersiz bir kimlik atayan niteliktir. "değer": Elemana atanan benzersiz kimlik değeridir. Bu değer tırnak işaretleri içinde belirtilmelidir. Detaylı Açıklama id niteliği ve atanan değeri, web geliştirme süreçlerinde birden fazla kritik rol oynar: Benzersizlik Zorunluluğu: Bir HTML belgesinde her id değeri yalnızca bir kez kullanılabilir. Bu kurala uyulmaması tarayıcının beklenen davranışları göstermemesine veya JavaScript kodlarının hatalı çalışmasına neden olabilir. Tarayıcılar bu kuralı zorunlu kılmazken, standartlara uygun ve öngörülebilir davranış için bu kurala titizlikle uyulmalıdır. Değer Kuralları: Bir id değeri aşağıdaki kurallara uymalıdır: Bir harf (A-Z veya a-z) ile başlamalıdır. Alfasayısal karakterler (A-Z, a-z, 0-9), kısa çizgi (-) ve alt çizgi (_) içerebilir. Boşluk karakteri içermemelidir. Büyük/küçük harfe duyarlıdır (örneğin, "myId" ve "myid" farklı kimlikler olarak kabul edilir). Kullanım Alanları: CSS ile Stil Uygulama: Belirli bir elemanı hedefleyerek sadece o elemana özel stil kuralları uygulamak için kullanılır. CSS'te id seçicisi, # sembolü ile başlar (örneğin, #anaBaslik { color: blue; }). JavaScript ile Eleman Manipülasyonu: JavaScript kullanarak belirli bir HTML elemanına erişmek ve onunla etkileşim kurmak (içeriğini değiştirmek, olay dinleyicileri eklemek vb.) için en yaygın yöntemlerden biridir. document.getElementById("değer") metodu ile elemana erişilir. Çapa Bağlantıları (Fragment Identifiers): Bir web sayfasının içinde belirli bir bölüme doğrudan bağlantı vermek için kullanılır. Bağlantının href niteliği, # sembolü ile başlayan id değerini işaret eder (örneğin, Bölüm 2'ye Git). Form Elemanları ve Erişilebilirlik: etiketi ile bir form elemanını ilişkilendirmek için for niteliği ile id değeri kullanılır, bu da erişilebilirliği artırır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, id niteliğinin farklı bağlamlarda nasıl kullanıldığını göstermektedir: Örnek 1: CSS ile Stil Uygulama Bu paragraf, sadece kendisine özel stillere sahiptir. softmush.com Örnek 2: JavaScript ile Eleman Seçimi Bana Tıkla Burada bir mesaj belirecek. softmush.com Örnek 3: Çapa Bağlantısı (Fragment Identifier) Bölüm İki'ye Atla Sayfanın İkinci Bölümü Bu bölüm, yukarıdaki bağlantı tıklanarak doğrudan erişilebilir.softmush.com Örnek 4: ile Form Elemanını İlişkilendirme Kullanıcı Adı: softmush.com Bu örnekte, etiketi for="kullaniciAdi" niteliği ile id="kullaniciAdi" olan elemanına bağlanmıştır. Bu sayede, kullanıcı etikete tıkladığında ilgili giriş alanı otomatik olarak odaklanır, bu da erişilebilirliği artırır. Önemli Notlar Her id değeri, bir HTML belgesi içinde benzersiz olmalıdır. Aynı id değerinin birden fazla elemana atanması, beklenen davranış hatalarına yol açabilir ve standartlara aykırıdır. id değerleri büyük/küçük harfe duyarlıdır. JavaScript ve CSS'te id seçicilerini kullanırken bu duruma dikkat edilmelidir. Bir eleman, yalnızca bir id niteliğine sahip olabilir. Birden fazla id ataması geçersizdir. Birden fazla elemana aynı stil veya davranışı uygulamak istendiğinde, id yerine class niteliği tercih edilmelidir. id, tekil ve benzersiz elemanlar için ayrılmıştır. HTML5 standartlarına göre, id değerleri geçerli bir harfle başlamalı ve boşluk karakteri içermemelidir. Geçersiz id değerleri, bazı tarayıcılarda veya eski HTML sürümlerinde sorunlara neden olabilir.
avatar
Emin
10
0
PHP Makaleleri
php-dilinde-akis-baglami-secenekleri-ve-bagimsiz-degiskenleri-ile-gelismis-kontrol
PHP Dilinde Akış Bağlamı Seçenekleri ve Bağımsız Değişkenleri ile Gelişmiş Kontrol
PHP geliştiricileri için harici kaynaklarla etkileşim, genellikle dosya sisteminden veri okuma, ağ istekleri yapma veya özel protokollere erişim gibi işlemleri içerir. Bu tür işlemlerin davranışını detaylı bir şekilde kontrol etmek, özellikle ağ isteklerinde zaman aşımı, kimlik doğrulama, vekil sunucu ayarları gibi özelleştirmeler yapmak kritik öneme sahiptir. PHP'nin bağlam (context) mekanizması, bu etkileşimleri yapılandırmak için güçlü ve esnek bir yol sunar. Bağlamlar, bir akış (stream) işlemi sırasında kullanılacak protokole özgü seçenekleri ve kullanıcı tanımlı bağımsız değişkenleri (parameters) bir araya getiren bir kapsayıcı görevi görür. Bu makale, PHP'de bağlam seçeneklerinin ve bağımsız değişkenlerinin nasıl tanımlandığını ve kullanıldığını detaylı bir şekilde inceleyecektir. Sözdizimi PHP'de bir bağlam oluşturmak ve yapılandırmak için başlıca iki fonksiyon kullanılır: stream_context_create() ve stream_context_set_option(). Bağımsız değişkenleri (parameters) ayarlamak için ise stream_context_set_params() fonksiyonu mevcuttur. Bağlam Oluşturma: $context = stream_context_create( array $options = [], array $params = [] );softmush.com Seçenek Ayarlama: bool stream_context_set_option( resource $context, string $wrapper, string $option, mixed $value ); // Alternatif olarak, stream_context_create() sırasında da ayarlanabilir: // $context = stream_context_create([ // 'wrapper' => [ // 'option' => 'value' // ] // ]);softmush.com Bağımsız Değişken Ayarlama: bool stream_context_set_params( resource $context, array $params );softmush.com Detaylı Açıklama PHP'deki akış bağlamları, belirli bir akış işlemi sırasında davranışını değiştirmek için kullanılan anahtar-değer çiftlerinden oluşan koleksiyonlardır. Bağlam Oluşturma ve Seçenekler stream_context_create() fonksiyonu, yeni bir akış bağlamı kaynağı (resource) döndürür. Bu fonksiyon, isteğe bağlı olarak iki dizi parametresi alır: $options: Bu dizi, çeşitli akış sarmalayıcıları (wrapper) için protokole özgü seçenekleri içerir. Yapısı ['wrapper_adı' => ['seçenek_adı' => 'değer']] şeklindedir. $params: Bu dizi, bağlam için kullanıcı tanımlı bağımsız değişkenleri içerir. Genellikle bir bağlamın yaşam döngüsü boyunca bir akışa özel veri veya geri çağırma fonksiyonları (callback functions) eklemek için kullanılır. Seçenekler (Options): Seçenekler, belirli bir sarmalayıcının (wrapper) davranışını özelleştirmek için kullanılır. Örneğin, http:// sarmalayıcısı için zaman aşımı (timeout), kullanıcı aracısı (user agent) veya HTTP başlıkları gibi ayarlar yapılabilir. Her sarmalayıcının desteklediği seçenekler farklıdır. Yaygın olarak kullanılan bazı sarmalayıcılar ve seçenek kategorileri şunlardır: http / https: method, header, user_agent, timeout, proxy, follow_location, content vb. ftp: overwrite, resume_pos, timeout vb. file: throw_exceptions (PHP 8.0+) ssl: verify_peer, cafile, local_cert, passphrase vb. stream_context_set_option() fonksiyonu, mevcut bir bağlama tek bir seçenek eklemek veya değiştirmek için kullanılır. Parametreleri şunlardır: $context: Seçeneğin ekleneceği veya değiştirileceği bağlam kaynağı. $wrapper: Seçeneğin ait olduğu akış sarmalayıcısının adı (örneğin, 'http' veya 'ssl'). $option: Ayarlanacak seçeneğin adı (örneğin, 'timeout' veya 'method'). $value: Seçeneğin değeri. Bağımsız Değişkenler (Parameters)
avatar
Emin
14
0
Python Makaleleri
python-dilinde-range-fonksiyonunun-kapsamli-kullanimi
Python Dilinde `range()` Fonksiyonunun Kapsamlı Kullanımı
Python programlama dilinde, belirli bir aralıkta sayı dizileri oluşturmak ve özellikle döngülerde bu dizileri kullanmak için sıklıkla başvurulan temel yapı taşlarından biri range() fonksiyonudur. Bu fonksiyon, liste veya tuple gibi tüm sayıları bellekte tutmak yerine, gerektiğinde sayıları üreten bir "range nesnesi" döndürerek bellek verimliliği sağlar. Genellikle for döngüleriyle birlikte kullanılarak belirli sayıda tekrar eden işlemler gerçekleştirmek için idealdir. Sözdizimi range() fonksiyonunun üç farklı kullanım şekli bulunmaktadır: range(stop) range(start, stop) range(start, stop, step)softmush.com Detaylı Açıklama range() fonksiyonunun parametreleri şu anlamlara gelmektedir: start (isteğe bağlı): Dizinin başlayacağı tam sayıyı belirtir. Eğer belirtilmezse, varsayılan değeri 0'dır. stop (zorunlu): Dizinin biteceği tam sayıyı belirtir. Bu sayı, üretilen diziye dahil edilmez. Yani, dizi stop - 1 değerinde sona erer. step (isteğe bağlı): Dizideki ardışık sayılar arasındaki artış miktarını belirtir. Eğer belirtilmezse, varsayılan değeri 1'dir. Negatif bir değer de olabilir, bu durumda dizi azalan sırada üretilir. range(), bir iterable nesne döndürür, doğrudan bir liste değil. Bu nesne, üzerinde iterasyon yapılabilir ancak tüm elemanları aynı anda bellekte tutmaz. Örnekler Örnek 1: Tek Parametre Kullanımı (stop) Bu kullanım, 0'dan başlayıp stop değerine kadar (hariç) bir dizi oluşturur. # 0'dan 4'e kadar (5 hariç) sayılar üretir for i in range(5): print(i) # Çıktı: # 0 # 1 # 2 # 3 # 4softmush.com Örnek 2: İki Parametre Kullanımı (start, stop) Bu kullanım, start değerinden başlayıp stop değerine kadar (hariç) bir dizi oluşturur. # 2'den 6'ya kadar (7 hariç) sayılar üretir for i in range(2, 7): print(i) # Çıktı: # 2 # 3 # 4 # 5 # 6softmush.com Örnek 3: Üç Parametre Kullanımı (start, stop, step) Bu kullanım, start değerinden başlayıp stop değerine kadar (hariç), step miktarı kadar artarak bir dizi oluşturur. # 0'dan 10'a kadar (11 hariç), 2'şer artarak sayılar üretir for i in range(0, 11, 2): print(i) # Çıktı: # 0 # 2 # 4 # 6 # 8 # 10softmush.com Örnek 4: Negatif step Kullanımı (Geriye Doğru Sayma) step parametresine negatif bir değer verilerek azalan bir dizi oluşturulabilir. Bu durumda start değeri stop değerinden büyük olmalıdır. # 10'dan 0'a kadar (0 hariç), 1'er azalarak sayılar üretir for i in range(10, 0, -1): print(i) # Çıktı: # 10 # 9 # 8 # 7 # 6 # 5 # 4 # 3 # 2 # 1softmush.com Örnek 5: range Nesnesini Bir Listeye Dönüştürme range nesnesinin içeriğini görmek veya bir liste olarak kullanmak isterseniz, list() fonksiyonunu kullanabilirsiniz. # 0'dan 5'e kadar bir range nesnesi oluştur my_range = range(5) print(my_range) # Range nesnesini listeye dönüştür my_list = list(my_range) print(my_list) # Çıktı: # range(0, 5) # [0, 1, 2, 3, 4]softmush.com Önemli Notlar range() fonksiyonu, kayan noktalı sayılar (float) ile çalışmaz. Yalnızca tam sayılar (integer) için geçerlidir. stop parametresi daima üretilen dizinin dışında kalır. Bu, Python'daki birçok slicing ve aralık belirleme işlemine benzer bir davranıştır. Büyük sayı aralıkları için bile range() kullanmak bellek açısından verimlidir, çünkü tüm sayıları belleğe yüklemez. Yalnızca o anki sayıyı ve bir sonraki sayıyı hesaplamak için gereken bilgiyi tutar. range() tarafından döndürülen nesne, doğrudan bir liste olmasa da, len() fonksiyonu ile uzunluğu alınabilir ve üzerinde indeksleme yapılabilir (örneğin, my_range[0]). Sonsuz döngüden kaçınmak için step değerinin doğru ayarlandığından emin olun. Özellikle negatif step kullanırken start ve stop değerlerinin mantıklı bir sıra izlemesi önemlidir (örneğin, azalan dizide start > stop).
avatar
Emin
20
0
SQL Makaleleri
sql-dilinde-wildcards-joker-karakterler-kullanimi
SQL Dilinde Wildcards (Joker Karakterler) Kullanımı
SQL sorgularında metin tabanlı veriler üzerinde esnek desen eşleştirme yapmak, veritabanı yönetiminde kritik bir yetenektir. Bu yetenek, belirli bir kriteri tam olarak karşılamayan ancak belli bir kalıba uyan kayıtları bulmamızı sağlar. SQL Wildcards (Joker Karakterler), tam da bu amaç için, özellikle LIKE operatörü ile birlikte kullanılarak, arama desenlerinin tanımlanmasında güçlü bir rol oynar. Bu kılavuz, SQL Wildcards'ın temel kullanımını, sözdizimini ve pratik örneklerini detaylandırmaktadır. Sözdizimi SQL Wildcards, genellikle LIKE operatörü ile birlikte kullanılır ve bir WHERE koşulunun parçası olarak bir sütundaki değerlerin belirli bir desene uyup uymadığını kontrol eder. Temel sözdizimi aşağıdaki gibidir: SELECT sütun_adları FROM tablo_adı WHERE sütun_adı LIKE desen;softmush.com Burada desen, bir veya daha fazla joker karakter içeren bir karakter dizisidir. Detaylı Açıklama SQL, desen eşleştirmesi için iki ana joker karakter sunar: % (Yüzde İşareti): Sıfır veya daha fazla karakterle eşleşir. Bu joker karakter, bir metin dizisinin herhangi bir yerinde herhangi bir sayıda karakterin bulunabileceğini belirtmek için kullanılır. Örneğin, 'A%' 'A' ile başlayan herhangi bir metinle eşleşirken, '%A' 'A' ile biten herhangi bir metinle eşleşir ve '%A%' 'A' karakterini içeren herhangi bir metinle eşleşir. _ (Alt Çizgi): Tam olarak tek bir karakterle eşleşir. Bu joker karakter, belirli bir pozisyonda herhangi bir karakterin olabileceğini, ancak o pozisyonun mutlaka dolu olması gerektiğini belirtmek için kullanılır. Örneğin, 'A_Z', 'A' ile başlayıp 'Z' ile biten ve ortasında tam olarak tek bir karakter bulunan metinlerle (örneğin 'AAZ', 'ABZ', 'A1Z' gibi) eşleşir. Bazı veritabanı sistemleri (örneğin, MS Access ve SQL Server), LIKE operatörü ile birlikte [], [^] ve [-] gibi ek joker karakterler sunabilir. Ancak bu kılavuz, tüm SQL standartlarında yaygın olarak desteklenen % ve _ karakterlerine odaklanmaktadır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, bir Musteriler tablosunda (MusteriID, Ad, Soyad, Sehir, Eposta sütunlarına sahip) joker karakterlerin nasıl kullanıldığını göstermektedir. Örnek 1: 'A' harfi ile başlayan müşteri adlarını bulma. SELECT Ad, Soyad FROM Musteriler WHERE Ad LIKE 'A%';softmush.com Bu sorgu, Ad sütunundaki değeri 'A' harfi ile başlayan tüm müşterileri getirir. Örneğin, 'Ayşe', 'Ali', 'Ahmet' gibi adlar eşleşecektir. Örnek 2: 'n' harfi ile biten müşteri adlarını bulma. SELECT Ad, Soyad FROM Musteriler WHERE Ad LIKE '%n';softmush.com Bu sorgu, Ad sütunundaki değeri 'n' harfi ile biten tüm müşterileri listeler. Örneğin, 'Can', 'Asuman', 'Gülşen' gibi adlar eşleşecektir. Örnek 3: Adında 'or' karakter dizisi geçen müşteri adlarını bulma. SELECT Ad, Soyad FROM Musteriler WHERE Ad LIKE '%or%';softmush.com Bu sorgu, Ad sütununda 'or' karakter dizisini herhangi bir konumda içeren tüm müşterileri getirir. Örneğin, 'Ozan', 'Doruk', 'Burak' gibi adlar eşleşebilir. Örnek 4: Tam olarak 5 harfli ve 'e' ile biten müşteri adlarını bulma. SELECT Ad, Soyad FROM Musteriler WHERE Ad LIKE '____e';softmush.com Her bir alt çizgi (_) tek bir karakteri temsil ettiğinden, bu sorgu tam olarak 5 harfli olan ve son harfi 'e' olan adları (örneğin 'Emine', 'Ayşe') bulur. Örnek 5: Soyadı 'B' ile başlayan, ikinci harfi herhangi bir şey olan ve üçüncü harfi 'l' olan müşterileri bulma. SELECT Ad, Soyad FROM Musteriler WHERE Soyad LIKE 'B_l%';softmush.com Bu sorgu, soyadı 'B' ile başlayıp, ikinci harfi herhangi bir karakter olup, üçüncü harfi 'l' olan ve sonrasında herhangi bir karakter dizisi (veya hiçbir şey) gelebilen soyadlarını eşleştirir. Örneğin, 'Balcı', 'Bilen', 'Bilgin' gibi soyadları eşleşebilir. Örnek 6: Belirli bir e-posta domaininden olmayan müşterileri bulma. SELECT Ad, Soyad, Eposta FROM Musteriler WHERE Eposta NOT LIKE '%@example.com';softmush.com NOT LIKE operatörü, belirtilen desene UYMAYAN kayıtları seçmek için kullanılır. Bu örnek, e-posta adresi '@example.com' ile bitmeyen tüm müşterileri getirir. Önemli Notlar LIKE Operatörü: Wildcards, yalnızca LIKE veya NOT LIKE operatörleri ile birlikte kullanıldığında özel anlam taşır. Diğer operatörlerle (örneğin =) kullanıldığında, joker karakterler literal karakterler olarak yorumlanır. Büyük/Küçük Harf Duyarlılığı: Wildcard desen eşleştirmesinin büyük/küçük harf duyarlılığı, kullanılan veritabanı sistemine ve sütunun kolaj ayarlarına bağlıdır. Bazı sistemler varsayılan olarak duyarsızken (örneğin SQL Server), bazıları duyarlıdır (örneğin PostgreSQL, MySQL). Duyarlılığı ayarlamak için genellikle COLLATE anahtar kelimesi veya veritabanı yapılandırmaları kullanılır. Joker Karakterleri Literal Olarak Kullanma: Eğer deseninizde gerçekten bir % veya _ karakterini aramak istiyorsanız (yani joker karakter olarak değil, gerçek bir karakter olarak), ESCAPE anahtar kelimesi ile özel bir kaçış karakteri tanımlamanız gerekir. Örneğin: LIKE '50\% indirim' ESCAPE '\', '50% indirim' metnini arar. Performans Etkileri: Bir desenin başında joker karakter kullanılması (örneğin '%kelime'), veritabanının indeksleri etkin bir şekilde kullanmasını engelleyebilir ve bu da büyük tablolarda sorgu performansını olumsuz etkileyebilir. Mümkün olduğunda, desenleri bir joker karakterle başlatmaktan kaçınmak daha iyi bir uygulama olabilir. Gelişmiş Desen Eşleştirme: Bazı veritabanları (örneğin PostgreSQL, MySQL) daha karmaşık desen eşleştirme ihtiyaçları için düzenli ifadeleri (Regular Expressions) destekleyen REGEXP veya SIMILAR TO gibi operatörler sunar. Bu operatörler, LIKE'tan daha güçlü desen eşleştirme yetenekleri sağlar.
avatar
Emin
10
0
CSS Makaleleri
css-dilinde-css-max-width-kullanimi
CSS Dilinde CSS max-width Kullanımı
CSS'de max-width özelliği, bir elemanın genişliğinin belirli bir değeri asla aşmamasını sağlamak için kullanılır. Bu özellik, özellikle duyarlı web tasarımlarında, içeriğin farklı ekran boyutlarına uyum sağlaması ve taşma sorunlarını önlemesi açısından kritik bir rol oynar. Bir elemanın doğal genişliği ne olursa olsun, max-width tanımlanan değeri bir üst sınır olarak kabul eder ve elemanın genişliğinin bu sınırı geçmesine izin vermez. Bu sayede, elemanlar mevcut alanlarına dinamik olarak uyum sağlayabilirken, aşırı genişlemesi engellenir. Sözdizimi max-width özelliğinin temel sözdizimi aşağıdaki gibidir: selector { max-width: value; }softmush.com Detaylı Açıklama Yukarıdaki sözdiziminde yer alan bileşenler ve value için kullanılabilecek değerler aşağıda açıklanmıştır: selector: Bu, CSS kuralının uygulanacağı HTML elemanını veya eleman grubunu hedefleyen bir CSS seçicisidir. Örneğin, .container, img veya #main-content olabilir. max-width: Uygulanacak CSS özelliğidir. value: Elemanın genişliğinin aşamayacağı maksimum değeri belirler. Aşağıdaki değer tiplerini alabilir: length: Piksel (px), yüzde (%), em, rem, vw (viewport width) gibi mutlak veya göreceli uzunluk birimleri kullanılabilir. Örneğin, 600px, 80%, 50em. none: Bu, max-width özelliğinin varsayılan değeridir. Elemanın maksimum genişlik sınırı yoktur; genişliği doğal içeriğine veya tanımlanmış width özelliğine göre belirlenir. initial: Özelliği, tarayıcının varsayılan değerine ayarlar (genellikle none). inherit: Elemanın max-width değerini doğrudan ebeveyn elemanından miras almasını sağlar. Pratik Kullanım Örnekleri Aşağıdaki örnekler, max-width özelliğinin farklı senaryolarda nasıl kullanılabileceğini göstermektedir. Örnek 1: Duyarlı Görsel Boyutlandırma Bu örnek, bir görselin kapsayıcısının genişliğini aşmamasını ve böylece duyarlı bir şekilde boyutlanmasını sağlar. softmush.com /* CSS Kodu */ .image-container { width: 100%; /* Kapsayıcı tam genişlikte */ max-width: 800px; /* Kapsayıcının maksimum genişliği */ margin: 0 auto; /* Ortalamak için */ } .image-container img { max-width: 100%; /* Resim kapsayıcısının genişliğini aşmaz */ height: auto; /* Oranları korur */ display: block; /* Alt boşluğu kaldırmak için */ }softmush.com Yukarıdaki CSS, .image-container sınıfına sahip bir elemanının maksimum 800px genişliğe sahip olmasını sağlar. İçindeki etiketi ise, kapsayıcısının genişliğinin %100'ünü geçmeyecek şekilde ayarlanmıştır. Bu, ekran boyutu küçüldüğünde resmin otomatik olarak küçülmesini, ancak geniş ekranlarda 800px'ten daha geniş olmamasını garanti eder. Örnek 2: İçerik Kapsayıcısını Sınırlama Bir web sayfasının ana içerik alanının çok genişlemesini engelleyerek okunabilirliği artırmak için kullanılır. Bu, sayfanın ana içeriğidir. Geniş ekranlarda bile belirli bir genişliği aşmayarak okunabilirliği artırır. ... diğer içerikler ... softmush.com /* CSS Kodu */ .main-content { width: 90%; /* Kapsayıcı %90 genişlikte */ max-width: 1200px; /* Maksimum 1200 piksel genişlik */ margin: 0 auto; /* Ortalamak için */ padding: 20px; background-color: #f0f0f0; }softmush.com Bu örnekte, .main-content sınıfına sahip eleman, ekran genişliğinin %90'ını kaplar, ancak asla 1200px'i aşmaz. Bu, içeriğin geniş ekranlarda bile çok yayılmamasını sağlayarak kullanıcı için daha rahat bir okuma deneyimi sunar. Örnek 3: Form Elemanları İçin Kullanım Geniş form alanlarının küçük ekranlarda taşmasını önlerken, büyük ekranlarda da aşırı genişlemesini engeller. Adınız: Mesajınız: softmush.com /* CSS Kodu */ input[type="text"], textarea { width: 100%; /* Eleman kapsayıcısının genişliğini doldurur */ max-width: 400px; /* Maksimum 400 piksel genişlik */ padding: 8px; margin-bottom: 10px; border: 1px solid #ccc; box-sizing: border-box; /* Padding ve border'ı genişliğe dahil eder */ }softmush.com Burada, metin giriş alanları ve , kapsayıcılarının genişliğini dolduracak şekilde ayarlanmıştır, ancak maksimum 400px genişliğe sahiptirler. Bu, form elemanlarının hem küçük hem de büyük ekranlarda uygun boyutlarda görünmesini sağlar. Önemli Notlar width ve max-width Farkı: Bir elemana hem width hem de max-width tanımlandığında, max-width daha yüksek önceliğe sahiptir. Eğer width değeri max-width değerinden büyükse, eleman max-width değerini kullanır. Bu, elemanların esnekliğini korurken aşırı genişlemesini engellemek için idealdir. Duyarlı Tasarımın Temeli: max-width: 100%;, görsellerin, videoların ve diğer medya öğelerinin duyarlı web tasarımlarında kapsayıcılarını aşmamasını sağlamak için yaygın olarak kullanılan temel bir tekniktir. min-width ile Kombinasyon: max-width, min-width (minimum genişlik) ile birlikte kullanılarak bir elemanın genişliği için bir aralık tanımlanabilir. Örneğin, min-width: 300px; max-width: 800px; elemanın genişliğinin 300 pikselden az, 800 pikselden fazla olmamasını sağlar. Taşma Sorunlarını Önleme: Metin içeriği veya diğer elemanlar bir kapsayıcıdan taştığında ortaya çıkan yatay kaydırma çubukları gibi sorunları önlemede etkilidir. box-sizing Etkileşimi: max-width özelliğini kullanırken box-sizing: border-box; özelliğini de eklemek, padding ve border değerlerinin elemanın toplam genişliğine dahil edilmesini sağlayarak daha öngörülebilir bir düzen elde etmenize yardımcı olur.
avatar
Emin
9
0
HTML Makaleleri
html-dilinde-html-classes-kullanimi
HTML Dilinde HTML Classes Kullanımı
HTML (HyperText Markup Language), web sayfalarının iskeletini oluşturan temel işaretleme dilidir. Bu yapının içinde, elementlere belirli özellikler atamak ve onları gruplandırmak için class niteliği kritik bir rol oynar. class niteliği, bir veya daha fazla HTML elementine stil vermek, JavaScript ile manipüle etmek veya belirli elementleri mantıksal olarak gruplandırmak amacıyla kullanılır. Bu makalede, class niteliğinin temel sözdizimi, detaylı açıklaması ve pratik kullanım örnekleri adım adım incelenecektir. Sözdizimi class niteliği, neredeyse tüm HTML elementlerinde kullanılabilir ve bir elemente bir veya daha fazla sınıf adı atamak için kullanılır. Genel sözdizimi aşağıdaki gibidir: İçeriksoftmush.com Detaylı Açıklama Yukarıdaki sözdiziminde yer alan her bir bileşen, class niteliğinin işlevselliğini anlamak için önemlidir: : Bu, , , , , gibi herhangi bir HTML elementini temsil eder. Neredeyse tüm görsel HTML elementleri bu niteliği destekler. class: Bu, HTML'de önceden tanımlanmış bir niteliktir (attribute). Bir elemente bir veya daha fazla sınıf atamak için kullanılır. "sınıf_adı_1 sınıf_adı_2 ...": Bu, elemente atanan sınıf adlarını içeren bir değerdir. Bir elemente birden fazla sınıf atamak mümkündür. Her sınıf adı, boşluk karakteri ile ayrılmalıdır. Örneğin, "menu-item aktif" değeri, elemente hem menu-item hem de aktif sınıflarını atar. Sınıf adları, büyük/küçük harf duyarlıdır ve genellikle bir harfle başlamalıdır. Rakamlar, kısa çizgiler (-) ve alt çizgiler (_) içerebilirler. Sınıf adlarının anlamlı ve açıklayıcı olması, kodun okunabilirliğini ve sürdürülebilirliğini artırır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, class niteliğinin farklı kullanım senaryolarını göstermektedir: Örnek 1: CSS ile Stil Uygulama Bu örnekte, iki farklı etiketine farklı sınıflar atanmış ve bu sınıflara CSS aracılığıyla farklı stiller uygulanmıştır. Bu, aynı türdeki elementleri farklı görsel özelliklerle sunmak için yaygın bir yöntemdir. Bu paragraf kırmızı renkte olacaktır. Bu paragraf mavi renkte olacaktır. .kırmızı-metin { color: red; font-weight: bold; } .mavi-metin { color: blue; font-style: italic; }softmush.com Örnek 2: Birden Fazla Sınıf Kullanımı Bir elemente birden fazla sınıf atayarak, o elementin hem uyarı hem de orta-boyut sınıflarının tanımladığı stilleri alması sağlanır. Bu, CSS kurallarını daha modüler hale getirmeye yardımcı olur. Bu bir uyarı mesajıdır ve orta boyutta gösterilecektir. .uyarı { border: 1px solid orange; background-color: #fff3cd; padding: 10px; } .orta-boyut { font-size: 1.2em; }softmush.com Örnek 3: JavaScript ile Etkileşim JavaScript, class niteliğini kullanarak belirli elementleri seçebilir ve üzerlerinde dinamik işlemler yapabilir. Aşağıdaki örnekte, gizle-goster sınıfına sahip bir butona tıklandığında, kutucuk sınıfına sahip bir elementinin görünürlüğü değiştirilebilir. Kutucuğu Gizle/Göster Bu kutucuk JavaScript ile kontrol ediliyor. document.querySelector('.gizle-goster').addEventListener('click', function() { document.querySelector('.kutucuk').classList.toggle('gizli'); }); // style.css (Örnek) .gizli { display: none; }softmush.com Önemli Notlar Büyük/Küçük Harf Duyarlılığı: Sınıf adları büyük/küçük harf duyarlıdır. Örneğin, .myClass ve .myclass CSS'te farklı olarak ele alınır. Anlamlı Adlandırma: Sınıf adlarını, elementin görünümünden ziyade işlevini veya içeriğini yansıtacak şekilde seçmeye çalışın (örn. .error-message yerine .red-text). Boşlukla Ayırma: Bir elemente birden fazla sınıf atamak için sınıf adlarını boşluk karakteriyle ayırın (örn. class="btn btn-primary"). ID ile Farkı: id niteliği bir sayfada yalnızca bir kez kullanılabilirken, class niteliği birden çok elementte tekrar tekrar kullanılabilir. id daha spesifik bir element seçimi için, class ise grup seçimi için idealdir. Performans: Çok fazla sınıf kullanmak veya çok karmaşık CSS seçiciler oluşturmak, özellikle büyük projelerde performans sorunlarına yol açabilir. Temiz ve optimize edilmiş CSS kuralları kullanmaya özen gösterin.
avatar
Emin
9
0
PHP Makaleleri
php-dilinde-on-tanimli-ozniteliklerin-gucu
PHP Dilinde Ön Tanımlı Özniteliklerin Gücü
PHP 8 ile tanıtılan öznitelikler (attributes), kodunuza yapısal, meta verisel bilgiler eklemenin modern ve deklaratif bir yolunu sunar. Bu özellik, docblock yorumlarının sunduğu sınırlı yeteneklerin ötesine geçerek, sınıflara, yöntemlere, özelliklere, fonksiyonlara, sabitlere ve parametrelere doğrudan programatik meta veriler eklemenize olanak tanır. PHP çekirdeği tarafından sunulan ön tanımlı öznitelikler, geliştiricilere sıkça karşılaşılan senaryolarda kodlarını daha net, güvenli ve yönetilebilir hale getirme imkanı sağlar. Bu makale, PHP'de ön tanımlı özniteliklerin temel kullanımını ve pratik uygulamalarını detaylandıracaktır. Sözdizimi Ön tanımlı öznitelikler, hedeflenen kod öğesinin hemen üzerine, #[ ile başlayıp ] ile biten bir yapı içinde yerleştirilir. Her öznitelik, bir sınıf gibi davranır ve isteğe bağlı olarak parametreler alabilir. Birden fazla öznitelik aynı öğeye uygulanabilir ve bunlar virgül ile ayrılarak aynı #[...] bloğunda veya ayrı bloklarda belirtilebilir. Genel sözdizimi aşağıdaki gibidir:
avatar
Emin
32
0
Python Makaleleri
python-dilinde-fonksiyonlarin-etkin-kullanimi
Python Dilinde Fonksiyonların Etkin Kullanımı
Python'da fonksiyonlar, belirli bir görevi yerine getiren, yeniden kullanılabilir kod bloklarıdır. Bu yapısal elemanlar, kodun modülerliğini artırır, okunabilirliği iyileştirir ve aynı kod bloğunu birden fazla kez yazma ihtiyacını ortadan kaldırarak geliştirme sürecini hızlandırır. Fonksiyonlar, karmaşık problemleri daha küçük, yönetilebilir parçalara ayırmak için temel bir araçtır ve her programlama dilinde olduğu gibi Python'da da etkin kod yazımının vazgeçilmez bir parçasıdır. Sözdizimi Python'da bir fonksiyon tanımlamanın temel sözdizimi aşağıdaki gibidir: def fonksiyon_adi(parametre1, parametre2=varsayilan_deger): """ Bu bir docstring'dir. Fonksiyonun ne iş yaptığını açıklar. """ # Fonksiyon gövdesi (işlemlerin yapıldığı yer) if kosul: islem1 else: islem2 return deger softmush.com Detaylı Açıklama def: Python'da bir fonksiyon tanımlamak için kullanılan anahtar kelimedir. Her fonksiyon tanımı bu kelime ile başlar. fonksiyon_adi: Fonksiyonunuza verdiğiniz isimdir. Fonksiyon isimleri, işlevlerini yansıtmalı ve snake_case (küçük harflerle ve kelimeler arasına alt çizgi konularak) kuralına uygun olmalıdır. Örneğin: veri_isleme, toplama_yap. (parametre1, parametre2=varsayilan_deger): Fonksiyonun dışarıdan alacağı giriş değerlerini (argümanları) temsil eden parametre listesidir. Parantezler boş bırakılabilir (parametre almayan fonksiyonlar için), veya virgülle ayrılmış bir ya da daha fazla parametre içerebilir. Parametrelere varsayılan değerler atanabilir; bu durumda, fonksiyon çağrılırken bu parametreler için bir değer sağlanmazsa varsayılan değer kullanılır. : (İki Nokta Üst Üste): Fonksiyon başlığının sonuna gelir ve fonksiyon gövdesinin başladığını belirtir. """Docstring""": Fonksiyonun hemen altında üç tırnak (tek veya çift) içinde yer alan isteğe bağlı bir dizedir. Bu, fonksiyonun ne işe yaradığını, aldığı parametreleri ve döndürdüğü değeri açıklayan bir belgeleme metnidir. Kodun anlaşılırlığını büyük ölçüde artırır ve help() fonksiyonu ile erişilebilir. # Fonksiyon gövdesi: Fonksiyonun ana mantığını ve çalıştıracağı komutları içeren bloktur. Bu bloktaki tüm satırlar, def anahtar kelimesi ile aynı hizada başlayan satıra göre girintili (genellikle 4 boşluk) olmalıdır. Python'da girintileme, kod bloklarını tanımlamak için kullanılır ve sözdiziminin önemli bir parçasıdır. return deger: Fonksiyonun çalışmasını sonlandıran ve çağıran yere bir değer döndüren anahtar kelimedir. Bir return ifadesi kullanıldığında, fonksiyonun yürütülmesi durur ve belirtilen değer geri döndürülür. Eğer bir return ifadesi kullanılmazsa veya boş bir return kullanılırsa, Python otomatik olarak None değerini döndürür. Pratik Kullanım Örnekleri Aşağıdaki örnekler, fonksiyonların Python'da nasıl tanımlandığını ve kullanıldığını göstermektedir. Örnek 1: Parametre almayan ve değer döndürmeyen basit bir fonksiyon. def selamla(): """ Kullanıcıyı selamlayan basit bir fonksiyon. """ print("Merhaba, Python dünyasına hoş geldiniz!") # Fonksiyonu çağırma selamla() softmush.com Örnek 2: Parametre alan ve değer döndüren bir fonksiyon. def topla(sayi1, sayi2): """ İki sayıyı toplayıp sonucu döndüren fonksiyon. Args: sayi1 (int/float): Toplanacak birinci sayı. sayi2 (int/float): Toplanacak ikinci sayı. Returns: int/float: İki sayının toplamı. """ sonuc = sayi1 + sayi2 return sonuc # Fonksiyonu çağırma ve döndürülen değeri kullanma toplam_sonucu = topla(10, 5) print(f"10 ve 5'in toplamı: {toplam_sonucu}") farkli_toplam = topla(2.5, 7.3) print(f"2.5 ve 7.3'ün toplamı: {farkli_toplam}") softmush.com Örnek 3: Varsayılan parametre değeri olan bir fonksiyon. def hesapla_indirim(fiyat, indirim_orani=0.10): """ Belirtilen fiyata indirim uygulayarak yeni fiyatı döndüren fonksiyon. Args: fiyat (float): Ürünün orijinal fiyatı. indirim_orani (float, optional): Uygulanacak indirim oranı. Varsayılan %10'dur. Returns: float: İndirimli fiyat. """ indirim_miktari = fiyat * indirim_orani indirimli_fiyat = fiyat - indirim_miktari return indirimli_fiyat # Fonksiyonu varsayılan indirim oranıyla çağırma urun_fiyati_1 = 100 yeni_fiyat_1 = hesapla_indirim(urun_fiyati_1) print(f"100 TL'lik ürünün %10 indirimli fiyatı: {yeni_fiyat_1}") # Fonksiyonu özel bir indirim oranıyla çağırma urun_fiyati_2 = 250 yeni_fiyat_2 = hesapla_indirim(urun_fiyati_2, 0.25) # %25 indirim print(f"250 TL'lik ürünün %25 indirimli fiyatı: {yeni_fiyat_2}") softmush.com Önemli Notlar Girintileme (Indentation): Python'da kod blokları (fonksiyon gövdeleri, döngüler, koşullu ifadeler) girintileme ile tanımlanır. Yanlış girintileme IndentationError hatasına yol açar. return Anahtar Kelimesi: Bir fonksiyonun bir değer döndürmesini sağlar. Eğer bir fonksiyon return ifadesi içermiyorsa, otomatik olarak None döndürür. print() fonksiyonu ekrana çıktı verirken, return bir değeri fonksiyonun çağrıldığı yere geri verir. Değişken Kapsamı (Scope): Fonksiyon içinde tanımlanan değişkenler yereldir ve yalnızca o fonksiyon içinde erişilebilirler. Fonksiyon dışında tanımlanan değişkenler ise globaldir ve fonksiyon içinde de erişilebilirler (ancak global anahtar kelimesi kullanılmadan doğrudan değiştirilemezler). Fonksiyon İsimlendirme Kuralları: Fonksiyon isimleri genellikle küçük harflerle ve kelimeler arasına alt çizgi konularak yazılır (snake_case). Fonksiyonun amacını açıkça belirtmelidir. Docstring Kullanımı: Her fonksiyon için açıklayıcı bir docstring yazmak iyi bir programlama pratiğidir. Bu, kodunuzu başkaları (veya gelecekteki siz) için daha anlaşılır hale getirir. help(fonksiyon_adi) komutu ile bu belgelere erişebilirsiniz. Fonksiyon Çağırma: Bir fonksiyonu çalıştırmak için adını ve ardından parantezleri () kullanmanız gerekir (örneğin, selamla()). Parantezler olmadan sadece fonksiyon adını yazmak, fonksiyonun kendisine bir referans verir, onu çalıştırmaz.
avatar
Emin
7
0
SQL Makaleleri
sql-dilinde-like-operatoru-desen-tabanli-arama-rehberi
SQL Dilinde LIKE Operatörü: Desen Tabanlı Arama Rehberi
SQL veritabanlarında, belirli bir desene uyan metin değerlerini aramak, veri filtreleme işlemlerinin temel bir parçasıdır. LIKE operatörü, bu tür desen tabanlı aramaları gerçekleştirmek için kullanılır. Bu operatör, tam eşleşme yerine kısmi eşleşmeleri veya belirli kalıpları içeren metinleri bulmak gerektiğinde devreye girer ve esnek sorgular oluşturmaya olanak tanır. Sözdizimi LIKE operatörünün genel sözdizimi aşağıdaki gibidir: SELECT kolon_adi(lar) FROM tablo_adi WHERE kolon_adi LIKE desen;softmush.com Detaylı Açıklama LIKE operatörü, WHERE yan tümcesi ile birlikte kullanılarak belirtilen bir sütundaki değerlerin belirli bir desene uyup uymadığını kontrol eder. Bu deseni tanımlamak için iki özel joker karakter (wildcard character) kullanılır: % (Yüzde İşareti): Sıfır veya daha fazla karakter dizisini temsil eder. Örneğin, 'A%' ile başlayan tüm değerleri, '%A' ile biten tüm değerleri ve '%A%' ile A içeren tüm değerleri bulabilirsiniz. _ (Alt Çizgi): Tek bir karakteri temsil eder. Örneğin, 'A_C', 'ABC', 'AEC' gibi üç karakterli ve ortasında herhangi bir karakter olan değerleri bulur. Bu joker karakterler, arama desenini oluşturmak için birleştirilebilir. Pratik Kullanım Örnekleri Aşağıdaki örnekler, LIKE operatörünün farklı senaryolarda nasıl kullanıldığını göstermektedir. Bu örneklerde, bir Urunler tablosunun UrunAdi sütununda arama yaptığımızı varsayalım. Örnek 1: Belirli Bir Harf Dizisiyle Başlayan Değerler 'Bilgisayar' kelimesiyle başlayan tüm ürün adlarını bulmak için: SELECT UrunAdi FROM Urunler WHERE UrunAdi LIKE 'Bilgisayar%';softmush.com Örnek 2: Belirli Bir Harf Dizisiyle Biten Değerler 'Mouse' kelimesiyle biten tüm ürün adlarını bulmak için: SELECT UrunAdi FROM Urunler WHERE UrunAdi LIKE '%Mouse';softmush.com Örnek 3: Belirli Bir Harf Dizisi İçeren Değerler Ürün adında 'USB' ifadesi geçen tüm ürünleri bulmak için: SELECT UrunAdi FROM Urunler WHERE UrunAdi LIKE '%USB%';softmush.com Örnek 4: Belirli Bir Karakter Deseniyle Eşleşen Değerler İkinci harfi 'a' olan ve toplamda en az üç karakterli ürün adlarını bulmak için: SELECT UrunAdi FROM Urunler WHERE UrunAdi LIKE '_a%';softmush.com Örnek 5: NOT LIKE Kullanımı Belirli bir desene uymayan değerleri dışlamak için NOT LIKE operatörü kullanılır. Örneğin, 'Telefon' kelimesiyle başlamayan tüm ürün adlarını bulmak için: SELECT UrunAdi FROM Urunler WHERE UrunAdi NOT LIKE 'Telefon%';softmush.com Önemli Notlar Büyük/Küçük Harf Duyarlılığı: LIKE operatörünün büyük/küçük harf duyarlılığı, kullanılan veritabanı sistemine (örneğin, PostgreSQL, MySQL, SQL Server) ve sütunun harmanlama (collation) ayarlarına bağlıdır. Bazı sistemler varsayılan olarak duyarsızken, bazıları duyarlı olabilir veya harmanlama ayarları ile bu durum değiştirilebilir. Büyük/küçük harf duyarlılığından bağımsız arama yapmak için genellikle LOWER() veya UPPER() fonksiyonları ile birlikte kullanılır: WHERE LOWER(kolon_adi) LIKE LOWER('%desen%'). Performans: Özellikle '%' ile başlayan desenler (örneğin, LIKE '%desen') indeks kullanımını zorlaştırabilir ve büyük tablolarda sorgu performansını olumsuz etkileyebilir. Mümkünse, deseni bir harf veya karakter dizisiyle başlatmak (LIKE 'desen%') daha performanslı olabilir. Kaçış Karakterleri (Escape Characters): Eğer aradığınız desende % veya _ gibi joker karakterler varsa ve bunları literal olarak aramak istiyorsanız, bir kaçış karakteri (escape character) kullanmanız gerekir. Çoğu SQL veritabanı, LIKE '%50\_%' ESCAPE '\' gibi bir sözdizimine izin verir, bu da '50_' ifadesini içeren değerleri arar. Regular Expressions (Regex): Daha karmaşık desen eşleştirme ihtiyaçları için, birçok veritabanı REGEXP veya RLIKE gibi düzenli ifade operatörlerini destekler. Bu operatörler, LIKE operatörüne göre çok daha güçlü ve esnek desen eşleştirme yetenekleri sunar.
avatar
Emin
11
0
JavaScript Makaleleri
javascriptte-temel-programlama-sozdizimi-ve-kullanim
JavaScript’te Temel Programlama: Sözdizimi ve Kullanım
JavaScript, web geliştirmenin temel taşlarından biri olmasının yanı sıra, Node.js ile sunucu tarafı uygulamalardan mobil uygulamalara (React Native) ve hatta masaüstü uygulamalarına (Electron) kadar geniş bir alanda kullanılan dinamik ve çok yönlü bir programlama dilidir. Bu kılavuz, JavaScript ile programlama yapmanın temel yapı taşlarını, sözdizimini ve yaygın kullanım senaryolarını adım adım açıklayarak, sağlam bir temel oluşturmanızı hedeflemektedir. Temel Sözdizimi (Syntax) JavaScript kodları, tarayıcılarda veya Node.js gibi çalışma zamanı ortamlarında yorumlanan bir dizi ifade ve deyimden oluşur. Her JavaScript programı, değişken tanımlamaları, operatör kullanımları, kontrol akışı yapıları ve fonksiyon çağrılarının birleşimidir. Temel bir JavaScript programının genel yapısı aşağıdaki gibidir: // Tek satırlık yorum /* * Çok satırlı yorum */ // Değişken tanımlamaları let degiskenAdi = deger; const sabitDeger = baskaDeger; // İfadeler ve operatörler let sonuc = degiskenAdi + 5; // Kontrol akışı (koşullu ifadeler, döngüler) if (sonuc > 10) { // Koşul doğruysa çalışacak kod } else { // Koşul yanlışsa çalışacak kod } for (let i = 0; i < 5; i++) { // Döngü içinde çalışacak kod } // Fonksiyon tanımlamaları ve çağrıları function fonksiyonAdi(parametre1, parametre2) { // Fonksiyonun yapacağı işlemler return parametre1 + parametre2; } let toplam = fonksiyonAdi(10, 20); softmush.com Detaylı Açıklama Yukarıdaki sözdiziminde yer alan her bir bileşenin ne anlama geldiğini ve nasıl kullanıldığını detaylı olarak inceleyelim: Değişkenler: JavaScript'te verileri depolamak için değişkenler kullanılır. Değişkenler, var, let veya const anahtar kelimeleriyle tanımlanır. let: Blok kapsamlı bir değişken tanımlar. Değeri daha sonra değiştirilebilir. const: Blok kapsamlı, sadece bir kez değer atanabilen sabit bir değişken tanımlar. Atandıktan sonra değeri değiştirilemez. var: Fonksiyon kapsamlı bir değişken tanımlar. Modern JavaScript'te genellikle let ve const tercih edilir. Veri Tipleri: JavaScript, farklı türde verileri işleyebilir. Başlıca veri tipleri şunlardır: Primitive (İlkel) Tipler: string (metin), number (sayı), boolean (mantıksal doğru/yanlış), null (boş değer), undefined (tanımsız), symbol, bigint. Reference (Referans) Tipler: object (nesneler, diziler, fonksiyonlar). Operatörler: Değişkenler ve değerler üzerinde işlemler yapmak için kullanılır. Önemli operatör türleri şunlardır: Aritmetik Operatörler: +, -, *, /, % (modül). Atama Operatörleri: =, +=, -=, *=, /=. Karşılaştırma Operatörleri: == (değer eşitliği), === (değer ve tip eşitliği), !=, !==, >, =, = 18) { console.log("Ehliyet başvurusunda bulunabilirsiniz."); } else { console.log("Ehliyet başvurusu için yaşınız uygun değil."); } let puan = 75; let not; if (puan >= 90) { not = "A"; } else if (puan >= 80) { not = "B"; } else if (puan >= 70) { not = "C"; } else { not = "D"; } console.log("Öğrencinin Notu:", not); // Çıktı: Öğrencinin Notu: C softmush.com Örnek 3: Döngü Kullanımı (for) let meyveler = ["elma", "armut", "muz", "çilek"]; for (let i = 0; i < meyveler.length; i++) { console.log("Benim favori meyvem: " + meyveler[i]); } /* Çıktı: Benim favori meyvem: elma Benim favori meyvem: armut Benim favori meyvem: muz Benim favori meyvem: çilek */ softmush.com Örnek 4: Fonksiyon Tanımlama ve Çağırma // İki sayıyı toplayan bir fonksiyon function topla(sayi1, sayi2) { return sayi1 + sayi2; } let sonuc1 = topla(5, 7); console.log("5 + 7 =", sonuc1); // Çıktı: 5 + 7 = 12 // İki sayıyı çarpan bir ok fonksiyonu const carp = (sayi1, sayi2) => { return sayi1 * sayi2; }; let sonuc2 = carp(4, 6); console.log("4 * 6 =", sonuc2); // Çıktı: 4 * 6 = 24 softmush.com Önemli Notlar Noktalı Virgül (;) Kullanımı: JavaScript'te ifadelerin sonunda noktalı virgül kullanmak genellikle iyi bir pratiktir, ancak bazı durumlarda JavaScript motoru otomatik olarak ekleyebilir (Automatic Semicolon Insertion - ASI). Yine de belirsizliği önlemek ve kodunuzu daha okunur kılmak için manuel olarak eklenmesi önerilir. let ve const Tercihi: Modern JavaScript'te değişken tanımlarken her zaman var yerine let veya const kullanın. Bu, kapsam (scoping) sorunlarını azaltır ve kodunuzu daha öngörülebilir hale getirir. Değeri değişmeyecekse const, değişecekse let kullanın. Tip Zorlaması (Type Coercion): JavaScript, esnek bir dile sahip olduğundan, bazı durumlarda farklı veri tipleri arasında otomatik dönüşümler yapar. Örneğin, "5" + 2 ifadesi "52" sonucunu verirken, "5" - 2 ifadesi 3 sonucunu verir. Bu durum, beklenmedik hatalara yol açabileceği için dikkatli olunmalıdır. Kesin tip karşılaştırmaları için === (üç eşit) operatörünü kullanın. Yorum Satırları: Kodunuzu açıklamak için yorum satırlarını kullanın. Tek satırlık yorumlar için //, çok satırlık yorumlar için /* ... */ kullanabilirsiniz. Bu, kodunuzun başkaları (ve gelecekteki siz) tarafından daha kolay anlaşılmasını sağlar. Hata Ayıklama (Debugging): Kodunuzdaki hataları bulmak için console.log() fonksiyonunu sıkça kullanın. Bu, değişkenlerin değerlerini, fonksiyonların çağrılıp çağrılmadığını veya bir kod bloğuna girilip girilmediğini kontrol etmenize yardımcı olur.
avatar
Emin
8
0
PHP Makaleleri
php-dilinde-ontanimli-arayuzler-ve-soyut-siniflar-kullanimi
PHP Dilinde Öntanımlı Arayüzler ve Soyut Sınıflar Kullanımı
Nesne yönelimli programlama (OOP) prensipleri, modern yazılım geliştirmede kodun yapısını, okunabilirliğini ve sürdürülebilirliğini sağlamak için kritik öneme sahiptir. PHP, bu prensipleri desteklemek adına arayüzler (interfaces) ve soyut sınıflar (abstract classes) gibi güçlü yapılar sunar. Bu yapılar, sınıflar arasında belirli davranış sözleşmeleri tanımlayarak veya ortak bir temel sağlayarak esnek ve genişletilebilir sistemler oluşturulmasına olanak tanır. Bu makale, PHP'deki arayüzlerin ve soyut sınıfların detaylı kullanımını, sözdizimini ve pratik örneklerini ele alacaktır. Temel Sözdizimi PHP'de arayüzler ve soyut sınıflar, belirli anahtar kelimeler kullanılarak tanımlanır ve diğer sınıflar tarafından uygulanır veya miras alınır. Aşağıda temel sözdizimleri gösterilmektedir. softmush.com Detaylı Açıklama Arayüzler ve soyut sınıflar, farklı senaryolar için tasarlanmış olsalar da, her ikisi de soyutlama ve polimorfizm prensiplerini destekler. Arayüzler (Interfaces) Bir arayüz, bir sınıfın sahip olması gereken metotları tanımlayan bir "sözleşme" görevi görür. Arayüzler, bir sınıfın dış dünyaya hangi davranışları sergileyeceğini belirtir, ancak bu davranışların nasıl uygulanacağını belirtmez. Tanım: Bir arayüz interface anahtar kelimesiyle tanımlanır. İçerisinde yalnızca metot imzaları ve sabitler bulunabilir. Metotlar: Arayüzdeki tüm metotlar otomatik olarak public ve soyuttur (yani gövdeleri yoktur). Metot imzaları, parametre tiplerini ve dönüş tiplerini (PHP 7.0 ve sonrası) içerebilir. Özellikler: Arayüzler herhangi bir özellik (member variable) tanımlayamaz. Sabitler: Arayüzler sabitler tanımlayabilir. Bu sabitlere ArayuzAdi::SABIT_ADI şeklinde erişilebilir. Uygulama: Bir sınıf, bir arayüzü implements anahtar kelimesiyle uygular. Bir sınıf birden fazla arayüzü uygulayabilir (örneğin: class MyClass implements InterfaceA, InterfaceB). Zorunluluk: Bir arayüzü uygulayan sınıf, arayüzdeki tüm metotları belirtilen imzalarla (public olarak) uygulamak zorundadır. Aksi takdirde bir fatal hata oluşur. Soyut Sınıflar (Abstract Classes) Soyut sınıflar, bir veya daha fazla soyut metot içerebilen veya içermeyen, doğrudan örneği oluşturulamayan sınıflardır. Genellikle, bir grup ilgili sınıf için ortak bir temel (base class) sağlamak amacıyla kullanılırlar. Tanım: Bir soyut sınıf abstract class anahtar kelimesiyle tanımlanır. Örneklenme: Soyut sınıfların doğrudan bir örneği (objesi) oluşturulamaz. Yalnızca alt sınıfları (concrete classes) örneklenebilir. Metotlar: Soyut sınıflar hem soyut metotlar (abstract public function metotAdi();) hem de somut metotlar (gövdesi olan metotlar) içerebilir. Soyut metotların gövdesi yoktur ve alt sınıflar tarafından uygulanması zorunludur. Somut metotlar ise alt sınıflar tarafından miras alınır ve isteğe bağlı olarak geçersiz kılınabilir. Erişim Belirleyiciler: Soyut metotlar public veya protected olabilir ancak private olamaz. Alt sınıflar soyut metotları uygularken aynı veya daha az kısıtlayıcı bir erişim belirleyici kullanamazlar (yani protected soyut metot public olarak uygulanabilir ama private olarak uygulanamaz). Özellikler: Soyut sınıflar özellikler (member variables) tanımlayabilir. Bu özellikler public, protected veya private olabilir. Kalıtım: Bir sınıf, bir soyut sınıfı extends anahtar kelimesiyle miras alır. PHP tekli kalıtımı desteklediği için bir sınıf yalnızca bir soyut sınıfı miras alabilir. Zorunluluk: Soyut bir sınıfı miras alan alt sınıf, soyut sınıftaki tüm soyut metotları uygulamak zorundadır. Aksi takdirde, alt sınıfın kendisi de soyut olarak tanımlanmalıdır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, arayüzlerin ve soyut sınıfların gerçek dünya senaryolarında nasıl kullanılabileceğini göstermektedir. Örnek 1: Arayüz Kullanımı - Loglama Sistemi Farklı loglama mekanizmalarını (dosyaya, veritabanına, konsola) destekleyen bir sistem düşünelim. Tüm loglama sınıflarının aynı log() metoduna sahip olmasını bir arayüz ile sağlayabiliriz. softmush.com Bu örnekte, Logger arayüzü, loglama yeteneğine sahip tüm sınıfların log() metodunu içermesi gerektiğini garanti eder. Bu sayede, processLog() fonksiyonu herhangi bir Logger tipindeki objeyi kabul edebilir, bu da esneklik ve kod tekrarı önleme sağlar. Örnek 2: Soyut Sınıf Kullanımı - Ödeme Geçitleri Bir e-ticaret uygulamasında farklı ödeme geçitleri (Kredi Kartı, PayPal, Havale) olabilir. Bu geçitlerin hepsinin ortak bazı işlevleri (örneğin işlem ücreti hesaplama) ve kendine özgü işlevleri (ödeme onayı) bulunur. Ortak işlevleri soyut bir sınıfta toplayabiliriz.
avatar
Emin
17
0
Python Makaleleri
python-dilinde-for-dongulerinin-etkin-kullanimi
Python Dilinde For Döngülerinin Etkin Kullanımı
Python, okunabilirliği ve sadeliği ile bilinen güçlü bir programlama dilidir. Birçok programlama görevinde tekrarlayan işlemler, döngüler aracılığıyla etkin bir şekilde gerçekleştirilir. Python'da, belirli bir dizi (liste, demet, dize, küme, sözlük veya diğer yinelenebilir nesneler) üzerinde yineleme yapmak için for döngüsü kullanılır. Bu makale, Python'daki for döngüsünün temel yapısını, kullanımını ve pratik örneklerini detaylı bir şekilde açıklamaktadır. Temel Sözdizimi Python'da for döngüsünün genel sözdizimi aşağıdaki gibidir: for eleman in yinelenebilir_nesne: # Döngü bloğu # Her yinelemede çalışacak kod buraya yazılır # 'eleman' değişkeni her adımda yinelenebilir_nesnenin bir sonraki öğesini alır softmush.com Detaylı Açıklama Yukarıdaki sözdiziminde yer alan her bir bileşenin işlevi şöyledir: for: Python'da bir döngü başlatmak için kullanılan anahtar kelimedir. eleman: Her yinelemede, yinelenebilir_nesne'den alınan mevcut öğeyi temsil eden bir değişkendir. Bu değişkenin adı isteğe bağlıdır ve genellikle döngü içinde işlenecek öğenin anlamını yansıtır. in: eleman değişkeninin hangi yinelenebilir_nesne içinde aranacağını belirtmek için kullanılan bir anahtar kelimedir. yinelenebilir_nesne: Üzerinde yineleme yapılacak olan bir koleksiyon veya dizidir. Bu, bir list, tuple, string, set, dictionary veya özel olarak yinelenebilir hale getirilmiş herhangi bir nesne olabilir. : (İki nokta üst üste): for döngüsü başlığının sonunu işaret eder ve döngü bloğunun başladığını belirtir. Döngü bloğu (girintili kod): for döngüsünün her adımında çalıştırılacak kod satırlarıdır. Python'da kod blokları girintileme ile tanımlanır. Tüm döngü bloğu aynı seviyede girintili olmalıdır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, for döngüsünün farklı senaryolarda nasıl kullanılabileceğini göstermektedir. Örnek 1: Liste Öğeleri Üzerinde Yineleme Bir liste içindeki her bir sayıyı ekrana yazdırma. sayilar = [1, 2, 3, 4, 5] for sayi in sayilar: print(sayi) softmush.com Çıktı: 1 2 3 4 5 softmush.com Örnek 2: Bir Dize Üzerinde Yineleme Bir dizedeki her karakteri tek tek yazdırma. kelime = "Python" for karakter in kelime: print(karakter) softmush.com Çıktı: P y t h o n softmush.com Örnek 3: range() Fonksiyonu ile Belirli Sayıda Yineleme range() fonksiyonu, belirli bir aralıkta sayı dizileri oluşturmak için kullanılır ve for döngüleriyle sıkça tercih edilir. # 0'dan 4'e kadar (5 dahil değil) sayılar for i in range(5): print(i) softmush.com Çıktı: 0 1 2 3 4 softmush.com Örnek 4: Sözlük Öğeleri Üzerinde Yineleme Bir sözlüğün anahtarları, değerleri veya hem anahtarları hem de değerleri üzerinde yineleme yapılabilir. ayarlar = {"kullanici": "admin", "dil": "Türkçe", "tema": "koyu"} print("Sözlük Anahtarları:") for anahtar in ayarlar: # Varsayılan olarak anahtarları yineler print(anahtar) print("\nSözlük Değerleri:") for deger in ayarlar.values(): print(deger) print("\nSözlük Öğeleri (Anahtar-Değer çiftleri):") for anahtar, deger in ayarlar.items(): print(f"{anahtar}: {deger}") softmush.com Çıktı: Sözlük Anahtarları: kullanici dil tema Sözlük Değerleri: admin Türkçe koyu Sözlük Öğeleri (Anahtar-Değer çiftleri): kullanici: admin dil: Türkçe tema: koyu softmush.com Örnek 5: enumerate() Fonksiyonu ile İndeks ve Değere Erişim Bazen bir koleksiyonun öğeleri üzerinde yinelerken hem öğenin kendisine hem de indeksine ihtiyaç duyulur. enumerate() fonksiyonu bu durumu kolaylaştırır. meyveler = ["elma", "muz", "çilek"] for indeks, meyve in enumerate(meyveler): print(f"{indeks}: {meyve}") softmush.com Çıktı: 0: elma 1: muz 2: çilek softmush.com Önemli Notlar Girintileme Önemlidir: Python'da kod blokları girintileme ile tanımlanır. for döngüsünün altına yazılan tüm kod satırlarının aynı girinti seviyesinde olması gerektiğini unutmayın. Yanlış girintileme IndentationError hatasına yol açacaktır. Yinelenebilir Nesneler: for döngüsü sadece yinelenebilir (iterable) nesneler üzerinde çalışır. Sayılar veya boolean değerler gibi yinelenebilir olmayan nesneleri doğrudan for döngüsünde kullanamazsınız. Döngü Kesme (break): Bir döngüyü belirli bir koşul sağlandığında tamamen sonlandırmak için break anahtar kelimesini kullanabilirsiniz. Döngü Atlatma (continue): Bir döngünün mevcut yinelemesini atlayıp bir sonraki yinelemeye geçmek için continue anahtar kelimesini kullanabilirsiniz. Performans: Büyük veri kümeleri üzerinde çalışırken, for döngüleri yerine list comprehension veya generator ifadelerini kullanmak performansı artırabilir. Ancak, temel kullanım için for döngüleri oldukça etkilidir.
avatar
Emin
9
0
SQL Makaleleri
sql-avg-fonksiyonu-ortalamalari-hesaplama-kilavuzu
SQL AVG Fonksiyonu: Ortalamaları Hesaplama Kılavuzu
SQL (Yapısal Sorgu Dili), veritabanlarından bilgi almak ve manipüle etmek için kullanılan standart bir dildir. Bu güçlü dilin temel bileşenlerinden biri olan AVG() fonksiyonu, belirli bir sayısal sütundaki değerlerin ortalamasını hesaplamak için kullanılır. Veri analizi ve raporlama süreçlerinde vazgeçilmez bir araç olan AVG(), büyük veri kümelerinden anlamlı istatistikler çıkarmayı sağlar. Bu makalede, AVG() fonksiyonunun sözdizimini, detaylı kullanımını ve pratik örneklerini inceleyeceğiz. Sözdizimi AVG() fonksiyonunun genel sözdizimi aşağıdaki gibidir: SELECT AVG(sütun_adı) FROM tablo_adı WHERE koşul;softmush.com Alternatif olarak, tüm benzersiz değerlerin ortalamasını almak için DISTINCT anahtar kelimesi ile birlikte kullanılabilir: SELECT AVG(DISTINCT sütun_adı) FROM tablo_adı WHERE koşul;softmush.com Detaylı Açıklama SELECT: Sorgunun anahtar kelimesidir ve veritabanından veri almak için kullanılır. AVG(): Ortalamayı hesaplamak için kullanılan SQL toplama (aggregate) fonksiyonudur. sütun_adı: Ortalaması alınacak sayısal sütunun adıdır. Bu sütun INTEGER, DECIMAL veya FLOAT gibi sayısal bir veri tipine sahip olmalıdır. FROM tablo_adı: Verilerin çekileceği tablonun adını belirtir. WHERE koşul: İsteğe bağlı bir yan tümcedir. Belirtilen koşulları karşılayan satırlar üzerinde ortalama hesaplaması yapılmasını sağlar. Bu olmadan, tüm tablodaki ilgili sütunun ortalaması hesaplanır. DISTINCT: İsteğe bağlı bir anahtar kelimedir. Eğer kullanılırsa, AVG() fonksiyonu yalnızca belirtilen sütundaki benzersiz değerlerin ortalamasını hesaplar. Tekrar eden değerler hesaplamaya dahil edilmez. Pratik Kullanım Örnekleri Aşağıdaki örneklerde, bir Urunler tablosunun olduğu varsayılmaktadır. Bu tabloda UrunID (INTEGER), UrunAdi (VARCHAR), Fiyat (DECIMAL) ve StokAdedi (INTEGER) gibi sütunlar bulunmaktadır. Örnek 1: Tüm Ürünlerin Ortalama Fiyatını Hesaplama Bu sorgu, Urunler tablosundaki tüm ürünlerin ortalama fiyatını döndürecektir. SELECT AVG(Fiyat) AS OrtalamaFiyat FROM Urunler;softmush.com Örnek 2: Belirli Bir Koşula Göre Ortalama Fiyatı Hesaplama Bu örnek, fiyatı 50 TL'den yüksek olan ürünlerin ortalama fiyatını bulur. SELECT AVG(Fiyat) AS YuksekFiyatliOrtalama FROM Urunler WHERE Fiyat > 50.00;softmush.com Örnek 3: Farklı Ürün Kategorilerine Göre Ortalama Fiyatı Hesaplama Eğer Urunler tablosunda bir Kategori sütunu olsaydı, her kategori için ortalama fiyatı aşağıdaki gibi hesaplayabilirdik. (Bu örnekte Urunler tablosuna Kategori sütununun eklendiği varsayılmıştır.) SELECT Kategori, AVG(Fiyat) AS KategoriOrtalamaFiyat FROM Urunler GROUP BY Kategori;softmush.com Örnek 4: Benzersiz Stok Adetlerinin Ortalamasını Hesaplama Bu sorgu, StokAdedi sütunundaki benzersiz değerlerin ortalamasını hesaplar. Eğer aynı stok adedine sahip birden fazla ürün varsa, bu değer yalnızca bir kez hesaba katılır. SELECT AVG(DISTINCT StokAdedi) AS BenzersizStokOrtalamasi FROM Urunler;softmush.com Önemli Notlar NULL Değerler: AVG() fonksiyonu, hesaplamalarına NULL değerleri dahil etmez. Yani, bir sütunda NULL değerler varsa, bunlar ortalama hesaplamasından otomatik olarak çıkarılır. Sayısal Olmayan Sütunlar: AVG() fonksiyonu yalnızca sayısal veri tipleriyle çalışır. Sayısal olmayan bir sütun üzerinde kullanılmaya çalışılırsa hata döndürebilir veya beklenmeyen sonuçlar üretebilir. GROUP BY ile Kullanım: AVG() genellikle GROUP BY yan tümcesiyle birlikte kullanılır. Bu, verileri belirli gruplara ayırarak her grup için ayrı ayrı ortalama hesaplamaları yapılmasına olanak tanır. DISTINCT Kullanımı: DISTINCT anahtar kelimesi, yalnızca benzersiz değerlerin ortalamasını almak istediğinizde faydalıdır. Ancak, bu kullanımı sorgu performansını etkileyebilir, bu nedenle dikkatli kullanılmalıdır. Sıfıra Bölme Hatası: Eğer ortalaması alınacak hiçbir satır yoksa (örneğin, WHERE koşulu hiçbir satırı eşleştirmiyorsa), AVG() fonksiyonu bazı veritabanı sistemlerinde NULL döndürebilirken, bazılarında sıfıra bölme hatasına benzer bir durumla karşılaşılabilir. Genellikle NULL döndürmesi beklenen davranıştır.
avatar
Emin
21
0
JavaScript Makaleleri
javascript-dilinde-js-events-kullanimi
JavaScript Dilinde JS Events Kullanımı
JavaScript, web sayfalarını etkileşimli hale getirmek için kullanıcı eylemlerine veya tarayıcı olaylarına tepki verme yeteneği sağlar. Bu tepkiler, 'olaylar' (events) aracılığıyla yönetilir. Bir kullanıcı bir düğmeye tıkladığında, bir form gönderdiğinde veya fare imlecini bir öğenin üzerine getirdiğinde, JavaScript bu olayları dinleyebilir ve tanımlanan işlevleri çalıştırabilir. Bu makale, JavaScript olaylarının temel kullanımını, sözdizimini ve pratik uygulamalarını detaylandıracaktır. Sözdizimi JavaScript'te bir DOM öğesine olay dinleyicisi eklemenin en yaygın ve önerilen yolu EventTarget.addEventListener() metodunu kullanmaktır. Bu metod, belirli bir olay türü gerçekleştiğinde çalıştırılacak bir işlevi (handler) kaydeder. target.addEventListener(event, listener, [options]); softmush.com Detaylı Açıklama EventTarget.addEventListener() metodu üç ana argüman alır: target: Olay dinleyicisinin ekleneceği DOM öğesidir. Örneğin, bir düğme, bir metin alanı veya belge kendisi olabilir. event: Dinlenecek olayın adını belirten bir stringdir. Örnekler arasında 'click', 'mouseover', 'keydown', 'submit' bulunur. Olay adları büyük/küçük harfe duyarlıdır ve genellikle küçük harfle yazılır. listener: Belirtilen olay gerçekleştiğinde çağrılacak olan işlevdir (callback fonksiyonu). Bu işlev, olayın kendisi hakkında bilgi içeren bir Event nesnesini argüman olarak alabilir. options (isteğe bağlı): Olay dinleyicisinin davranışını yapılandıran bir nesnedir. En yaygın seçenekler şunlardır: capture: Bir boolean değeridir. true ise, olay yakalama (capturing) aşamasında, false ise olay kabarcıklanma (bubbling) aşamasında tetiklenir. Varsayılan değer false'tur. once: Bir boolean değeridir. true ise, olay dinleyicisi olay bir kez tetiklendikten sonra otomatik olarak kaldırılır. Varsayılan değer false'tur. passive: Bir boolean değeridir. true ise, dinleyicinin event.preventDefault() çağrısı yapmayacağını belirtir. Bu, özellikle kaydırma (scrolling) olaylarında performansı artırabilir. Varsayılan değer false'tur. Pratik Kullanım Örnekleri Aşağıdaki örnekler, JavaScript olaylarının çeşitli kullanım senaryolarını göstermektedir. Örnek 1: Düğme Tıklama Olayı Bir HTML düğmesine tıklandığında konsola bir mesaj yazdıran basit bir örnek. Bana Tıkla const button = document.getElementById('myButton'); function handleClick() { console.log('Düğmeye tıklandı!'); } button.addEventListener('click', handleClick); softmush.com Örnek 2: Giriş Alanı Değişikliği Bir metin giriş alanındaki değer her değiştiğinde bu değişikliği yakalayan bir örnek. Girilen Değer: const input = document.getElementById('myInput'); const output = document.getElementById('output'); function handleInput(event) { output.textContent = event.target.value; } input.addEventListener('input', handleInput); softmush.com Örnek 3: Fare Üzerine Gelme ve Ayrılma Bir öğenin üzerine fare imleci geldiğinde ve ayrıldığında farklı işlevleri çalıştıran bir örnek. Fareyi Üzerime Getir const myDiv = document.getElementById('myDiv'); function handleMouseOver() { myDiv.style.backgroundColor = 'lightgreen'; myDiv.textContent = 'Hoş Geldin!'; } function handleMouseOut() { myDiv.style.backgroundColor = 'lightblue'; myDiv.textContent = 'Fareyi Üzerime Getir'; } myDiv.addEventListener('mouseover', handleMouseOver); myDiv.addEventListener('mouseout', handleMouseOut); softmush.com Önemli Notlar Dinleyiciyi Kaldırma: Performans ve bellek sızıntılarını önlemek için, özellikle tek seferlik olaylarda veya bileşenler kaldırıldığında EventTarget.removeEventListener() metodunu kullanarak olay dinleyicilerini kaldırmak önemlidir. addEventListener ile aynı argümanlar kullanılmalıdır (aynı fonksiyon referansı dahil). Olay Nesnesi: Olay dinleyici fonksiyonuna otomatik olarak geçirilen Event nesnesi, olayın türü (event.type), hedefi (event.target), tuş bilgisi (event.key, event.keyCode) gibi değerli bilgiler içerir. event.preventDefault(): Bazı olayların varsayılan tarayıcı davranışları vardır (örneğin, bir bağlantıya tıklamak sizi başka bir sayfaya götürür veya bir form göndermek sayfayı yeniler). Bu varsayılan davranışları durdurmak için olay nesnesi üzerindeki event.preventDefault() metodunu kullanabilirsiniz. Olay Kabarcıklanması ve Yakalama: Olaylar, DOM ağacında yukarı (kabarcıklanma) veya aşağı (yakalama) doğru yayılır. addEventListener metodunun üçüncü argümanı (veya options nesnesindeki capture özelliği) bu davranışı kontrol etmenizi sağlar. Çoğu durumda, varsayılan kabarcıklanma davranışı yeterlidir. this Anahtar Kelimesi: Bir olay dinleyicisi içinde this anahtar kelimesi, olayın gerçekleştiği DOM öğesini (event.currentTarget) ifade eder. Ancak, arrow fonksiyonlar kullanıldığında this, tanımlandığı kapsayıcı kapsamı korur.
avatar
Emin
9
0
PHP Makaleleri
php-dilinde-ontanimli-istisnalar-etkili-hata-yonetimi
PHP Dilinde Öntanımlı İstisnalar: Etkili Hata Yönetimi
Modern yazılım geliştirmede, beklenmedik durumları ve hataları etkili bir şekilde yönetmek, uygulamanın sağlamlığı ve sürdürülebilirliği için kritik öneme sahiptir. PHP, bu tür durumları ele almak için güçlü bir istisna yönetimi mekanizması sunar. Bu mekanizma, programın normal akışını bozmadan, hata koşullarının yakalanmasını ve uygun şekilde işlenmesini sağlar. PHP'deki öntanımlı istisnalar, çeşitli hata senaryoları için standartlaştırılmış çözümler sunarak geliştiricilerin daha temiz, okunaklı ve bakımı kolay kod yazmasına yardımcı olur. Temel Sözdizimi PHP'de istisnaları kullanmanın temel yapısı, bir kod bloğunu hata açısından izlemek için try, yakalanan istisnayı işlemek için catch ve isteğe bağlı olarak, try ve catch bloklarının yürütülmesinden sonra her zaman çalıştırılacak kodu tanımlamak için finally anahtar kelimelerinden oluşur. softmush.com Detaylı Açıklama İstisna yönetiminin temel bileşenleri ve öntanımlı istisna sınıfları şunlardır: try Bloğu: İstisna fırlatma potansiyeli olan kod, bu bloğun içine yerleştirilir. Eğer bu blok içinde bir istisna fırlatılırsa, normal akış kesilir ve kontrol uygun catch bloğuna geçer. catch Bloğu: Bir try bloğu içinde fırlatılan bir istisnayı yakalamak için kullanılır. catch anahtar kelimesi, parantez içinde yakalanacak istisna türünü (sınıfını) ve bu istisnayı temsil edecek bir değişkeni (genellikle $e) alır. PHP, istisna hiyerarşisinde fırlatılan istisnayla eşleşen ilk catch bloğunu çalıştırır. Genel Exception sınıfı en genel istisna türüdür ve tüm istisnaları yakalar. Daha spesifik istisnalar için, bu sınıfın alt sınıfları kullanılmalıdır. finally Bloğu (PHP 5.5+): Bu blok içindeki kod, try ve catch bloklarının yürütülmesinden sonra her zaman çalışır, bir istisna fırlatılsa da fırlatılmasa da. Kaynakları serbest bırakmak veya temizlik işlemleri yapmak için idealdir. throw Anahtar Kelimesi: Manuel olarak bir istisna fırlatmak için kullanılır. Bir istisna fırlatıldığında, programın normal akışı durur ve kontrol, fırlatılan istisnayı yakalamaya uygun bir catch bloğu arar. Exception Sınıfı: PHP'deki tüm istisna sınıflarının temelidir. Kendi özel istisna sınıflarınızı oluştururken bu sınıftan türetebilirsiniz. Exception sınıfı; hata mesajı, hata kodu, dosya adı ve satır numarası gibi önemli bilgilere erişim sağlayan metotlara sahiptir. Öntanımlı İstisna Sınıfları: PHP, çeşitli senaryolar için bir dizi öntanımlı istisna sınıfı sunar. Bunlar, Exception sınıfının alt sınıflarıdır ve belirli hata koşullarını daha spesifik olarak ele almanızı sağlar. Örnekler arasında şunlar bulunur: InvalidArgumentException: Bir fonksiyona veya metoda geçersiz bir argüman iletildiğinde fırlatılır. LengthException: Bir değerin uzunluğu uygun olmadığında fırlatılır (örn. bir string'in veya dizinin). OutOfRangeException: İstenen değerin geçerli bir aralık dışında olduğunu belirtir. RuntimeException: Çalışma zamanında ortaya çıkan hatalar için genel bir istisnadır. Diğer, daha spesifik RuntimeException alt sınıfları da mevcuttur (örn. BadFunctionCallException, BadMethodCallException). TypeError: Bir fonksiyona veya metoda yanlış türde bir argüman iletildiğinde fırlatılır (PHP 7+). Pratik Kullanım Örnekleri Aşağıdaki örnekler, öntanımlı istisnaların PHP uygulamalarında nasıl kullanılabileceğini göstermektedir. Örnek 1: Temel try-catch kullanımı softmush.com Bu örnekte, bol fonksiyonu sıfıra bölme durumunda bir InvalidArgumentException fırlatır. try bloğu bu fonksiyonu çağırır ve istisna oluştuğunda kontrol catch bloğuna geçer. finally bloğu ise istisna fırlatılsa da fırlatılmasa da çalışır. Örnek 2: Birden Fazla catch Bloğu ile Spesifik İstisnaları Yakalama softmush.com Bu örnek, farklı istisna türlerini yakalamak için birden fazla catch bloğunun nasıl kullanılacağını gösterir. PHP, istisna hiyerarşisinde en spesifik olandan en genele doğru sıralama yapılmasını önerir. Bu şekilde, önce InvalidArgumentException ve OutOfRangeException gibi özel durumlar yakalanır, ardından Exception ile diğer tüm istisnalar ele alınır. Önemli Notlar ve İpuçları Spesifik İstisnaları Yakalayın: Mümkün olduğunca spesifik istisna sınıflarını yakalayın (örn. InvalidArgumentException yerine Exception kullanmak yerine). Bu, hata koşullarını daha doğru bir şekilde tanımlamanıza ve işlemenize olanak tanır. İstisna Hiyerarşisi: Birden fazla catch bloğu kullanırken, en spesifik istisnaları önce, en genel istisnayı (Exception) ise en sona yerleştirin. Aksi takdirde, genel istisna bloğu tüm istisnaları yakalayabilir ve daha spesifik bloklara asla ulaşılamaz. finally Bloğunu Kullanın: Kaynakları serbest bırakmak (örn. dosya tanıtıcıları, veritabanı bağlantıları) veya temizlik işlemleri yapmak için finally bloğunu kullanın. Bu, kodun hem başarıyla tamamlandığı hem de bir istisna fırlatıldığı durumlarda tutarlılık sağlar. Kendi İstisna Sınıflarınızı Oluşturun: PHP'nin öntanımlı istisnaları çoğu durumu kapsasa da, uygulamanıza özgü hata durumları için Exception sınıfından türeyen kendi istisna sınıflarınızı oluşturmanız, kodunuzu daha anlamlı ve yönetilebilir hale getirebilir. Hata Mesajlarını Açık Tutun: İstisnaları fırlatırken, sorunun ne olduğunu ve nasıl düzeltilebileceğini açıklayan net ve bilgilendirici hata mesajları sağlayın. Bu, hata ayıklama sürecini büyük ölçüde hızlandırır. İstisnaları Yutmaktan Kaçının: Bir istisnayı yakalayıp hiçbir şey yapmamak (boş bir catch bloğu) yaygın bir hatadır. Bu, hataların göz ardı edilmesine ve uygulamanızda gizli sorunlara yol açabilir. Her zaman yakaladığınız bir istisnayı işleyin (örn. loglayın, kullanıcıya bildirin veya yeniden fırlatın).
avatar
Emin
9
0
Python Makaleleri
python-dilinde-while-donguleri-kullanimi
Python Dilinde While Döngüleri Kullanımı
Python programlama dilinde while döngüsü, belirli bir koşul doğru olduğu sürece bir kod bloğunu tekrar tekrar yürütmek için kullanılır. Bu döngü yapısı, bir işlemin ne zaman duracağının belirli bir sayı yerine bir koşula bağlı olduğu senaryolarda oldukça etkilidir. Kullanıcı girdisi beklenmesi, bir veri yapısındaki öğelerin işlenmesi veya bir oyun döngüsünün sürdürülmesi gibi durumlarda program akışını kontrol etmek için vazgeçilmez bir araçtır. Temel Sözdizimi Bir while döngüsünün genel yapısı aşağıdaki gibidir: while koşul: # Koşul doğru olduğu sürece yürütülecek kod bloğu # Döngü değişkenini güncelleyen ifadeler else: # Koşul yanlış olduğunda (ve break kullanılmadığında) yürütülecek kod bloğu softmush.com Bu yapıda: while: Döngüyü başlatan anahtar kelimedir. koşul: Her iterasyonun başında değerlendirilen bir boolean ifadedir. Bu koşul True olduğu sürece döngü devam eder. : (İki nokta üst üste): Koşul ifadesinden sonra gelir ve döngü bloğunun başladığını belirtir. Girintili Kod Bloğu: Koşul doğru olduğunda yürütülecek olan bir veya daha fazla satırdan oluşur. Python'da girinti (indentation) kod bloklarını tanımlamak için kullanılır. else (İsteğe Bağlı): while döngüsüyle birlikte kullanılabilen isteğe bağlı bir bloktur. Döngü koşulu False olduğunda ve döngü break ifadesiyle sonlandırılmadığında yürütülür. Pratik Kullanım Örnekleri Aşağıdaki örnekler, while döngüsünün çeşitli kullanım senaryolarını göstermektedir. Örnek 1: Basit Bir Sayıcı Döngüsü Bu örnekte, bir değişkenin değeri belirli bir sayıya ulaşana kadar döngüyü sürdürüyoruz. sayac = 0 while sayac < 5: print(f"Sayı: {sayac}") sayac += 1 # Sayacı her döngüde bir artırıyoruz print("Döngü tamamlandı.") softmush.com Açıklama: sayac değişkeni 0'dan başlar ve her iterasyonda 1 artırılır. sayac < 5 koşulu False olana kadar döngü devam eder. Koşul False olduğunda döngüden çıkılır ve "Döngü tamamlandı." mesajı yazdırılır. Örnek 2: break İfadesiyle Döngüyü Sonlandırma break ifadesi, döngü koşulu hala True olsa bile döngüden hemen çıkmak için kullanılır. i = 1 while True: # Sonsuz döngü başlatıyoruz print(f"i'nin değeri: {i}") if i == 3: print("3'e ulaşıldı, döngüden çıkılıyor.") break # Döngüyü sonlandır i += 1 print("Döngü dışı.") softmush.com Açıklama: while True ile teorik olarak sonsuz bir döngü başlatılır. Ancak, i değişkeni 3 olduğunda break ifadesi çalışır ve döngü anında sonlanır. Bu, belirli bir iç koşul karşılandığında döngüden çıkmak için kullanışlıdır. Örnek 3: continue İfadesiyle İterasyonu Atlatma continue ifadesi, mevcut iterasyonun geri kalanını atlayarak döngünün bir sonraki iterasyonuna geçmek için kullanılır. j = 0 while j < 5: j += 1 if j == 3: print(f"{j} atlanıyor...") continue # Bu iterasyonun geri kalanını atla print(f"j'nin değeri: {j}") print("Döngü tamamlandı.") softmush.com Açıklama: j 3 olduğunda, "3 atlanıyor..." mesajı yazdırılır ve continue ifadesi çalışarak print(f"j'nin değeri: {j}") satırını atlar. Döngü bir sonraki iterasyondan devam eder. Örnek 4: else Bloğu Kullanımı else bloğu, döngü koşulu False olduğunda ve döngü break ile sonlandırılmadığında yürütülür. k = 0 while k < 3: print(f"k'nin değeri: {k}") k += 1 else: print("While döngüsü doğal yollarla tamamlandı.") softmush.com Açıklama: Bu örnekte döngü k 3 olana kadar devam eder. Koşul False olduğunda else bloğu yürütülür. Eğer break ifadesi ile döngüden çıkılsaydı, else bloğu çalışmazdı. Önemli Notlar ve İpuçları Sonsuz Döngülerden Kaçının: while döngüsünde koşulun her zaman True kalması veya hiçbir zaman False olmaması durumunda sonsuz bir döngü oluşur. Bu, programınızın kilitlenmesine neden olabilir. Koşulu etkileyecek bir ifadeyi (örneğin, bir sayacı artıran veya bir kullanıcı girdisi alan) döngü içinde bulundurduğunuzdan emin olun. Koşulu Güncelleyin: Döngü koşulunun sonunda False değerini almasını sağlayacak bir mekanizma mutlaka olmalıdır. Aksi takdirde sonsuz döngü oluşur. break ve continue Dikkatli Kullanın: Bu ifadeler güçlüdür ve döngü akışını değiştirirler. Kodun okunabilirliğini azaltmamak için gerektiğinde ve anlaşılır bir şekilde kullanılmalıdır. else Bloğunun Davranışı: else bloğu, yalnızca while döngüsü koşulunun False olmasıyla doğal bir şekilde sona erdiğinde yürütülür. Eğer döngü bir break ifadesiyle kesilirse, else bloğu yürütülmez. for vs. while: Belirli bir öğe dizisi üzerinde (örneğin bir liste veya dize) yineleme yapmanız gerektiğinde genellikle for döngüsü daha uygundur. while döngüsü ise, döngünün kaç kez çalışacağını önceden bilmediğiniz, belirli bir koşulun karşılanmasını beklediğiniz durumlarda tercih edilir.
avatar
Emin
11
0
Bilim Makaleleri
orionid-meteor-yagmuru-halley-kuyruklu-yildizinin-buyuleyici-mirasi-ve-gozlem-rehberi
Orionid Meteor Yağmuru: Halley Kuyruklu Yıldızı’nın Büyüleyici Mirası ve Gözlem Rehberi
Merhaba gökyüzü tutkunları! Sonbaharın serin gecelerinde bizi bekleyen muhteşem bir görsel şölen var: Orionid Meteor Yağmuru! Bu, sadece bir göktaşı yağmurundan çok daha fazlası; tarihin en ünlü kuyruklu yıldızlarından Halley'nin bize bıraktığı büyüleyici bir miras. Hazırsanız, bu eşsiz olayı ne zaman ve nasıl izleyeceğinize dair tüm detaylara dalalım ve evrenin sunduğu bu harika hediyeyi kaçırmamanız için ipuçlarımı sizinle paylaşayım. Orionid Meteor Yağmuru Nedir? Peki, Orionidler tam olarak nedir? Göktaşı yağmurları, Dünya'nın uzayda seyreden bir kuyruklu yıldızın veya asteroidin yörüngesinde bıraktığı toz ve kaya parçacıkları bulutundan geçtiğinde meydana gelir. Bu minik parçacıklar, gezegenimizin atmosferine saniyede yaklaşık 66 kilometre gibi inanılmaz bir hızla girer. Atmosferdeki hava molekülleriyle sürtünme sonucu yanarak parlamaya başlarlar ve biz de onlara "kayan yıldız" veya "meteor" deriz. Orionidler, adını gökyüzünde ışınsal olarak yayılıyor gibi göründükleri Orion Takımyıldızı'ndan alır. Bu takımyıldız, meteorların çıkış noktası gibi görünse de, aslında tüm gökyüzünde görülebilirler. Halley Kuyruklu Yıldızı'nın Mirası Orionidlerin özel olmasının en büyük nedeni, onların kaynağının Halley Kuyruklu Yıldızı olmasıdır. Bu ünlü kuyruklu yıldız, her 75-76 yılda bir Dünya'nın yakınından geçer ve yörüngesinde geride milyonlarca küçük parçacık bırakır. Dünya, bu parçacıkların içinden her yıl Ekim ayında geçtiğinde, Halley'nin mirası olan Orionidleri gökyüzünde izleme şansı buluruz. Bu, aslında çok eski bir gök olayıdır ve binlerce yıldır insanları büyülemeye devam etmektedir. Halley'nin bıraktığı bu izler, bize tarihin derinliklerinden gelen bir mesaj niteliğindedir. Orionid Meteor Yağmuru Ne Zaman Gerçekleşecek? En önemli soru: Ne zaman? Orionid meteor yağmuru genellikle 2 Ekim ile 7 Kasım tarihleri arasında aktif olur. Ancak, asıl görsel şölen, yani en yoğun dönemi, 20-21 Ekim gecesi civarında gerçekleşir. Bu gecelerde, hava koşulları uygun olduğunda ve ışık kirliliğinden uzak bir noktadaysanız, saatte 10 ila 20 kadar meteor görme şansınız olabilir. Hatta bazı yıllar bu sayı daha da artabilir! Bu tarihleri takvimlerinize işaretlemeyi unutmayın. Bu yıl, yani 2024'te, Orionidlerin zirvesi yine 20-21 Ekim gecesine denk geliyor. Genellikle gece yarısından sonra, sabaha karşı 02:00 ile şafak sökene kadar olan saatler, meteor izlemek için en ideal zaman dilimidir. Bu saatlerde, Dünya'nın dönüşü sayesinde meteor parçacıklarıyla daha doğrudan bir çarpışma yaşarız ve bu da görünen meteor sayısını artırır. Ay'ın durumu da gözlem kalitesini doğrudan etkiler ve bu yılki gözlemler için Ay'ın durumu oldukça önemli bir faktör olacak. Ay'ın Etkisi ve Gözlem İpuçları Peki, Ay'ın durumu nasıl olacak? 2024'te Orionidlerin zirve yaptığı 20-21 Ekim gecesi, Ay'ın evresi son dördün evresine yakın olacak. Bu, Ay'ın gökyüzünde oldukça parlak olacağı ve dolayısıyla daha sönük meteorları görmemizi zorlaştıracağı anlamına geliyor. Ancak umutsuzluğa kapılmayın! Ay battıktan sonraki saatler veya Ay'ın parlaklığının en az olduğu anlar, yine de gözlem için harika fırsatlar sunabilir. Ay ışığından en az etkilenecek bir gözlem noktası seçmek veya Ay'ı görüş alanınızın dışında tutacak bir yere bakmak, bu durumu avantaja çevirmenize yardımcı olacaktır. Unutmayın, en parlak meteorlar Ay ışığında bile görülebilir! Orionid Meteor Yağmuru Nasıl İzlenir? Şimdi gelelim bu muhteşem şöleni nasıl en iyi şekilde izleyeceğinize. Özel bir ekipmana ihtiyacınız yok, sadece sabır ve doğru bir hazırlık yeterli: Karanlık Bir Yer Bulun: Şehir ışıklarından uzakta, mümkün olduğunca karanlık bir yer seçmek en önemlisidir. Büyük şehirlerin ışık kirliliği, sönük meteorları görmenizi engelleyecektir. Parklar, kırsal alanlar, dağ evleri veya yüksek tepeler ideal olabilir. Işık kirliliği ne kadar az olursa, o kadar çok meteor görme şansınız artar. Ay'ın Durumunu Kontrol Edin: Gözlem yapacağınız gecenin Ay takvimini kontrol edin. Eğer Ay parlaksa, Ay batana kadar beklemek veya Ay'ın doğrudan görüş açınızda olmadığı, gökyüzünün daha karanlık bir kısmına bakmak faydalı olabilir. Gözlerinizi Karanlığa Alıştırın: Gözlerinizin karanlığa alışması yaklaşık 20-30 dakika sürer ve bu süre zarfında ışığa maruz kalmaktan kaçınmak çok önemlidir. Bu süre zarfında telefonunuza veya diğer ışık kaynaklarına bakmaktan kaçının. Eğer bir ışığa ihtiyacınız olursa, kırmızı ışıklı bir fener kullanın; kırmızı ışık, gözlerinizin karanlığa adaptasyonunu bozmaz. Rahat Edin: Gözlem yaparken yere uzanmak veya rahat bir kamp sandalyesine oturmak, boynunuzu ağrıtmadan gökyüzünü daha uzun süre izlemenizi sağlar. Battaniye, uyku tulumu gibi sıcak tutacak şeyleri yanınıza almayı unutmayın, zira sonbahar geceleri oldukça serin olabilir ve üşümek gözlem keyfinizi kaçırabilir. Sabırlı Olun: Meteorlar düzenli aralıklarla gelmez. Bazen birkaç dakika boyunca hiçbir şey göremeyebilirsiniz, sonra aniden birkaç tane arka arkaya geçebilir. Bu yüzden sabırlı olmak ve gökyüzünü sürekli taramak önemlidir. Unutmayın, her bir meteor, Halley'nin bize gönderdiği özel bir selamdır. Gökyüzünde Nereye Bakmalı? Orionidlerin "ışıma noktası" (radyantı) Orion Takımyıldızı'nda olsa da, meteorları gökyüzünün herhangi bir yerinde görebilirsiniz. Aslında, radyanttan uzaklaşan meteorlar, Dünya atmosferine daha eğik bir açıyla girdikleri için daha uzun ve etkileyici izler bırakır. Bu yüzden tüm gökyüzünü kapsayacak şekilde geniş bir görüş açısına sahip olmaya çalışın. Başınızı gökyüzünün en karanlık ve bulutsuz kısmına çevirin ve sadece bekleyin. Gözleriniz sürekli hareket halinde olsun ve gökyüzünü yavaşça tarayın. Neler Beklemelisiniz? Orionidler, saatte yaklaşık 10 ila 20 meteor görme potansiyeli sunar (Zenithal Hourly Rate - ZHR). ZHR, ideal koşullarda, yani tamamen karanlık bir gökyüzünde, radyantın tam tepede olduğu ve görüş alanını hiçbir şeyin engellemediği varsayılarak hesaplanan teorik bir sayıdır. Gerçekte, şehir ışıklarından veya Ay ışığından etkilenen bir yerdeyseniz bu sayı daha düşük olabilir. Ancak göreceğiniz her bir meteor, Halley'nin mirasının bir parçası olduğu için paha biçilmezdir ve size evrenin büyüklüğünü hatırlatacaktır. Orionidler, çok hızlı meteorlar olmalarıyla bilinirler; yaklaşık 66 km/s hızla Dünya atmosferine girerler. Bu inanılmaz hız, onların genellikle parlak ve hızlı izler bırakmalarına neden olur. Bazen atmosferde daha büyük parçacıkların yanmasıyla oluşan parlak fireball'lar (ateş topları) bile görebilirsiniz. Bu ateş topları, gökyüzünde birkaç saniye boyunca parlayarak gözlemcileri büyüleyebilir ve ardında uzun, dumanlı bir iz bırakabilir. Onları gördüğünüz an, gerçekten unutulmaz bir deneyim yaşayacaksın! Halley Kuyruklu Yıldızı: Tarihi Bir Bağlantı Halley Kuyruklu Yıldızı, insanlık tarihinde en çok bilinen ve gözlemlenen kuyruklu yıldızlardan biridir. Antik çağlardan beri pek çok kültür tarafından gözlemlenmiş ve kaydedilmiştir. Düzenli aralıklarla geri dönüşü, astronom Edmund Halley'ye yörüngesini hesaplama ve geri dönüşünü tahmin etme imkanı sunmuş, bu da onu bilimsel tahminlerin ilk büyük başarılarından biri haline getirmiştir. Kuyruklu yıldızın kendisini bir sonraki görüşümüz 2061 yılı civarında olacak. Ancak her yıl Ekim ayında Orionid meteor yağmuru sayesinde, onun uzayda bıraktığı izleri takip ederek bu tarihi gök cismine bir selam gönderebiliyoruz. Bu, aslında geçmişle bugünü, insanlık tarihiyle kozmik zamanı birleştiren eşsiz bir kozmik bağdır. Astrophotografi Meraklılarına İpuçları Eğer bu anı ölümsüzleştirmek istersen, birkaç ipucu senin için: Geniş Açılı Lens: Gökyüzünün geniş bir bölümünü yakalamak ve daha fazla meteor yakalama şansını artırmak için geniş açılı (14-24mm) bir lens kullanın. Tripod: Uzun pozlama çekimleri için fotoğraf makinenizin sabit kalması şarttır. Sağlam bir tripod olmazsa olmazdır. Manuel Ayarlar: Yüksek ISO (1600-6400 arası, kameranızın gürültü performansına göre), düşük f-stop değeri (f/2.8 veya daha düşük) ve 15-30 saniye arası pozlama süresi deneyin. Yüksek ISO, kameranızın ışığa daha duyarlı olmasını sağlarken, düşük f-stop daha fazla ışık girmesine olanak tanır. Uzun pozlama ise meteorların izlerini yakalamak için gereklidir. Odaklama: Lensi manuel moda alıp sonsuzluğa odaklayın. Karanlıkta bunu yapmak zor olabilir, bu yüzden önceden pratik yapın veya uzak bir ışık kaynağına odaklayarak ayarlarınızı yapın. Güvenlik ve Konfor Önlemleri Gece gözlemi yaparken güvenliğiniz ve konforunuz çok önemlidir. Unutmayın, keyifli bir deneyim için iyi hazırlanmak şart: Sıcak Giyinin: Sonbahar geceleri aldatıcı olabilir. Kat kat giyinmek, termal içlikler, kalın çoraplar, şapka, eldiven ve su geçirmez bir dış katman, soğuktan korunmanızı sağlar. Yanınıza İçercek ve Yiyecek Alın: Termos içinde sıcak çay veya kahve gibi içecekler ve atıştırmalıklar, uzun gözlem seanslarında enerjinizi yüksek tutar ve içten ısınmanıza yardımcı olur. Güvenli Bir Yer Seçin: Mümkünse yalnız gitmek yerine arkadaşlarla gitmek veya bildiğiniz, güvenli, erişimi kolay bir alanı tercih etmek her zaman daha iyidir. Yeni bir yere gidiyorsanız, gündüz keşfetmekte fayda var. Çevreye Duyarlı Olun: Gözlem yaparken doğaya zarar vermemeye özen gösterin, çöplerinizi yanınızda götürün ve ses kirliliği yaratmaktan kaçının. Neden Bu Kadar Özel? Orionidler, sadece gökyüzündeki anlık ışık izleri değildir; onlar aynı zamanda bilim, tarih ve insanlığın evrenle olan derin bağının bir yansımasıdır. Halley'nin bize bıraktığı bu minik parçacıklar, her yıl bizi evrenin derinliklerine, kozmik bir dansa davet eder. Bu, şehir hayatının gürültüsünden ve karmaşasından uzaklaşıp, evrenin sonsuzluğunu ve kendi küçüklüğümüzü hissetmek için harika bir fırsattır. Bir an durup, milyarlarca yıl önceki bir kuyruklu yıldızın kalıntılarını izlemek, gerçekten büyüleyici ve düşündürücü bir deneyimdir. Gezegenimizin bu kozmik toz bulutundan geçerken yaşadığımız bu anlık karşılaşmalar, bize evrenin dinamik ve sürekli değişen doğasını hatırlatır. Unutmayın, en iyi gözlem için ihtiyacınız olan tek şey karanlık bir gökyüzü, sabır ve biraz şans. Hava durumu tahminlerini takip edin, en uygun geceyi seçin ve bu muhteşem gökyüzü şöleninin tadını çıkarın. Belki de bir dilek tutmak için mükemmel bir an yakalarsınız! Gökyüzünüz açık, geceniz yıldızlarla dolsun!
avatar
Emin
11
0
SQL Makaleleri
sql-dilinde-sum-fonksiyonu-detayli-kullanim-kilavuzu
SQL Dilinde SUM Fonksiyonu: Detaylı Kullanım Kılavuzu
SQL (Yapısal Sorgulama Dili), veritabanlarından bilgi almayı ve manipüle etmeyi sağlayan güçlü bir dildir. Bu dilin temel bileşenlerinden biri olan SUM() fonksiyonu, sayısal bir sütundaki değerlerin toplamını hesaplamak için kullanılan bir toplama (aggregate) fonksiyonudur. Raporlama, finansal analiz veya genel veri özetleri oluştururken, belirli bir kriteri karşılayan tüm kayıtların toplam değerini bulmak hayati öneme sahiptir. Bu kılavuz, SUM() fonksiyonunun sözdiziminden başlayarak, çeşitli kullanım senaryolarını örneklerle açıklayacak ve bu güçlü fonksiyonu verimli bir şekilde kullanmanıza yardımcı olacak pratik bilgiler sunacaktır. SQL SUM Fonksiyonunun Sözdizimi SUM() fonksiyonunun temel sözdizimi aşağıdaki gibidir: SELECT SUM(sutun_adi) FROM tablo_adi WHERE kosul;softmush.com İsteğe bağlı olarak, yalnızca benzersiz değerlerin toplamını almak için DISTINCT anahtar kelimesi kullanılabilir: SELECT SUM(DISTINCT sutun_adi) FROM tablo_adi WHERE kosul;softmush.com Detaylı Açıklama SUM() fonksiyonu, belirtilen bir sayısal ifadenin veya sütunun değerlerini toplar. Fonksiyonun bileşenleri şunlardır: SUM(): Bu, toplama işlemini gerçekleştiren ana fonksiyondur. sutun_adi veya expression: Toplanacak değerleri içeren sayısal bir sütun adını veya sayısal bir değer döndüren herhangi bir ifadeyi (örneğin, Miktar * BirimFiyat) temsil eder. Bu ifade, INT, DECIMAL, FLOAT gibi sayısal veri tiplerine sahip olmalıdır. DISTINCT (isteğe bağlı): Eğer bu anahtar kelime kullanılırsa, SUM() fonksiyonu yalnızca belirtilen sütundaki veya ifadedeki benzersiz değerlerin toplamını hesaplar. Yinelenen değerler toplama dahil edilmez. Genellikle bu anahtar kelimeye ihtiyaç duyulmaz ve kullanımı performansı etkileyebilir. FROM tablo_adi: Sorgunun hangi tablodan veri alacağını belirtir. WHERE kosul (isteğe bağlı): Toplama işlemine dahil edilecek satırları filtrelemek için kullanılır. Yalnızca belirtilen koşulu sağlayan satırlar toplanır. SUM() fonksiyonu, varsayılan olarak NULL değerleri toplama işlemine dahil etmez. Yani, bir sütunda NULL değeri varsa, bu değer göz ardı edilir ve toplam etkilenmez. Pratik Kullanım Örnekleri Aşağıdaki örneklerde, bir satış tablosu olan Satislar'ı kullanacağız. Bu tablo, SatisID, UrunID, Miktar, BirimFiyat, SatisTarihi ve MusteriID sütunlarını içermektedir. Örnek 1: Tüm Satışların Toplam Miktarını Bulma Tüm satış kayıtlarındaki ürünlerin toplam miktarını bulmak için basit bir SUM() kullanımı: SELECT SUM(Miktar) AS ToplamMiktar FROM Satislar;softmush.com Açıklama: Bu sorgu, Satislar tablosundaki tüm Miktar değerlerini toplar ve sonucu ToplamMiktar adıyla döndürür. Örnek 2: Ürün Başına Toplam Satış Hacmini Hesaplama GROUP BY ifadesiyle birlikte SUM() kullanarak her bir ürün için ayrı ayrı toplam satış miktarını hesaplayabiliriz: SELECT UrunID, SUM(Miktar) AS UrunToplamMiktar FROM Satislar GROUP BY UrunID;softmush.com Açıklama: Sorgu, UrunID'ye göre gruplandırma yapar ve her bir UrunID için ilgili satış miktarlarının toplamını hesaplar. Örnek 3: Belirli Bir Tarihten Sonraki Toplam Geliri Hesaplama WHERE koşulu ile belirli bir tarihten sonraki satışların toplam gelirini (miktar * birim fiyat) hesaplayabiliriz: SELECT SUM(Miktar * BirimFiyat) AS ToplamGelir FROM Satislar WHERE SatisTarihi > '2023-01-16';softmush.com Açıklama: Bu sorgu, 16 Ocak 2023 tarihinden sonra gerçekleşen satışların her biri için Miktar ile BirimFiyat'ı çarparak geliri bulur ve bu gelirlerin toplamını ToplamGelir olarak döndürür. Örnek 4: Farklı Miktar Değerlerinin Toplamını Bulma Eğer sadece benzersiz satış miktarlarının toplamını almak istiyorsanız, DISTINCT anahtar kelimesini kullanabilirsiniz: SELECT SUM(DISTINCT Miktar) AS FarkliMiktarToplami FROM Satislar;softmush.com Açıklama: Bu sorgu, Satislar tablosundaki Miktar sütununda tekrar eden değerleri bir kez sayarak, yalnızca farklı Miktar değerlerinin toplamını hesaplar. Örnek 5: Toplam Geliri Hesaplama ve Filtreleme (HAVING ile) GROUP BY ile birlikte HAVING kullanarak, belirli bir eşiğin üzerindeki toplam gelire sahip ürünleri filtreleyebiliriz: SELECT UrunID, SUM(Miktar * BirimFiyat) AS UrunToplamGelir FROM Satislar GROUP BY UrunID HAVING SUM(Miktar * BirimFiyat) > 200;softmush.com Açıklama: Bu örnek, her bir UrunID için toplam geliri hesaplar ve yalnızca toplam geliri 200'den fazla olan ürünleri listeler. Önemli Notlar ve İpuçları NULL Değerler: SUM() fonksiyonu, NULL değerleri otomatik olarak göz ardı eder. Eğer NULL değerleri sıfır olarak dahil etmek isterseniz, COALESCE() veya ISNULL() gibi fonksiyonları kullanmalısınız (örneğin, SUM(COALESCE(sutun_adi, 0))). Sayısal Olmayan Veri Tipleri: SUM() yalnızca sayısal veri tipleriyle çalışır. Sayısal olmayan bir sütun üzerinde kullanılırsa hata verecektir. Gerekirse, veri tipini uygun bir sayısal türe dönüştürmek için CAST() veya CONVERT() gibi fonksiyonları kullanın. GROUP BY ile Kullanım: SUM() fonksiyonunun gücü genellikle GROUP BY ifadesiyle birleştiğinde ortaya çıkar. Bu kombinasyon, verileri belirli kategorilere göre gruplandırarak her grup için ayrı ayrı toplamları hesaplamanıza olanak tanır. HAVING ile Filtreleme: GROUP BY kullanıldığında, gruplar üzerinde filtreleme yapmak için WHERE yerine HAVING ifadesi kullanılır. WHERE, gruplama yapılmadan önce satırları filtrelerken, HAVING gruplama yapıldıktan ve toplama fonksiyonları uygulandıktan sonra grupları filtreler. Performans: Büyük veri kümelerinde SUM() kullanımı, özellikle DISTINCT anahtar kelimesiyle veya karmaşık ifadelerle birleştiğinde performans üzerinde etki yaratabilir. İndeksleme, sorgu optimizasyonu ve uygun veri tipi seçimi gibi faktörler performansı artırabilir.
avatar
Emin
9
0
JavaScript Makaleleri
javascriptte-hata-yonetimi-error-nesnesinin-kullanimi
JavaScript’te Hata Yönetimi: `Error` Nesnesinin Kullanımı
Modern web uygulamalarının karmaşıklığı, beklenmedik durumların veya hataların ortaya çıkma olasılığını artırmaktadır. JavaScript, bu tür durumları yönetmek için yerleşik bir mekanizma sunar: Error nesnesi. Bu nesne, çalışma zamanı hatalarını temsil etmek, onları yakalamak ve uygun şekilde ele almak için kritik bir araçtır. Uygulama kararlılığını ve kullanıcı deneyimini sağlamak adına Error nesnesinin etkin kullanımı, her JavaScript geliştiricisinin sahip olması gereken temel bir yetkinliktir. Hata Nesnesinin Sözdizimi JavaScript'te bir hata nesnesi oluşturmak için Error yapıcısını (constructor) kullanırız. Bu, programatik olarak bir hata durumunu belirtmenin en yaygın yoludur. new Error([message[, fileName[, lineNumber]]])softmush.com Detaylı Açıklama Error yapıcısının aldığı parametreler ve Error nesnesinin temel özellikleri aşağıda detaylandırılmıştır: message: Hatanın kısa ve açıklayıcı bir metinle ifade edildiği bir String değeridir. Hata nesnesinin temel içeriğini oluşturur. fileName (İsteğe Bağlı): Hatanın meydana geldiği dosyanın yolunu belirten bir String değeridir. Genellikle hata yakalama mekanizmaları tarafından otomatik olarak doldurulur. lineNumber (İsteğe Bağlı): Hatanın meydana geldiği dosyadaki satır numarasını belirten bir Number değeridir. Bu da genellikle otomatik olarak atanır. Error nesnesinin kendisi, bu parametrelere ek olarak iki önemli özelliğe sahiptir: name: Hata türünün adını belirten bir String değeridir (örneğin, 'Error', 'TypeError', 'ReferenceError'). Özel hata türleri oluşturulduğunda bu özellik özelleştirilebilir. stack: Hatanın çağrı yığınını (call stack) gösteren bir String değeridir. Hatanın nerede ve nasıl oluştuğunu anlamak için son derece faydalıdır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, Error nesnesinin JavaScript uygulamalarında nasıl kullanılabileceğini göstermektedir. Örnek 1: Temel Hata Fırlatma ve Yakalama Bir fonksiyonun belirli bir koşulu karşılamadığı durumlarda programın akışını durdurmak ve bir hata durumu bildirmek için throw new Error() kullanılır. try...catch bloğu ile bu hatalar yakalanabilir. function bolmeIslemi(sayi1, sayi2) { if (sayi2 === 0) { throw new Error("Sıfıra bölme hatası: Bölen sıfır olamaz."); } return sayi1 / sayi2; } try { console.log(bolmeIslemi(10, 2)); // Çıktı: 5 console.log(bolmeIslemi(10, 0)); // Bu satır bir hata fırlatacak } catch (e) { console.error("Bir hata oluştu:", e.message); console.error("Hata adı:", e.name); console.error("Hata yığını:", e.stack); }softmush.com Örnek 2: Özel Hata Türü Oluşturma Uygulamaya özgü hata durumlarını daha spesifik bir şekilde yönetmek için Error nesnesinden türetilmiş özel hata sınıfları oluşturulabilir. Bu, hata türlerinin daha kolay ayırt edilmesini ve işlenmesini sağlar. class GecersizGirdiHatasi extends Error { constructor(message) { super(message); this.name = "GecersizGirdiHatasi"; // Hatanın adını özelleştiriyoruz } } function veriIsle(veri) { if (typeof veri !== 'number' || veri < 0) { throw new GecersizGirdiHatasi("Girdi pozitif bir sayı olmalıdır."); } return veri * 2; } try { console.log(veriIsle(5)); // Çıktı: 10 console.log(veriIsle(-3)); // Bu satır özel bir hata fırlatacak } catch (e) { if (e instanceof GecersizGirdiHatasi) { console.error("Geçersiz girdi hatası yakalandı:", e.message); } else { console.error("Beklenmeyen bir hata oluştu:", e.message); } }softmush.com Örnek 3: try...catch...finally Kullanımı try...catch...finally yapısı, hata oluşsa da oluşmasa da belirli kod bloklarının çalıştırılmasını garanti eder. Bu, kaynakları temizlemek veya bazı işlemleri tamamlamak için kullanışlıdır. function dosyaOku(dosyaAdi) { let dosyaAcik = false; try { console.log(`${dosyaAdi} dosyası açılıyor...`); dosyaAcik = true; // Simulate an error if (dosyaAdi === "hatali.txt") { throw new Error("Dosya okunamadı: Erişim reddedildi."); } console.log(`${dosyaAdi} dosya içeriği işleniyor.`); return "Dosya içeriği..."; } catch (e) { console.error("Hata:", e.message); return null; } finally { if (dosyaAcik) { console.log(`${dosyaAdi} dosyası kapatılıyor.`); } } } console.log(dosyaOku("veri.txt")); console.log("\n--- Yeni İşlem ---\n"); console.log(dosyaOku("hatali.txt"));softmush.com Önemli Notlar ve İpuçları Spesifik Hata Türleri Kullanımı: JavaScript, TypeError, ReferenceError, RangeError gibi çeşitli yerleşik hata türleri sunar. Mümkün olduğunca hatanın doğasına uygun spesifik hata türlerini kullanmaya özen gösterin. Bu, hata ayıklamayı ve hata işleme mantığını basitleştirir. Hataları Bastırmayın: Bir try...catch bloğunda hatayı yakalayıp hiçbir işlem yapmamak (boş bırakmak), uygulamanızdaki sorunların gizlenmesine neden olur. Hataları her zaman uygun bir şekilde günlüğe kaydedin veya kullanıcıya bildirin. finally Bloğunun Önemi: Kaynakları (dosya bağlantıları, ağ istekleri vb.) serbest bırakmak veya belirli bir işlemi tamamlamak için finally bloğunu kullanın. Bu blok, hata oluşsa da oluşmasa da her zaman çalıştırılır. Geniş Kapsamlı try...catch Bloklarından Kaçının: Tüm uygulamanızı tek bir try...catch bloğuna sarmak, hangi hatanın nerede meydana geldiğini anlamayı zorlaştırır. Hata yakalama bloklarınızı, hata potansiyeli olan belirli işlevlere veya kod parçalarına odaklayın. Üretim Ortamında Hata İzleme: Canlı sistemlerde oluşan hataları izlemek için Sentry, Bugsnag gibi üçüncü taraf hata izleme hizmetlerini kullanmayı düşünün. Bu hizmetler, hata raporlarını toplar, analiz eder ve geliştiricilere anında bildirimler gönderir.
avatar
Emin
9
0
CSS Makaleleri
css-dilinde-css-listeler-kullanimi
CSS Dilinde CSS Listeler Kullanımı
CSS, web sayfalarında listelerin görünümünü kontrol etmek için güçlü araçlar sunar. Bu makale, sıralı (ordered) ve sırasız (unordered) listelerin varsayılan stillerini nasıl değiştireceğinizi, özel işaretleyiciler (marker) atayacağınızı ve liste öğeleri arasındaki boşlukları nasıl yöneteceğinizi detaylı bir şekilde açıklayacaktır. Amacımız, listelerinizi web tasarımınıza mükemmel bir şekilde entegre etmek için gerekli tüm bilgileri sağlamaktır. Sözdizimi CSS'te listelerle çalışırken en sık kullanılan özellikler list-style-type, list-style-position ve list-style-image'dir. Bu özellikler genellikle list-style kısayol özelliği ile birleştirilebilir. ul { list-style-type: disc; /* veya square, circle, none, decimal, lower-alpha vb. */ list-style-position: inside; /* veya outside */ list-style-image: url('marker.png'); /* özel bir görsel kullanmak için */ } /* Kısayol (shorthand) kullanımı */ li { list-style: square inside url('marker.png'); } softmush.com Detaylı Açıklama CSS listelerinin görünümünü kontrol eden temel özellikler şunlardır: list-style-type: Liste işaretleyicisinin (marker) türünü belirler. Sırasız listeler için disc (varsayılan), circle, square, none gibi değerler alabilir. Sıralı listeler için decimal (varsayılan), decimal-leading-zero, lower-alpha, upper-alpha, lower-roman, upper-roman gibi değerler kullanılabilir. none değeri, işaretleyiciyi tamamen kaldırır. list-style-position: Liste işaretleyicisinin liste öğesi kutusunun içinde mi yoksa dışında mı konumlanacağını belirler. outside (varsayılan) değeri, işaretleyiciyi öğe kutusunun solunda, metinle hizalı olarak konumlandırır. inside değeri ise işaretleyiciyi öğe kutusunun içine, metnin bir parçasıymış gibi yerleştirir. list-style-image: Varsayılan işaretleyici yerine özel bir görsel kullanmanızı sağlar. Değer olarak bir görselin URL'sini alır, örneğin url('resim.svg'). Eğer görsel yüklenemezse veya bu özellik belirtilmezse, list-style-type özelliği devreye girer. list-style: Yukarıdaki üç özelliği tek bir kısayol özelliğiyle birleştirmek için kullanılır. Değerler herhangi bir sırada yazılabilir, ancak list-style-image özelliği varsa list-style-type'ın yerine geçer (görsel yüklenemezse geri dönüş olarak kullanılır). Örnek: list-style: square inside url('marker.png'); Pratik Kullanım Örnekleri Aşağıdaki örnekler, farklı list-style özelliklerinin nasıl uygulandığını göstermektedir. Örnek 1: Temel Sırasız Liste Stilini Değiştirme Bu örnekte, sırasız bir listenin () işaretleyicisini daire (circle) olarak ayarlayacağız ve metin hizalamasını değiştireceğiz. /* HTML */ Öğe Bir Öğe İki Öğe Üç /* CSS */ .liste-daire { list-style-type: circle; list-style-position: inside; padding-left: 0; /* Tarayıcı varsayılan padding'ini sıfırlama */ } softmush.com Örnek 2: Özel Görsel Kullanımı Bu örnek, bir listenin işaretleyicisi olarak özel bir görselin nasıl kullanılacağını gösterir. list-style-image özelliği ile bir görsel belirtilirken, görselin yüklenmemesi durumunda bir geri dönüş olarak list-style-type da tanımlanabilir. /* HTML */ Görsel İşaretli Öğe Bir Görsel İşaretli Öğe İki /* CSS */ .liste-gorsel { list-style-image: url('https://via.placeholder.com/15x15/0000FF/FFFFFF?text=%2B'); /* Mavi bir artı işareti görseli */ list-style-type: square; /* Görsel yüklenmezse kare göster */ padding-left: 20px; /* Görsel için yeterli boşluk */ } softmush.com Örnek 3: Numaralı Liste Stillerini Ayarlama Sıralı listeler () için farklı numaralandırma stilleri kullanmak mümkündür, örneğin küçük harfler veya Roma rakamları. /* HTML */ İlk Adım İkinci Adım Üçüncü Adım Bölüm I Bölüm II /* CSS */ .liste-harf { list-style-type: lower-alpha; } .liste-roma { list-style-type: upper-roman; } softmush.com Önemli Notlar Varsayılan Boşluklar: Tarayıcılar ve etiketlerine varsayılan olarak padding ve margin değerleri uygular. Bu boşlukları kontrol etmek için padding-left: 0; ve margin: 0; gibi CSS kurallarını kullanmanız gerekebilir. list-style: none; Kullanımı: İşaretleyicileri tamamen kaldırmak için list-style-type: none; veya kısayol olarak list-style: none; kullanın. Bu genellikle özel işaretleyiciler oluşturmak veya listeleri menü gibi farklı bir amaçla stilize etmek için yapılır. Erişilebilirlik: Görsel işaretleyicileri kaldırdığınızda, liste öğelerini okunabilir ve erişilebilir tutmak için alternatif görsel ipuçları veya anlamsal yapıları korumaya dikkat edin. Özel İşaretleyiciler ve Kontrol: list-style-image özelliği, işaretleyicinin boyutunu veya konumunu doğrudan kontrol etme konusunda sınırlıdır. Daha gelişmiş kontrol için, işaretleyiciyi ::before sözde-elemanı (pseudo-element) ile oluşturup content özelliği ve diğer CSS özellikleriyle stilize etmek daha esnek bir yaklaşımdır. Kısayol Özelliği: list-style kısayol özelliği, okunabilirliği artırır ve daha az kod yazmanızı sağlar. Ancak, değerlerin sırası önemli değildir, tarayıcı bunları doğru şekilde ayrıştırır. Yine de, standart bir sıra (type position image) izlemek iyi bir uygulamadır.
avatar
Emin
9
0
HTML Makaleleri
html-dilinde-listelerin-kullanimi-detayli-bir-kilavuz
HTML Dilinde Listelerin Kullanımı: Detaylı Bir Kılavuz
HTML, web içeriğini yapılandırmak için çeşitli etiketler sunar. Bu etiketler arasında, bilgiyi düzenli ve okunabilir bir formatta sunmak için listeler temel bir rol oynar. Listeler, birbiriyle ilişkili öğeleri gruplamak, adımları sıralamak veya terimleri tanımlamak için kullanılır. Bu kılavuz, HTML'de sırasız, sıralı ve tanımlama listelerinin nasıl oluşturulacağını, temel sözdiziminden pratik kullanım örneklerine kadar adım adım ele alacaktır. Sözdizimi HTML, üç ana liste türünü destekler: Sırasız Listeler (Unordered Lists): Öğeler arasında belirli bir sıralamanın önemli olmadığı durumlarda kullanılır ve genellikle madde işaretleriyle gösterilir. etiketi ile tanımlanır. Sıralı Listeler (Ordered Lists): Öğelerin belirli bir sıraya göre sunulması gerektiğinde kullanılır ve genellikle sayılar veya harflerle gösterilir. etiketi ile tanımlanır. Tanımlama Listeleri (Description Lists): Terim ve açıklamaların eşleştirildiği listelerdir. etiketi ile tanımlanır. Her üç liste türünde de, her bir liste öğesi (liste öğesi) etiketi ile temsil edilir. Tanımlama listeleri için ise (tanımlama terimi) ve (tanımlama açıklaması) etiketleri kullanılır. Detaylı Açıklama : Sırasız bir liste başlatır. Liste öğeleri genellikle disk, daire veya kare gibi madde işaretleriyle görüntülenir. : Sıralı bir liste başlatır. Liste öğeleri varsayılan olarak sayılarla (1, 2, 3...) görüntülenir, ancak type niteliği ile bu davranış değiştirilebilir (örneğin, type="a" küçük harfler, type="I" büyük Roma rakamları). : Hem hem de etiketleri içinde tek bir liste öğesini tanımlar. : Tanımlama listesini başlatır. Bir terim ve ilgili açıklamasını içeren bir listedir. : Tanımlama listesinde bir terimi (definition term) tanımlar. : Tanımlama listesinde etiketiyle tanımlanan terimin açıklamasını (definition description) sağlar. Pratik Kullanım Örnekleri Aşağıdaki örnekler, farklı liste türlerinin ve iç içe listelerin nasıl oluşturulacağını göstermektedir. Sırasız Liste: Elma Muz Çilek softmush.com Sıralı Liste: Birinci Adım İkinci Adım Üçüncü Adım softmush.com Sıralı Liste (Harf Tipi): Giriş Gelişme Sonuç softmush.com Tanımlama Listesi: HTML HyperText Markup Language'ın kısaltmasıdır. CSS Cascading Style Sheets'in kısaltmasıdır. softmush.com İç İçe Listeler: Kahvaltı Öğle Yemeği Salata Ana Yemek Tatlı Akşam Yemeği softmush.com Önemli Notlar Erişilebilirlik: Listelerin doğru semantik etiketlerle kullanılması, ekran okuyucular gibi yardımcı teknolojilerin içeriği doğru bir şekilde yorumlaması için kritik öneme sahiptir. Stil Uygulama: Listelerin varsayılan görünümü CSS ile tamamen özelleştirilebilir. list-style-type, list-style-image ve list-style-position gibi CSS özellikleri kullanılarak madde işaretleri veya numaralandırma stilleri değiştirilebilir. İç İçe Kullanım: Listeler iç içe yerleştirilebilir. Bir liste öğesinin () içine başka bir veya etiketi ekleyerek hiyerarşik yapılar oluşturulabilir. Ancak, bir liste öğesinin içeriği her zaman bir veya diğer uygun blok seviyesi etiketlerle sarmalanmalıdır. Tanımlama Listesi Kullanımı: , sadece terim-tanım çiftleri için değil, genel olarak anahtar-değer çiftlerini veya soru-cevap formatlarını sunmak için de kullanılabilir. Doğru Etiket Seçimi: İçeriğinizin doğasına uygun liste türünü seçmek önemlidir. Sıranın önemli olduğu yerlerde , önemli olmadığı yerlerde , terim ve açıklamalar için tercih edilmelidir.
avatar
Emin
12
0
PHP Makaleleri
php-dilinde-ontanimli-degiskenler-kullanimi
PHP Dilinde Öntanımlı Değişkenler Kullanımı
PHP geliştiricileri için öntanımlı değişkenler, web uygulamalarının kalbinde yer alan temel bir yapıdır. Bu değişkenler, PHP tarafından otomatik olarak oluşturulur ve bir betiğin herhangi bir yerinden erişilebilir durumdadırlar. HTTP isteklerinden oturum verilerine, sunucu bilgilerinden dosya yüklemelerine kadar uygulamanın farklı katmanlarından bilgiye erişimi kolaylaştırarak dinamik ve etkileşimli web sayfaları oluşturulmasına olanak tanırlar. Öntanımlı Değişkenlere Genel Bakış PHP, betik yürütülmeden önce veya yürütme sırasında otomatik olarak doldurulan bir dizi özel değişkene sahiptir. Bu değişkenler, "süper global" olarak da adlandırılır, çünkü kapsamları ne olursa olsun (fonksiyonlar, sınıflar veya global kapsam) PHP betiğinin her yerinden erişilebilirler. En yaygın kullanılan öntanımlı değişkenler şunlardır: $_GET: HTTP GET metodu ile gönderilen verileri içerir. $_POST: HTTP POST metodu ile gönderilen verileri içerir. $_REQUEST: Hem $_GET hem de $_POST ve $_COOKIE verilerini içerir. $_SESSION: Oturum değişkenlerini içerir. Oturum başlatıldıktan sonra kullanılabilir. $_COOKIE: HTTP çerezlerini içerir. $_SERVER: Sunucu ve yürütme ortamı hakkında bilgi içerir. $_FILES: HTTP POST metodu ile yüklenen dosyalar hakkında bilgi içerir. $_ENV: Ortam değişkenlerini içerir. Temel Sözdizimi Öntanımlı değişkenler, bir dizi gibi davranır ve içerdikleri verilere anahtar-değer çiftleri aracılığıyla erişilir. Genel sözdizimi aşağıdaki gibidir: $_DEĞİŞKEN_ADI['anahtar'];softmush.com Burada; $_DEĞİŞKEN_ADI: Erişmek istediğiniz öntanımlı değişkenin adını (örn. $_GET, $_POST) temsil eder. 'anahtar': Erişilmek istenen verinin benzersiz tanımlayıcısını temsil eder. Bu, bir HTML formundaki bir alanın name özelliği, bir URL sorgu parametresinin adı, bir çerezin adı veya bir sunucu bilgisinin spesifik bir etiketi olabilir. Detaylı Açıklama Her bir süper global değişkenin işlevselliği ve tipik kullanım alanları aşağıda açıklanmıştır: $_GET: Tarayıcının adres çubuğunda (URL'de) ? işaretinden sonra gelen sorgu dizgisindeki parametrelere erişmek için kullanılır. Örneğin, example.com/sayfa.php?id=123&ad=test URL'sinde id ve ad parametrelerine $_GET['id'] ve $_GET['ad'] ile erişilebilir. $_POST: HTML formları aracılığıyla HTTP POST metodu kullanılarak gönderilen verilere erişmek için kullanılır. Bu veriler URL'de görünmez ve genellikle hassas bilgiler (şifreler) veya büyük veri setleri için tercih edilir. $_REQUEST: PHP'nin yapılandırmasına (variables_order) bağlı olarak $_GET, $_POST ve $_COOKIE değişkenlerinin içeriğini birleştirir. Ancak, değişken önceliği nedeniyle beklenmedik davranışlara yol açabileceği için genellikle doğrudan $_GET veya $_POST kullanılması önerilir. $_SESSION: Kullanıcı oturumları arasında veri saklamak için kullanılır. Bir kullanıcının web sitesindeki etkileşimlerini takip etmek (giriş durumu, sepet içeriği vb.) için idealdir. Kullanmadan önce session_start() fonksiyonu çağrılmalıdır. $_COOKIE: Kullanıcının tarayıcısında depolanan HTTP çerezlerine erişmek için kullanılır. Çerezler, kullanıcı tercihlerini veya kimlik bilgilerini saklamak gibi amaçlarla kullanılabilir. $_SERVER: Web sunucusu ve geçerli yürütme ortamı hakkında kapsamlı bilgi sağlar. Örneğin, $_SERVER['REQUEST_METHOD'] ile HTTP isteğinin metodunu (GET, POST), $_SERVER['REMOTE_ADDR'] ile kullanıcının IP adresini alabilirsiniz. $_FILES: HTML formları aracılığıyla yüklenen dosyalar hakkında bilgi (dosya adı, türü, boyutu, geçici konumu) içerir. Dosya yükleme işlemleri için özel olarak tasarlanmıştır. $_ENV: Çevre değişkenlerini içerir. Bu değişkenler, web sunucusunun (Apache, Nginx vb.) veya işletim sisteminin PHP betiğine sağladığı sistem düzeyindeki ayarlardır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, öntanımlı değişkenlerin PHP betiklerinde nasıl kullanıldığını göstermektedir. Örnek 1: $_GET Kullanımı Bu örnekte, bir URL'den ad parametresini alıp ekrana yazdıracağız. Öncelikle, kullanıcıdan adını isteyen bir HTML formu oluşturalım: GET Örneği Adınızı Girin (GET) Adınız: Gönder softmush.com Şimdi de islem.php dosyasında bu veriyi işleyelim: softmush.com Örnek 2: $_POST Kullanımı Bu örnek, bir form aracılığıyla HTTP POST metodu ile gönderilen kullanıcı adını ve şifresini nasıl işleyeceğimizi gösterir. Yine bir HTML formu ile başlayalım: POST Örneği Giriş Yap (POST) Kullanıcı Adı: Şifre: Giriş softmush.com Şimdi de giris.php dosyasında bu veriyi işleyelim: softmush.com Örnek 3: $_SESSION Kullanımı Bu örnek, oturum değişkenlerini kullanarak kullanıcı girişini simüle eder ve kullanıcının adını oturumda saklar.
avatar
Emin
8
0
Python Makaleleri
python-dilinde-yapisal-desen-eslestirme-structural-pattern-matching-ve-match-deyimi-kullanimi
Python Dilinde Yapısal Desen Eşleştirme (Structural Pattern Matching) ve Match Deyimi Kullanımı
Python 3.10 ile tanıtılan yapısal desen eşleştirme (structural pattern matching) özelliği, programcılara kodlarını daha okunaklı ve yönetilebilir hale getirme imkanı sunar. Özellikle karmaşık veri yapılarını analiz ederken veya farklı durumları işlerken, match deyimi if/elif/else zincirlerine modern ve güçlü bir alternatif sunar. Bu makale, Python'daki match deyiminin temel prensiplerini, sözdizimini ve çeşitli kullanım senaryolarını detaylı bir şekilde açıklamaktadır. Sözdizimi Python'daki match deyiminin temel sözdizimi aşağıdaki gibidir: match konu: case desen_1: # desen_1 eşleşirse çalışacak kod case desen_2 if koşul: # desen_2 eşleşirse ve koşul doğruysa çalışacak kod case _: # hiçbir desen eşleşmezse çalışacak kod (isteğe bağlı)softmush.com Detaylı Açıklama match deyiminin her bir bileşeni belirli bir amaca hizmet eder: match konu: konu ifadesi, eşleştirme yapılmak istenen herhangi bir Python objesidir. Bu, bir değişken, bir fonksiyon çağrısının sonucu veya doğrudan bir değer olabilir. match deyimi, bu konu objesini sırasıyla tanımlanan case desenleriyle karşılaştırır. case desen: Her case bloğu, konu ile eşleştirilmeye çalışılan bir desen tanımlar. Desenler çeşitli tiplerde olabilir ve aşağıdaki gibi farklı eşleştirme mekanizmalarını destekler: Değer Desenleri (Literal Patterns): Sabit değerlerle (sayılar, dizeler, True, False, None) eşleşir. Örn: case 1:, case "hata":. Yakalama Desenleri (Capture Patterns): Bir değeri bir değişkene atar. Örn: case x:. Eğer x daha önce tanımlanmamışsa, eşleşen değeri x'e atar. Eğer _ kullanılırsa, bu bir wildcard (joker) deseni olarak kabul edilir ve değeri yakalamaz, sadece eşleşir. Sıra Desenleri (Sequence Patterns): Listeler veya tuple'lar gibi sıralı veri yapılarını eşleştirmek için kullanılır. Örn: case [x, y]:, case (başlangıç, *diğerleri):. Haritalama Desenleri (Mapping Patterns): Sözlükler gibi anahtar-değer çiftlerini içeren veri yapılarını eşleştirmek için kullanılır. Örn: case {"tip": "hata", "kod": c}:. Sınıf Desenleri (Class Patterns): Belirli bir sınıfın örneklerini eşleştirmek ve bu örneklerin niteliklerine erişmek için kullanılır. Örn: case Nokta(x=nx, y=ny):. OR Desenleri (OR Patterns): Birden fazla deseni | operatörü ile birleştirerek, herhangi bir desenin eşleşmesi durumunda kod bloğunun çalışmasını sağlar. Örn: case "a" | "b":. AS Desenleri (AS Patterns): Bir deseni eşleştirirken aynı zamanda eşleşen değeri başka bir değişkene atamak için kullanılır. Örn: case ["komut", *args] as tüm_komut:. if koşul: (Guard) Her case deseninin arkasına isteğe bağlı olarak bir if koşul: ifadesi eklenebilir. Bu, desenin eşleşmesinin yanı sıra, belirtilen koşulun da doğru olmasını gerektirir. Koşul, desende yakalanan değişkenleri kullanabilir. Örn: case {"yaş": y} if y >= 18:. Pratik Kullanım Örnekleri Aşağıdaki örnekler, match deyiminin farklı senaryolarda nasıl kullanılabileceğini göstermektedir. Örnek 1: Temel Değer Eşleştirme Bir HTTP durum kodunu işleme: durum_kodu = 200 match durum_kodu: case 200: print("OK - İstek başarıyla işlendi.") case 404: print("Bulunamadı - Kaynak mevcut değil.") case 500: print("Sunucu Hatası - İç sunucu hatası oluştu.") case _: # Joker desen, diğer tüm durumlar için print(f"Bilinmeyen durum kodu: {durum_kodu}")softmush.com Çıktı: OK - İstek başarıyla işlendi.softmush.com Örnek 2: Sıra Desenleri ve Yakalama Bir komut listesini ayrıştırma: komut = ["yükle", "uygulama.exe", "--sessiz"] match komut: case ["yükle", dosya, *argümanlar]: print(f"'{dosya}' yükleniyor. Argümanlar: {argümanlar}") case ["sil", dosya]: print(f"'{dosya}' siliniyor.") case _: print("Geçersiz komut.")softmush.com Çıktı: 'uygulama.exe' yükleniyor. Argümanlar: ['--sessiz']softmush.com Örnek 3: Haritalama Desenleri ve Koşullu Eşleştirme (Guard) Bir kullanıcı objesini işleme: kullanici_verisi = {"ad": "Mehmet", "rol": "admin", "aktif": True} match kullanici_verisi: case {"rol": "admin", "aktif": True}: print("Yönetici girişi yapıldı.") case {"rol": "editor", "aktif": True, "ad": isim}: print(f"Editör '{isim}' giriş yaptı.") case {"aktif": False}: print("Kullanıcı hesabı pasif.") case _: print("Bilinmeyen kullanıcı durumu.")softmush.com Çıktı: Yönetici girişi yapıldı.softmush.com Örnek 4: Sınıf Desenleri Özel bir sınıfın örneklerini eşleştirme. Önce sınıfı tanımlayalım: class Nokta: def __init__(self, x, y): self.x = x self.y = y def __repr__(self): return f"Nokta(x={self.x}, y={self.y})" nokta_objesi = Nokta(10, 20) mesaj_objesi = "Merhaba" match nokta_objesi: case Nokta(x=0, y=0): print("Orijin noktasında.") case Nokta(x=nx, y=ny) if nx == ny: print(f"x ve y değerleri eşit: {nx}") case Nokta(x=nx, y=ny): print(f"Farklı bir nokta: x={nx}, y={ny}") case _: print("Bir Nokta objesi değil.")softmush.com Çıktı: Farklı bir nokta: x=10, y=20softmush.com Örnek 5: OR Desenleri ve AS Desenleri Birden fazla durumu tek bir case altında işleme ve değeri yakalama: durum = "başarılı" # durum = "tamamlandı" # durum = "işlem_yapılmadı" match durum: case "başarılı" | "tamamlandı" as sonuc: print(f"İşlem {sonuc} şekilde tamamlandı.") case "hata" | "başarısız": print("İşlemde bir hata oluştu.") case _: print("Bilinmeyen durum.")softmush.com Çıktı: İşlem başarılı şekilde tamamlandı.softmush.com Önemli Notlar Sıralama Önemlidir: match deyimi, case bloklarını yukarıdan aşağıya doğru sırayla değerlendirir. İlk eşleşen case bloğu yürütülür ve match deyiminden çıkılır. Bu nedenle, daha spesifik desenler genel desenlerden önce gelmelidir. _ (Wildcard): Alt çizgi (_), hiçbir şeyi yakalamayan ve her zaman eşleşen bir joker desendir. Genellikle match bloğunun son case'i olarak, varsayılan bir durumu ele almak için kullanılır (else gibi). if Koşulları (Guards): Bir case deseni eşleşse bile, arkasından gelen if koşulu False ise o case bloğu yürütülmez. Bu, daha karmaşık koşulları desen eşleştirmeye dahil etmek için güçlü bir yoldur. Değişken Yakalama: Bir desende kullanılan ve daha önce tanımlanmamış bir isim (örneğin case x:), eşleşen değeri o değişkene atar. Bu, yakalama deseni olarak bilinir. Python 3.10 ve Sonrası: match deyimi, Python'ın 3.10 sürümü ile birlikte tanıtılmıştır. Daha eski Python sürümlerinde bu özellik bulunmamaktadır. Performans: Küçük ve basit koşullar için if/elif/else zincirleri hala uygun olabilir. Ancak karmaşık veri yapıları üzerinde birden fazla durumu ele alırken match deyimi, kodu daha okunaklı ve sürdürülebilir hale getirir.
avatar
Emin
15
0
SQL Makaleleri
sql-dilinde-count-fonksiyonunun-detayli-kullanimi
SQL Dilinde COUNT Fonksiyonunun Detaylı Kullanımı
SQL veritabanı yönetiminde, veri kümelerinden bilgi çıkarmak için çeşitli aggregate fonksiyonlar kullanılır. Bu fonksiyonlardan biri olan COUNT, bir sorgu tarafından döndürülen satır sayısını veya belirli bir kolondaki NULL olmayan değerlerin sayısını belirlemek için kritik bir araçtır. Bu makale, COUNT fonksiyonunun temel sözdiziminden başlayarak, farklı kullanım senaryoları ve pratik örneklerle detaylı bir rehber sunmaktadır. Veri analizi, raporlama ve istatistiksel sorgular için COUNT fonksiyonunu etkili bir şekilde kullanmayı öğrenmek, her SQL geliştiricisi ve veritabanı yöneticisi için temel bir beceridir. Temel Sözdizimi COUNT fonksiyonunun genel sözdizimi aşağıdaki gibidir: COUNT ( { * | [ ALL | DISTINCT ] ifade } ) softmush.com Bu sözdizimi içerisinde farklı parametreler, sayım işleminin nasıl yapılacağını belirler. Detaylı Açıklama COUNT fonksiyonunun yapısını oluşturan her bir bileşen, belirli bir amaca hizmet eder: * (Yıldız): Bir sorgu tarafından döndürülen toplam satır sayısını sayar. Bu, NULL değerler içeren satırları da dahil olmak üzere, filtrelenmiş tüm satırları sayar. Performans açısından genellikle en hızlı yöntemdir çünkü belirli bir kolonu kontrol etme ihtiyacı yoktur. ifade (Expression): Sayılacak olan kolonun adını veya bir ifadeyi belirtir. COUNT(kolon_adı) kullanıldığında, SQL yalnızca bu kolonda NULL olmayan değerlere sahip satırları sayar. Eğer tüm satırları saymak istiyorsanız ve kolonun NULL değer içerme olasılığı varsa, COUNT(*) kullanmanız daha doğru olur. ALL: Bu anahtar kelime isteğe bağlıdır ve varsayılan davranıştır. ifade içindeki tüm değerleri (tekrarlananları da dahil) sayar. Genellikle açıkça belirtilmez. DISTINCT: Bu anahtar kelime, ifade içindeki yalnızca benzersiz, NULL olmayan değerleri sayar. Örneğin, bir kolonda kaç farklı değer olduğunu öğrenmek istediğinizde kullanılır. Performans maliyeti COUNT(*) veya COUNT(kolon_adı)'na göre daha yüksek olabilir, çünkü veritabanının benzersiz değerleri belirlemek için ek işlem yapması gerekir. COUNT fonksiyonu genellikle WHERE yan tümcesi ile birlikte belirli koşullara uyan kayıtları saymak için, GROUP BY yan tümcesi ile birlikte verileri gruplayarak her grup için sayım yapmak üzere ve HAVING yan tümcesi ile birlikte gruplanmış sayımlar üzerinde filtreleme yapmak için kullanılır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, bir Urunler tablosu üzerinden COUNT fonksiyonunun farklı senaryolarda nasıl kullanıldığını göstermektedir. Urunler tablosunun UrunID, UrunAd, KategoriID ve Fiyat kolonlarına sahip olduğunu varsayalım. Örnek 1: Tablodaki Toplam Satır Sayısını Bulma Bu sorgu, Urunler tablosundaki tüm satırların sayısını döndürür. SELECT COUNT(*) AS ToplamUrunSayisi FROM Urunler; softmush.com Örnek 2: Belirli Bir Kolondaki NULL Olmayan Değerlerin Sayısını Bulma Bu sorgu, Fiyat kolonu NULL olmayan ürünlerin sayısını döndürür. Eğer bazı ürünlerin fiyatı belirtilmemişse, bu sorgu COUNT(*)'dan farklı bir sonuç verebilir. SELECT COUNT(Fiyat) AS FiyatliUrunSayisi FROM Urunler; softmush.com Örnek 3: Benzersiz Kategori Sayısını Bulma Bu sorgu, Urunler tablosunda kaç farklı kategori bulunduğunu gösterir. SELECT COUNT(DISTINCT KategoriID) AS BenzersizKategoriSayisi FROM Urunler; softmush.com Örnek 4: Belirli Bir Koşula Uyan Kayıtların Sayısını Bulma Bu sorgu, fiyatı 50 TL'den yüksek olan ürünlerin sayısını döndürür. SELECT COUNT(*) AS YuksekFiyatliUrunSayisi FROM Urunler WHERE Fiyat > 50; softmush.com Örnek 5: Her Kategori İçin Ürün Sayısını Bulma Bu sorgu, KategoriID'ye göre ürünleri gruplar ve her kategori için toplam ürün sayısını listeler. SELECT KategoriID, COUNT(*) AS UrunSayisi FROM Urunler GROUP BY KategoriID; softmush.com Örnek 6: Belirli Bir Eşiğin Üzerinde Ürüne Sahip Kategorileri Listeleme Bu sorgu, GROUP BY ile birlikte HAVING yan tümcesini kullanarak, 5'ten fazla ürüne sahip kategorileri ve bu kategorilerdeki ürün sayılarını listeler. SELECT KategoriID, COUNT(*) AS UrunSayisi FROM Urunler GROUP BY KategoriID HAVING COUNT(*) > 5; softmush.com Önemli Notlar COUNT(*) ve COUNT(kolon_adı) Farkı: COUNT(*), sorgunun döndürdüğü tüm satırları sayarken, COUNT(kolon_adı) yalnızca belirtilen kolon_adı'nda NULL olmayan değerlere sahip satırları sayar. Bu, özellikle NULL değerlerin bulunduğu kolonlarda önemli bir fark yaratabilir. DISTINCT Kullanımı: COUNT(DISTINCT kolon_adı), bir kolondaki benzersiz değerlerin sayısını bulmak için kullanılır. Büyük veri kümelerinde performansı etkileyebilir, çünkü veritabanının benzersiz değerleri belirlemek için ek bir sıralama veya hash işlemi yapması gerekebilir. Aggregate Fonksiyonu: COUNT, bir aggregate fonksiyonudur ve genellikle GROUP BY yan tümcesi ile birlikte kullanılır. GROUP BY kullanılmadığında, tüm veri kümesi tek bir grup olarak kabul edilir ve tek bir sayım değeri döndürülür. Koşullu Sayımlar: Belirli bir koşula uyan kayıtları saymak için WHERE yan tümcesi kullanılır. Daha karmaşık koşullu sayımlar için CASE ifadesi (örneğin, COUNT(CASE WHEN koşul THEN 1 ELSE NULL END)) kullanılabilir. Bu, aynı sorgu içinde birden fazla koşula dayalı sayım yapmanıza olanak tanır. Performans: Genel olarak COUNT(*), COUNT(kolon_adı)'ndan daha performanslı olabilir, çünkü indeksleme durumuna bağlı olarak doğrudan satır sayısına erişebilir. DISTINCT kullanımı ise genellikle en yavaş olanıdır.
avatar
Emin
16
0
HTML Makaleleri
html-dilinde-html-tables-kullanimi
HTML Dilinde HTML Tables Kullanımı
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. Temel Sözdizimi Bir HTML tablosu, etiketi ile tanımlanır. Tablo içindeki her satır (table row) etiketi ile belirtilir. Satırların içindeki her veri hücresi (table data) etiketi ile oluşturulur. Başlık hücreleri için ise (table header) etiketi kullanılır. Tablonun başlık bölümünü , gövde bölümünü ve altbilgi bölümünü ile gruplamak, tablo yapısını semantik olarak güçlendirir. Başlık 1 Başlık 2 Veri 1A Veri 1B Veri 2A Veri 2B Altbilgi 1 Altbilgi 2 softmush.com Detaylı Açıklama HTML tablolarını oluşturan temel etiketler ve bunların rolleri aşağıda açıklanmıştır: : Bu etiket, tüm tablo içeriğini kapsayan ana kapsayıcıdır. Tarayıcıya içeriğin bir tablo olarak yorumlanması gerektiğini bildirir. Genellikle border, width gibi eski nitelikler yerine CSS ile stil verilir. : Tablonun başlık (header) bölümünü gruplandırmak için kullanılır. Genellikle tablo sütun başlıklarını içeren bir veya daha fazla etiketi içerir. Semantik olarak, bu bölüm tablonun içeriğini özetler ve genellikle sayfanın üst kısmında veya sabit bir konumda kalabilir. : Tablonun ana veri (body) bölümünü gruplandırmak için kullanılır. Tablonun gerçek veri satırlarını () içerir. Bir tabloda birden fazla etiketi bulunabilir, bu da veri gruplarını ayırmak için faydalıdır. : Tablonun altbilgi (footer) bölümünü gruplandırmak için kullanılır. Genellikle toplamlar, özetler veya dipnotlar gibi bilgileri içeren bir veya daha fazla etiketi içerir. elementi, HTML kodu içinde 'den önce tanımlanmış olsa bile tarayıcı tarafından genellikle tablonun en altında görüntülenir. : Bir tablo satırını (table row) tanımlar. , veya içinde yer almalıdır. Her etiketi, bir veya daha fazla veya etiketi içerebilir. : Bir tablo başlık hücresini (table header) tanımlar. İçindeki metin genellikle tarayıcılar tarafından varsayılan olarak kalın ve ortalanmış olarak görüntülenir. etiketleri, ilgili sütunun veya satırın ne anlama geldiğini açıklar ve erişilebilirlik açısından önemlidir. : Bir tablo veri hücresini (table data) tanımlar. Tablonun gerçek verilerini içerir. Her etiketi, bir etiketi içinde yer almalıdır. Tablo hücrelerinin sütunları veya satırları birleştirmesi için colspan ve rowspan nitelikleri kullanılır: colspan: Bir hücrenin kaç sütunu kapsayacağını belirtir. Örneğin, etiketi, hücrenin iki sütunu genişletmesini sağlar. rowspan: Bir hücrenin kaç satırı kapsayacağını belirtir. Örneğin, etiketi, hücrenin iki satır boyunca uzanmasını sağlar. Pratik Kullanım Örnekleri Aşağıdaki örnekler, HTML tablolarının farklı senaryolarda nasıl kullanılabileceğini göstermektedir. Basit Bir Tablo Oluşturma Bu örnek, temel , , ve etiketlerini kullanarak basit bir öğrenci not tablosu oluşturur. Öğrenci Adı Ders Not Ayşe Yılmaz Matematik 95 Can Demir Türkçe 88 Elif Kaya Fizik 72 softmush.com colspan ve rowspan Kullanımı Bu örnek, hücreleri birleştirmek için colspan ve rowspan niteliklerinin nasıl kullanılacağını gösterir. Bu, daha karmaşık tablo düzenleri oluşturmak için faydalıdır. Ürün Miktar Fiyat Adet Birim Laptop 1 Adet 1200 TL Mouse 2 Adet 150 TL Toplam 1350 TL softmush.com Önemli Notlar HTML tablolarını kullanırken dikkate alınması gereken bazı önemli noktalar şunlardır: Semantik Kullanım: Tabloları yalnızca tablo verileri (satırlar ve sütunlar halinde ilişkili veriler) için kullanın. Sayfa düzeni oluşturmak için tabloları kullanmaktan kaçının; bunun yerine CSS Grid veya Flexbox gibi modern düzen tekniklerini tercih edin. Erişilebilirlik: Tabloların erişilebilirliğini artırmak için etiketlerini doğru kullanın ve scope niteliği ile başlık hücrelerinin kapsamını belirtin (örneğin, veya ). Karmaşık tablolar için , ve etiketlerini de değerlendirin. Stil Verme: Tabloların görsel görünümünü değiştirmek için CSS kullanın. Eski HTML nitelikleri (örneğin, border, cellpadding, cellspacing, width) yerine CSS özelliklerini (örneğin, border, padding, border-spacing, width) tercih edin. Duyarlılık: Büyük tablolar mobil cihazlarda sorun yaratabilir. Duyarlı tablolar oluşturmak için CSS ile tabloya overflow-x: auto; ekleyerek yatay kaydırma çubukları sağlayabilir veya daha karmaşık duyarlı tablo tekniklerini uygulayabilirsiniz. Boş Hücreler: Boş hücreler tarayıcıda boşluk olarak görünebilir. Bir hücrenin içeriği yoksa bile, veya şeklinde kapatılmış bir etiket kullanmak önemlidir.
avatar
Emin
11
0
Python Makaleleri
python-dilinde-kosullu-mantik-if-else-kullanimi
Python Dilinde Koşullu Mantık: If...Else Kullanımı
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. Sözdizimi 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 softmush.com 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. Detaylı Açıklama 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. Pratik Kullanım Örnekleri 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.") softmush.com 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.") softmush.com 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") softmush.com 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ı.") softmush.com 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. Önemli Notlar ve İpuçları 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.
avatar
Emin
7
0
SQL Makaleleri
sql-dilinde-min-ve-max-fonksiyonlarinin-kullanimi
SQL Dilinde MIN ve MAX Fonksiyonlarının Kullanımı
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. Sözdizimi 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;softmush.com SELECT MAX(kolon_adi) FROM tablo_adi WHERE kosul;softmush.com Detaylı Açıklama 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. Örnekler 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;softmush.com Ö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;softmush.com Ö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';softmush.com Ö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;softmush.com Ö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;softmush.com Önemli Notlar 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.
avatar
Emin
8
0
JavaScript Makaleleri
javascript-dilinde-regexp-duzenli-ifadeler-kullanimi
JavaScript Dilinde RegExp (Düzenli İfadeler) Kullanımı
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. Temel Sözdizimi 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/bayraklarsoftmush.com Bir RegExp kurucusu ise, deseni ve bayrakları string olarak alır: new RegExp("desen", "bayraklar")softmush.com 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. Detaylı Açıklama 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. Pratik Kullanım Örnekleri 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)); // falsesoftmush.com 2. 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"]softmush.com 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."softmush.com 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); // -1softmush.com 5. 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)softmush.com İpuçları ve Önemli Notlar 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.
avatar
Emin
10
0
CSS Makaleleri
css-dilinde-ikon-kullanimi-temel-yaklasimlar-ve-uygulamalar
CSS Dilinde İkon Kullanımı: Temel Yaklaşımlar ve Uygulamalar
Web arayüzlerinde görsel zenginlik ve işlevsellik sağlamak amacıyla ikonlar kritik bir rol oynar. Bu makale, Cascading Style Sheets (CSS) dilini kullanarak web projelerine ikonların nasıl entegre edildiğini ve stilize edildiğini teknik bir perspektiften inceleyecektir. Özellikle, harici ikon kütüphanelerinin kullanımı ve CSS'in bu ikonları görselleştirmedeki gücü üzerinde durulacaktır. Temel Sözdizimi (Syntax) CSS tabanlı ikon kullanımı genellikle iki ana yaklaşıma dayanır: harici bir ikon fontu kütüphanesini dahil etmek ve bu kütüphanenin sunduğu ikonları CSS pseudo-elementleri (::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; } softmush.com Detaylı Açıklama Yukarıdaki sözdizimi, CSS ikon kullanımının temel bileşenlerini göstermektedir. Her bir bileşenin işlevi aşağıda açıklanmıştır: @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. Pratik Kullanım Örnekleri Aşağıdaki örnekler, CSS ikonlarının farklı senaryolarda nasıl kullanılabileceğini göstermektedir. Örnek 1: Pseudo-Element ile Bir Linke İkon Ekleme Bu örnek, bir bağlantının önüne Font Awesome'dan bir ev ikonu eklemeyi göstermektedir. 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; } softmush.com Örnek 2: Doğrudan Sınıf Kullanımı ile Sosyal Medya İkonları Bu örnek, Font Awesome'ın kendi sınıf adlarını kullanarak sosyal medya ikonlarını nasıl gösterebileceğinizi açıklar. .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; } softmush.com Örnek 3: Farklı Font Ağırlıkları ve Boyutlandırma Bu örnek, aynı ikonun farklı ağırlık (solid/regular) ve boyutlarda nasıl kullanılabileceğini gösterir. Kullanıcı Profili .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; } softmush.com Önemli Notlar CSS ikonlarını kullanırken göz önünde bulundurulması gereken bazı kritik noktalar aşağıda sıralanmıştır: 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.
avatar
Emin
9
0
HTML Makaleleri
html-dilinde-sayfa-basligi-page-title-kullanimi
HTML Dilinde Sayfa Başlığı (Page Title) Kullanımı
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. Sözdizimi 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 softmush.com Detaylı Açıklama 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. Pratik Kullanım Örnekleri 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ı softmush.com 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 softmush.com 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. Önemli Notlar 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.
avatar
Emin
8
0
PHP Makaleleri
php-dilinde-oznitelikler-attributes-kullanimi-derinlemesine-bir-kilavuz
PHP Dilinde Öznitelikler (Attributes) Kullanımı: Derinlemesine Bir Kılavuz
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. Temel Sözdizimi 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.
avatar
Emin
7
0
SQL Makaleleri
sql-aggregate-functions-veri-kumelerini-ozetleme-ve-analiz-etme-rehberi
SQL Aggregate Functions: Veri Kümelerini Özetleme ve Analiz Etme Rehberi
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. Sözdizimi 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;softmush.com Detaylı Açıklama 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. Pratik Kullanım Örnekleri 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); softmush.com 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); softmush.com 1. Toplam Satış Sayısını Bulma (COUNT(*)) Bu sorgu, Satislar tablosundaki toplam satış kaydını döndürür. SELECT COUNT(*) AS ToplamSatisSayisi FROM Satislar;softmush.com 2. Belirli Bir Kolondaki NULL Olmayan Değer Sayısı (COUNT(kolon_adı)) MusteriID değeri olan (yani NULL olmayan) satışların sayısını bulur. SELECT COUNT(MusteriID) AS MusteriliSatisSayisi FROM Satislar;softmush.com 3. Benzersiz Müşteri Sayısını Bulma (COUNT(DISTINCT kolon_adı)) Kaç farklı müşterinin satış yaptığını gösterir. SELECT COUNT(DISTINCT MusteriID) AS BenzersizMusteriSayisi FROM Satislar;softmush.com 4. Toplam Satış Miktarını Hesaplama (SUM()) Tüm satışların toplam miktarını döndürür. SELECT SUM(Miktar) AS ToplamSatisMiktari FROM Satislar;softmush.com 5. Ortalama Satış Miktarını Hesaplama (AVG()) Tüm satışların ortalama miktarını döndürür. SELECT AVG(Miktar) AS OrtalamaSatisMiktari FROM Satislar;softmush.com 6. En Yüksek ve En Düşük Satış Miktarını Bulma (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;softmush.com 7. Her Ürün İçin Toplam Satış Miktarını ve Adedini Bulma (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;softmush.com 8. Belirli Bir Eşiğin Üzerinde Toplam Satışa Sahip Ürünleri Listeleme (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;softmush.com 9. Departmanlara Göre Ortalama Maaş ve Çalışan Sayısı (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;softmush.com Önemli Notlar 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.
avatar
Emin
9
0
JavaScript Makaleleri
javascript-dilinde-js-math-kullanimi
JavaScript Dilinde JS Math Kullanımı
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. Sözdizimi 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, ...);softmush.com Detaylı Açıklama 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. Örnekler 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.7softmush.com Ö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: 7softmush.com Ö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ı: 9softmush.com Ö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ı: 9softmush.com Önemli Notlar Statik 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.
avatar
Emin
8
0
Bilim Makaleleri
hormonlar-hayatimizin-gizli-orkestra-sefleri
Hormonlar: Hayatımızın Gizli Orkestra Şefleri
Sabah uyandığınızda hissettiğiniz o enerji patlaması, ya da aniden bastıran hüzün... Belki de geceleri bir türlü uyuyamama haliniz ya da hiç beklemediğiniz bir anda hissettiğiniz yoğun açlık hissi. Tüm bunların arkasında ne var biliyor musunuz? Minik ama güçlü kimyasal haberciler: Hormonlar! Hayatımızın her anını, her tepkimizi, her düşüncemizi sessizce yöneten bu moleküller, vücudumuzun gizli orkestra şefleri gibi çalışır. Karmaşık bir senfoni misali, her biri kendi görevini mükemmel bir zamanlamayla yerine getirir. Peki, bu görünmez yöneticiler hayatımızı tam olarak nasıl kontrol ediyor ve biz bu dengeyi nasıl koruyabiliriz? Hormonlar Tam Olarak Nedir ve Nasıl Çalışır? Hormonlar, endokrin bezleri (tiroid, hipofiz, pankreas, böbrek üstü bezleri gibi) tarafından üretilen ve kan dolaşımına salınan kimyasal maddelerdir. Kan yoluyla vücudun farklı bölgelerindeki hedef hücrelere ulaşarak belirli mesajlar iletirler. Bu mesajlar, hücrelerin ne yapması gerektiğini söyler ve vücudun fonksiyonlarını düzenler. Bir tür içsel iletişim ağı gibi düşünebilirsiniz. Büyümeden metabolizmaya, ruh halinden uyku düzenine, üremeden strese kadar pek çok hayati fonksiyonda rol oynarlar. Bu minik moleküllerin doğru miktarda ve doğru zamanda salgılanması, bedenimizin ve zihnimizin sağlıklı kalması için kritik öneme sahiptir. Stres Hormonları: Savaş ya da Kaç Mekanizması Hayatımızdaki en belirgin etkilerden biri stresle başa çıkma şeklimizdir. Kortizol ve adrenalin (epinefrin), acil durumlarda devreye giren 'savaş ya da kaç' hormonlarıdır. Bir tehlike algıladığımızda (bu gerçek bir tehdit de olabilir, sadece zihnimizde yarattığımız bir kaygı da), vücudumuz bu hormonları hızla salgılamaya başlar. Adrenalin, kalp atış hızımızı artırır, kanı kaslarımıza pompalar ve ani bir enerji patlaması sağlar. Kortizol ise kan şekerimizi yükselterek anlık enerji ihtiyacımızı karşılar ve iltihabı baskılamaya yardımcı olur. Bu sayede hızlı tepki vermemizi ve kendimizi korumamızı sağlarlar. Ancak modern yaşamda kronik stres, bu hormonların sürekli yüksek seyretmesine neden olabilir. Bu durum, bağışıklık sistemini zayıflatabilir, uyku sorunlarına, kilo alımına, yüksek tansiyona ve hatta hafıza problemlerine yol açabilir. Mutluluk Hormonları: Ruh Halimizin Yöneticileri Hayatımızı kontrol eden sadece stres değil, aynı zamanda mutluluğumuz, motivasyonumuz ve sosyal bağlarımız da hormonlarla iç içedir. Serotonin, dopamin, oksitosin ve endorfin gibi hormonlar, genellikle 'mutluluk hormonları' olarak bilinir ve ruh halimizi derinden etkiler. Serotonin: Ruh halimizi, uyku düzenimizi, iştahımızı ve sindirimimizi etkileyen önemli bir nörotransmitter ve hormondur. Düşük serotonin seviyeleri depresyon, anksiyete ve uyku bozukluklarıyla ilişkilendirilir. Güneş ışığına maruz kalmak, egzersiz yapmak ve triptofan içeren besinler (örneğin hindi, yumurta, peynir) tüketmek serotonin üretimini destekleyebilir. Dopamin: Ödül ve motivasyon sistemiyle bağlantılıdır. Yeni bir şey öğrendiğimizde, bir hedefimize ulaştığımızda veya bir başarı elde ettiğimizde salgılanır, bize haz ve tatmin duygusu verir. Bu 'iyi hissettiren' hormon, bizi harekete geçmeye ve hedeflerimize ulaşmaya teşvik eder. Bağımlılıklarla da ilişkili olduğu bilinir. Oksitosin: "Aşk hormonu" veya "bağlanma hormonu" olarak da bilinir. Sarılma, dokunma, sosyal bağ kurma ve cinsel yakınlık anlarında salgılanır. Güven duygusunu, empatiyi ve bağlılığı artırır. Annelerde doğum ve emzirme sırasında salgılanarak anne-bebek arasındaki bağı güçlendirir. Sosyal etkileşim ve sevgi dolu ilişkiler oksitosin seviyelerini yükseltir. Endorfin: Vücudun doğal ağrı kesicisidir. Stres veya ağrıya tepki olarak salgılanır, aynı zamanda egzersiz yaparken (özellikle uzun süreli), kahkaha atarken veya baharatlı yiyecekler yerken de salgılanarak bize öfori ve rahatlama hissi verir. 'Koşucu yüksekliği' olarak bilinen durumun arkasındaki ana faktörlerden biridir. Uyku Hormonu: Melatonin Uykumuz da hormonların sıkı kontrolü altında. Melatonin, beynimizdeki epifiz bezi tarafından salgılanan bir hormondur ve vücudumuzun sirkadiyen ritmini, yani uyku-uyanıklık döngüsünü düzenler. Karanlıkta salgılanmaya başlar ve bize uyku vaktinin geldiğini haber verirken, gündüz ışığı ise melatonin üretimini baskılar. Modern yaşamda, ekranlara maruz kalma, düzensiz uyku saatleri veya vardiyalı çalışma gibi faktörler melatonin döngümüzü bozabilir. Bu da uyku kalitemizi doğrudan etkiler, uykuya dalmakta zorlanma, yorgunluk ve genel olarak zayıf bir uyku düzeni ile sonuçlanabilir. Metabolizma Hormonları: Enerji ve Kilo Dengesi Enerjimiz, kilomuz ve genel vücut işleyişimiz de hormonların marifetidir. Tiroid hormonları (T3 ve T4) ve insülin bu süreçte kilit rol oynar. Tiroid Hormonları (T3, T4): Boynumuzda bulunan tiroid bezi tarafından üretilir ve metabolizma hızımızı belirler. Vücudun enerji üretimini, sıcaklığını, kalp atış hızını ve organların çalışma hızını etkiler. Tiroid hormonlarının fazlalığı (hipertiroidi) kilo kaybı, çarpıntı ve anksiyeteye; eksikliği (hipotiroidi) ise kilo alımı, yorgunluk ve depresyona yol açabilir. İnsülin: Pankreas tarafından salgılanan insülin, kan şekerini düzenler. Yemek yedikten sonra kan şekerimiz yükseldiğinde, insülin salgılanır ve hücrelerin glikozu enerji olarak kullanabilmesi için bir anahtar görevi görür. İnsülin direnci veya yetersiz insülin üretimi, tip 2 diyabet gibi ciddi sağlık sorunlarına neden olabilir. Üreme Hormonları: Cinsiyet ve Yaşam Döngüsü Cinsiyetimiz, gelişimimiz, üreme sağlığımız ve hatta bazı davranışlarımız da bu hormonların eseridir. Östrojen ve testosteron, temel üreme hormonlarıdır ve hem kadınlarda hem de erkeklerde farklı oranlarda bulunarak çok çeşitli fonksiyonları etkiler. Östrojen: Kadınlarda temel üreme hormonu olup, adet döngüsü, gebelik, kemik sağlığı, cilt elastikiyeti ve ruh hali üzerinde etkilidir. Ergenlik döneminde ikincil cinsel özelliklerin gelişimini sağlar. Menopoz döneminde östrojen seviyelerinin düşmesi, sıcak basmaları, kemik yoğunluğunda azalma ve ruh hali değişimleri gibi semptomlara yol açabilir. Erkeklerde de az miktarda bulunur ve bazı fizyolojik süreçlerde rol oynar. Testosteron: Erkeklerde temel üreme hormonu olup, kas kütlesi, kemik yoğunluğu, sperm üretimi, libido ve enerji seviyeleri üzerinde etkilidir. Ergenlik döneminde ses kalınlaşması, sakal çıkması gibi ikincil cinsel özelliklerin gelişimini sağlar. Düşük testosteron seviyeleri erkeklerde yorgunluk, libido kaybı ve kas kaybına neden olabilir. Kadınlarda da az miktarda bulunarak enerji, libido ve kemik sağlığına katkıda bulunur. Büyüme Hormonu: Gelişim ve Onarım Adı üzerinde, büyümemizi sağlayan bir hormondur. Hipofiz bezi tarafından salgılanan büyüme hormonu, çocuklukta boy uzamasını, kas ve kemik gelişimini destekler. Yetişkinlikte ise doku onarımı, metabolizma, kas kütlesinin korunması ve genel vücut kompozisyonu üzerinde etkilidir. Özellikle derin uyku evrelerinde salgılanımı artar, bu yüzden kaliteli ve yeterli uyku büyüme hormonu seviyeleri için çok önemlidir. Yaşlandıkça büyüme hormonu seviyeleri doğal olarak düşer, bu da kas kütlesi kaybı ve iyileşme sürelerinin uzaması gibi etkilerle ilişkilendirilir. Hormonal Dengesizlikler ve Etkileri Peki ya bu hassas denge bozulursa? Hormonlarımızın birinin bile fazla ya da az salgılanması, vücudumuzda domino etkisi yaratarak çok çeşitli sağlık sorunlarına yol açabilir. Hormonal dengesizlikler, yaşam kalitemizi önemli ölçüde etkileyebilir. Örneğin, tiroid hormonlarının aşırı veya yetersiz salınımı, ani kilo değişiklikleri, yorgunluk veya kalp sorunlarına neden olabilir. Kadınlarda adet düzensizlikleri, polikistik over sendromu (PCOS), kısırlık gibi durumlar hormonal dengesizliklerle yakından ilişkilidir. Erkeklerde düşük testosteron seviyeleri ise enerji düşüklüğü, libido kaybı, kas kütlesi azalması gibi sorunlara yol açabilir. Ruh halindeki ani değişimler, anksiyete, depresyon, hafıza sorunları ve hatta cilt problemleri de hormonal dalgalanmaların bir sonucu olabilir. Bu nedenle, vücudumuzun gönderdiği sinyallere dikkat etmek ve olası hormonal dengesizlik belirtilerinde bir uzmana danışmak büyük önem taşır. Hormonları Dengelemek İçin Neler Yapabiliriz? Hormonların hayatımızdaki bu denli kritik rolünü anladıktan sonra, "Bu kadar önemli bir sistemin sağlıklı çalışması için neler yapabiliriz?" sorusu akla geliyor. İyi haber şu ki, yaşam tarzı seçimlerimizle hormon dengemizi büyük ölçüde destekleyebiliriz: Dengeli ve Besleyici Beslenme: İşlenmiş gıdalardan, aşırı şekerden ve sağlıksız yağlardan uzak durmak hormonlar için temeldir. Yeterli protein, lif, sağlıklı yağlar (omega-3 gibi) ve bol miktarda sebze-meyve tüketmek, hormon üretimi ve dengesi için gerekli yapı taşlarını sağlar. Düzenli Egzersiz: Haftada en az 150 dakika orta yoğunlukta veya 75 dakika yüksek yoğunlukta egzersiz yapmak, hem stres hormonlarını dengelemeye yardımcı olur hem de mutluluk hormonlarının salgılanmasını teşvik eder. Özellikle direnç egzersizleri ve kardiyo, insülin duyarlılığını artırarak metabolik sağlığı destekler. Kaliteli ve Yeterli Uyku: En az 7-9 saat kesintisiz ve kaliteli uyku, melatonin, büyüme hormonu, kortizol ve diğer birçok hormonun düzenli salgılanması için hayati öneme sahiptir. Yatak odanızı karanlık, serin ve sessiz tutmaya özen gösterin. Stres Yönetimi Teknikleri: Meditasyon, yoga, derin nefes egzersizleri, doğada vakit geçirmek, hobiler edinmek veya sevdiklerinizle zaman geçirmek gibi aktiviteler, kortizol seviyelerini düşürmeye ve genel ruh halinizi iyileştirmeye yardımcı olabilir. Yeterli Su Tüketimi: Vücudun tüm kimyasal süreçleri ve hormonların taşınması için su olmazsa olmazdır. Günde en az 8-10 bardak su içmeye özen gösterin. Toksinlerden Uzak Durma: Bazı kimyasallar (örneğin plastiklerdeki BPA, fitalatlar ve bazı pestisitler) hormon taklitçisi görevi görerek endokrin sistemimizi bozabilir. Mümkün olduğunca doğal ve organik ürünler kullanmaya, plastik kullanımını azaltmaya çalışın. Gerekirse Uzman Desteği: Hormonal dengesizlik belirtileri yaşıyorsanız, bir doktor veya endokrinoloji uzmanına danışmak, doğru teşhis ve tedavi için en doğru adımdır. Unutmayın, hormonlarınızın sağlıklı çalışması, genel sağlığınız, enerji seviyeniz ve yaşam kaliteniz için kritik öneme sahiptir. Vücudunuzun bu gizli orkestra şeflerine iyi bakın, onlar da size harika bir yaşam senfonisi sunsun.
avatar
Emin
9
0
CSS Makaleleri
css-dilinde-yazi-tiplerini-fonts-yonetimi
CSS Dilinde Yazı Tiplerini (Fonts) Yönetimi
Cascading Style Sheets (CSS), web sayfalarının görsel sunumunu kontrol eden temel bir dildir. Bu kapsamda, bir web sayfasının okunabilirliğini ve estetiğini doğrudan etkileyen yazı tiplerinin (fonts) yönetimi kritik bir rol oynar. CSS, geliştiricilere yazı tiplerini tanımlama, boyutlandırma, ağırlıklandırma ve stillendirme konusunda geniş bir kontrol mekanizması sunar. Bu makale, CSS dilinde yazı tipi özelliklerinin kullanımı, sözdizimi ve pratik uygulamaları üzerine odaklanmaktadır. Sözdizimi CSS'te yazı tipi özelliklerini tanımlamak için birden fazla bireysel özellik kullanılabileceği gibi, tüm bu özellikleri tek bir deklarasyonda birleştiren bir kısayol (shorthand) özelliği olan font da mevcuttur. Bireysel özellikler şunlardır: font-family: Yazı tipinin adını veya genel bir ailesini belirtir. font-size: Yazı tipinin boyutunu ayarlar. font-weight: Yazı tipinin kalınlığını (ağırlığını) belirler. font-style: Yazı tipinin stilini (normal, italik, eğik) belirler. line-height: Satır yüksekliğini ayarlar. font-variant: Yazı tipinin küçük harf varyantlarını (örneğin, küçük büyük harfler) etkinleştirir. font-stretch: Yazı tipinin genişliğini ayarlar (yalnızca belirli yazı tiplerinde desteklenir). Kısayol font özelliği ise aşağıdaki sırayla değerleri kabul eder: font: / ; softmush.com Detaylı Açıklama Her bir yazı tipi özelliğinin işlevi ve kabul ettiği değerler aşağıda detaylandırılmıştır: font-family Bu özellik, elementin içeriği için tercih edilen yazı tipini veya yazı tipi ailesini belirtir. Birden fazla yazı tipi belirterek bir yedekleme (fallback) zinciri oluşturmak önemlidir. Tarayıcı, listedeki ilk mevcut yazı tipini kullanacaktır. p { font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; } softmush.com Genel yazı tipi aileleri (serif, sans-serif, monospace, cursive, fantasy) her zaman listenin sonunda yer almalıdır. font-size Yazı tipinin boyutunu belirler. Çeşitli birimler kullanılabilir: Mutlak Boyutlar: xx-small, x-small, small, medium, large, x-large, xx-large. Kullanıcının varsayılan yazı tipi boyutuna göre değişir. Göreceli Boyutlar: smaller, larger. Ebeveyn elementin yazı tipi boyutuna göre ayarlama yapar. Uzunluk Birimleri: px (piksel), em (ebeveynin yazı tipi boyutuna göre), rem (kök elementin yazı tipi boyutuna göre), vw (viewport genişliğine göre), vh (viewport yüksekliğine göre). Esneklik ve erişilebilirlik için em ve rem tercih edilir. Yüzde: %. Ebeveyn elementin yazı tipi boyutuna göre yüzde cinsinden belirtir. h1 { font-size: 2.5rem; /* Kök elementin font boyutunun 2.5 katı */ } p { font-size: 16px; /* Sabit piksel boyutu */ } softmush.com font-weight Yazı tipinin kalınlığını (ağırlığını) ayarlar. Kabul ettiği değerler şunlardır: Anahtar Kelimeler: normal (genellikle 400), bold (genellikle 700). Sayısal Değerler: 100'den 900'e kadar, 100'ün katları şeklinde. Tüm yazı tipleri bu aralıktaki her ağırlığı desteklemeyebilir. Göreceli Değerler: lighter, bolder. Ebeveyn elementin ağırlığına göre. strong { font-weight: bold; } .heading-light { font-weight: 300; } softmush.com font-style Yazı tipinin stilini belirler. Yaygın değerler: normal: Normal metin. italic: İtalik metin. Yazı tipinin gerçek italik versiyonu varsa kullanılır. oblique: Eğik metin. Yazı tipinin gerçek italik versiyonu yoksa, normal metin eğik bir şekilde taklit edilir. em { font-style: italic; } softmush.com line-height Metin satırları arasındaki dikey boşluğu ayarlar. Değerler: Sayısal Değer: Örnek: 1.5. Elementin font-size değerinin 1.5 katı anlamına gelir. En çok tercih edilen yöntemdir. Uzunluk Birimi: Örnek: 20px, 1.2em. Yüzde: Örnek: 150%. Elementin font-size değerinin yüzdesi. normal: Tarayıcının varsayılan değeri. p { line-height: 1.6; /* Font boyutunun 1.6 katı */ } softmush.com font-variant Yazı tipinin küçük büyük harf (small-caps) gibi özel varyantlarını belirler. En yaygın değeri small-caps'dir. .caps-text { font-variant: small-caps; } softmush.com Örnekler Aşağıdaki örnekler, farklı yazı tipi özelliklerinin CSS'te nasıl kullanıldığını göstermektedir. Örnek 1: Temel Yazı Tipi Tanımlaması /* HTML */ Bu paragraf, temel yazı tipi özellikleriyle stilize edilmiştir. /* CSS */ .basic-text { font-family: Georgia, serif; font-size: 18px; font-weight: normal; font-style: normal; line-height: 1.5; color: #333; } softmush.com Örnek 2: Kısayol font Özelliği Kullanımı /* HTML */ Kısayol ile Stilize Edilmiş Başlık /* CSS */ .shorthand-heading { /* font-style | font-variant | font-weight | font-size/line-height | font-family */ font: italic small-caps bold 2em/1.2 "Times New Roman", Times, serif; color: #0056b3; } softmush.com Örnek 3: Web Fontu Entegrasyonu (Google Fonts) Harici bir kaynaktan yazı tipi kullanmak için önce bu yazı tipini projenize dahil etmeniz gerekir. Aşağıdaki örnekte Google Fonts'tan 'Roboto' yazı tipinin nasıl kullanılacağı gösterilmiştir. /* HTML (head bölümüne eklenir) */ Bu metin, harici bir web fontu olan Roboto ile stilize edilmiştir. /* CSS */ .webfont-text { font-family: 'Roboto', sans-serif; font-size: 1.2rem; font-weight: 400; line-height: 1.7; color: #555; } softmush.com Önemli Notlar Yedekleme Yazı Tipleri: font-family özelliğinde her zaman genel bir yazı tipi ailesiyle (serif, sans-serif, monospace) biten bir yedekleme zinciri kullanın. Bu, kullanıcının sisteminde belirtilen ilk yazı tipi bulunamazsa, tarayıcının benzer bir alternatif bulmasını sağlar. Erişilebilirlik ve Esneklik: Yazı tipi boyutları için piksel (px) yerine em veya rem gibi göreceli birimler kullanmak, kullanıcının tarayıcı ayarlarını veya cihazının ekran boyutunu dikkate alarak daha iyi bir erişilebilirlik ve duyarlılık sağlar. Kısayol Özelliği Sırası: font kısayol özelliğini kullanırken, font-size ve line-height değerlerinin / ile ayrılması ve font-family'nin her zaman en sonda yer alması gerektiğini unutmayın. Diğer özellikler (font-style, font-variant, font-weight) herhangi bir sırayla belirtilebilir ancak genellikle yukarıda belirtilen sıra tercih edilir. Web Font Performansı: Harici web fontları kullanırken, web sitesinin yükleme süresini etkileyebilecekleri için font dosya boyutlarını optimize etmeye dikkat edin. Yalnızca ihtiyacınız olan ağırlıkları ve stilleri yükleyin. Desteklenmeyen Ağırlıklar/Stiller: Bir yazı tipi belirli bir ağırlığı (örneğin, 300 veya 900) veya stili (örneğin, italik) desteklemiyorsa, tarayıcı mevcut en yakın ağırlığı veya stili kullanır veya bir taklit (fake bold/italic) oluşturabilir. En iyi sonuçlar için, kullanmayı planladığınız tüm ağırlık ve stillerin yazı tipi dosyasında mevcut olduğundan emin olun.
avatar
Emin
8
0
HTML Makaleleri
html-dilinde-favicon-kullanimi-kapsamli-rehber
HTML Dilinde Favicon Kullanımı: Kapsamlı Rehber
Favicon, "favori simge" kelimelerinin kısaltması olup, bir web sitesini temsil eden küçük bir grafik simgesidir. Tarayıcı sekmelerinde, sık kullanılanlar listesinde, arama motoru sonuçlarında ve mobil cihazların ana ekranlarında görünerek web sitenizin markalaşmasında ve tanınabilirliğinde kritik bir rol oynar. Bu rehber, bir HTML belgesine favicon entegrasyonunun teknik detaylarını ve en iyi uygulamalarını adım adım açıklamaktadır. Temel Sözdizimi Bir HTML belgesine favicon eklemek için, genellikle belgenin bölümüne bir etiketi yerleştirilir. Bu etiket, tarayıcıya favicon dosyasının nerede bulunduğunu ve hangi türde olduğunu bildirir. softmush.com Detaylı Açıklama Yukarıdaki sözdizimindeki her bir nitelik (attribute) belirli bir amaca hizmet eder: : Bu etiket, mevcut belge ile harici bir kaynak arasındaki ilişkiyi belirtmek için kullanılır. Favicon durumunda, bu harici kaynak sitenizin simge dosyasıdır. rel="icon": rel (ilişki) niteliği, bağlanan kaynağın geçerli belgeyle olan ilişkisini tanımlar. "icon" değeri, bağlanan URL'nin belge için bir simge olduğunu gösterir. Eski tarayıcılarla uyumluluk için bazen rel="shortcut icon" da kullanılır, ancak modern uygulamalarda rel="icon" yeterlidir. type="image/x-icon": type niteliği, bağlanan dosyanın MIME türünü belirtir. Geleneksel favicon'lar için image/x-icon kullanılır. PNG formatındaki favicon'lar için image/png, GIF formatı için image/gif veya SVG için image/svg+xml gibi değerler de kullanılabilir. href="/favicon.ico": href niteliği, favicon dosyasının URL'sini belirtir. Bu, bir mutlak URL (örn: https://www.example.com/favicon.ico) veya bir göreli URL (örn: /favicon.ico veya ./images/favicon.png) olabilir. Göreceli yollar genellikle daha esnektir. Pratik Kullanım Örnekleri Aşağıdaki örnekler, farklı senaryolarda favicon kullanımını göstermektedir. Örnek 1: Geleneksel .ico Favicon Kullanımı Bu, en yaygın ve geniş ölçüde desteklenen yöntemdir. Favicon dosyası genellikle web sitesinin kök dizininde bulunur. softmush.com Örnek 2: PNG Formatında Favicon Kullanımı PNG formatı, daha iyi şeffaflık ve renk desteği sunar ve modern tarayıcılarda geniş çapta desteklenir. Dosya yolu, sitenizin dizin yapısına göre ayarlanmalıdır. softmush.com Örnek 3: Farklı Boyutlarda Favicon Sağlama Birden fazla etiketi kullanarak, tarayıcının farklı cihazlar veya bağlamlar için en uygun simgeyi seçmesine olanak tanıyabilirsiniz. sizes niteliği, simgenin piksel cinsinden boyutlarını belirtir. softmush.com Önemli Notlar Konumlandırma: Favicon etiketi daima HTML belgesinin bölümünde yer almalıdır. Bu, tarayıcının sayfayı yüklemeden önce simgeyi keşfedip görüntülemesini sağlar. Dosya Biçimleri: En yaygın ve uyumlu favicon biçimi .ico'dur. Ancak, .png ve .gif gibi diğer biçimler de modern tarayıcılar tarafından geniş ölçüde desteklenir. SVG formatı (image/svg+xml) ise ölçeklenebilirlik avantajı sunar ancak tüm tarayıcılarda tam destek henüz yaygın değildir. Tarayıcı Önbelleği: Tarayıcılar favicon'ları agresif bir şekilde önbelleğe alır. Bir favicon'u güncellediğinizde, değişikliklerin hemen görünmeyebileceğini unutmayın. Tarayıcı önbelleğini temizlemek veya yeni bir dosya adı (örn: favicon-v2.ico) kullanmak sorunu çözebilir. Yol Belirtimi: Favicon dosyasının yolunu (href niteliği) doğru bir şekilde belirttiğinizden emin olun. Yanlış bir yol, simgenin yüklenmemesine neden olur. Varsayılan Davranış: Eğer herhangi bir etiketi belirtilmezse, çoğu tarayıcı otomatik olarak web sitesinin kök dizininde favicon.ico adında bir dosya arar. Çoklu Favicon'lar: Birden fazla etiketi kullanarak farklı boyutlarda veya formatlarda simgeler sağlayabilirsiniz. Tarayıcı, kullanıcının cihazına ve tarayıcı ayarlarına en uygun olanı otomatik olarak seçecektir.
avatar
Emin
9
0
PHP Makaleleri
php-dilinde-uretecler-generators-kullanimi
PHP Dilinde Üreteçler (Generators) Kullanımı
PHP dilinde üreteçler (generators), özellikle büyük veri setleriyle çalışırken bellek tüketimini ve performansı optimize etmek amacıyla tasarlanmış güçlü bir özelliktir. Geleneksel olarak, bir dizi veya koleksiyon üzerinde döngü oluşturmak için tüm veriyi belleğe yüklemeniz gerekebilir. Ancak üreteçler, veriyi talep üzerine (on-demand) tek tek üreterek bu sorunu ortadan kaldırır. Bu sayede, tüm veri setini belleğe yüklemeden üzerinde yinelenebilir bir yapı oluşturulur ve böylece çok daha verimli bir kaynak kullanımı sağlanır. Üreteçler, özel bir tür yineleyici (iterator) olarak işlev görür ve `yield` anahtar kelimesi ile tanımlanır. Sözdizimi PHP'de bir üreteç fonksiyonu tanımlamak, standart bir fonksiyona benzer, ancak değer döndürmek için `return` yerine `yield` anahtar kelimesi kullanılır. function generatorFunction(): Generator {     yield $value;     // veya     yield $key => $value; } Detaylı Açıklama Yukarıdaki sözdiziminde yer alan ana bileşenler ve işlevleri aşağıda açıklanmıştır: function generatorFunction(): Generator: Bu kısım, bir üreteç fonksiyonunun tanımlandığını belirtir. Fonksiyon adı herhangi bir geçerli PHP fonksiyon adı olabilir. PHP 7.0 ve sonrası için dönüş tipi ipucu olarak Generator kullanılabilir, bu fonksiyonun bir üreteç döndüreceğini açıkça belirtir. yield $value;: Üreteçlerin kalbinde yer alan anahtar kelimedir. Bir fonksiyon içerisinde yield ifadesi kullanıldığında, PHP bu fonksiyonu otomatik olarak bir üreteç fonksiyonu olarak tanır. yield, fonksiyonun yürütülmesini duraklatır, belirtilen $value değerini çağırana geri döndürür ve fonksiyonun mevcut durumunu (yerel değişkenler, yürütme noktası vb.) korur. Bir sonraki değer istendiğinde, fonksiyon kaldığı yerden yürütülmeye devam eder. yield $key => $value;: yield ifadesi, anahtar-değer çiftleri döndürmek için de kullanılabilir, tıpkı bir dizideki gibi. Bu, özellikle değerlerin belirli bir anahtarla ilişkilendirilmesi gereken durumlarda faydalıdır. Bir üreteç fonksiyonu çağrıldığında, kodu hemen yürütülmez. Bunun yerine, bir Generator nesnesi döndürür. Fonksiyonun kodu ancak bu nesne üzerinde döngüye başlandığında (örneğin bir foreach döngüsü ile) adım adım yürütülür ve yield ifadeleri aracılığıyla değerler üretilir. Pratik Kullanım Örnekleri Aşağıdaki örnekler, üreteçlerin farklı senaryolarda nasıl kullanılabileceğini göstermektedir. Örnek 1: Basit Sayı Dizisi Üreteci Bu örnek, belirli bir aralıktaki sayıları üreten basit bir üreteç fonksiyonunu göstermektedir. softmush.com Örnek 2: Büyük Dosyaları Satır Satır Okuma Büyük bir metin dosyasını belleğe tamamen yüklemeden satır satır okumak için üreteçler idealdir. softmush.com Örnek 3: Veritabanı Kayıtlarını Bellek Dostu Şekilde İşleme Bir veritabanından çok sayıda kayıt çekerken, tüm sonuç setini belleğe yüklemek yerine üreteçler kullanarak kayıtları tek tek işleyebilirsiniz. (Bu örnek bir veritabanı bağlantısı gerektirdiğinden basitleştirilmiştir.) softmush.com Önemli Notlar ve İpuçları Üreteçler hakkında bilmeniz gereken bazı önemli noktalar ve ipuçları aşağıda listelenmiştir: Bellek Verimliliği: Üreteçlerin en büyük avantajı bellek verimliliğidir. Tüm veri setini belleğe yüklemek yerine, değerleri talep üzerine ürettikleri için büyük dosyaları veya veritabanı sonuçlarını işlerken çok daha az bellek kullanırlar. Tek Kullanımlık Yapı: PHP'deki üreteçler, ileriye dönük (forward-only) yineleyicilerdir. Bir üreteç üzerinde döngü tamamlandığında, genellikle en başa dönüp tekrar yinelemek mümkün değildir. Eğer tekrar kullanım gerekiyorsa, üreteç fonksiyonunu tekrar çağırmanız gerekir. yield from Kullanımı: PHP 7.0 ile birlikte gelen yield from ifadesi, bir üreteçten başka bir üretece veya Traversable nesneye yetki devretmeyi sağlar. Bu, birden fazla iç içe üreteci tek bir yerden yönetmek için kullanışlıdır.
avatar
Emin
9
0
Python Makaleleri
python-dilinde-python-sets-kullanimi
Python Dilinde Python Sets Kullanımı
Python programlama dilinde, verileri etkili bir şekilde depolamak ve yönetmek için çeşitli yerleşik veri yapıları bulunmaktadır. Bu yapılardan biri olan set, benzersiz elemanlardan oluşan, sırasız ve değiştirilebilir bir koleksiyondur. set'ler, özellikle bir koleksiyondaki yinelenen değerleri kaldırmak, üyelik testleri yapmak veya iki set arasındaki matematiksel küme işlemlerini (birleşim, kesişim, fark vb.) gerçekleştirmek için son derece kullanışlıdır. Bu makale, Python set'lerinin temel kullanımını, sözdizimini ve pratik uygulamalarını detaylandıracaktır. Sözdizimi set'ler, süslü parantezler {} kullanılarak veya set() yapıcı fonksiyonu aracılığıyla oluşturulabilir. Boş bir set oluşturmak için set() fonksiyonu kullanılmalıdır, çünkü {} boş bir sözlük (dict) oluşturur. Detaylı Açıklama Bir set oluşturmanın iki ana yolu vardır: Literaller Kullanarak: Virgülle ayrılmış elemanları süslü parantezler içine alarak bir set oluşturabilirsiniz. Örnek: {"elma", "muz", "kiraz"}. Bu yöntem, başlangıçta elemanları olan bir set oluşturmak için idealdir. set() Yapıcı Fonksiyonunu Kullanarak: Bir iterable (örneğin, liste, tuple, string) bir set'e dönüştürmek için set() fonksiyonunu kullanabilirsiniz. Örnek: set(["elma", "muz"]). Boş bir set oluşturmak için yalnızca set() kullanılmalıdır. {} kullanımı boş bir sözlük oluşturur. set'lerin temel özellikleri şunlardır: Benzersiz Elemanlar: Bir set yalnızca benzersiz elemanlar içerebilir. Yinelenen elemanlar eklenmeye çalışıldığında, set bunları otomatik olarak görmezden gelir. Sırasız: set elemanlarının belirli bir sırası yoktur. Her çalıştırmada elemanların sırası değişebilir ve indeksleme yoluyla elemanlara erişilemez. Değiştirilebilir (Mutable): Bir set oluşturulduktan sonra eleman ekleyebilir veya silebilirsiniz. Ancak set'in kendisi değiştirilebilirken, elemanları hashable olmalıdır. Yani, set elemanları listeler veya başka set'ler gibi değiştirilebilir nesneler olamaz. Örnekler 1. set Oluşturma ve Yinelenen Elemanları Kaldırma: # Süslü parantezlerle set oluşturma meyveler = {"elma", "muz", "kiraz", "elma"} print(f"Meyveler seti: {meyveler}") # set() fonksiyonu ile liste üzerinden set oluşturma sayilar_listesi = [1, 2, 2, 3, 4, 4, 5] sayilar_seti = set(sayilar_listesi) print(f"Sayılar seti: {sayilar_seti}") # Boş set oluşturma bos_set = set() print(f"Boş set: {bos_set}") # Hata: {} boş bir sözlük oluşturur bos_sozluk = {} print(f"Boş süslü parantez: {type(bos_sozluk)}") softmush.com 2. set Elemanlarına Ekleme ve Silme: renkler = {"kırmızı", "mavi"} print(f"Orijinal renkler seti: {renkler}") # add() metodu ile eleman ekleme renkler.add("yeşil") print(f"add() sonrası: {renkler}") # Mevcut bir elemanı tekrar ekleme (değişiklik olmaz) renkler.add("kırmızı") print(f"Tekrar add() sonrası: {renkler}") # update() metodu ile birden fazla eleman ekleme (iterable kullanarak) renkler.update(["sarı", "mor", "mavi"]) print(f"update() sonrası: {renkler}") # remove() metodu ile eleman silme (eleman yoksa KeyError verir) renkler.remove("mavi") print(f"remove() sonrası: {renkler}") # discard() metodu ile eleman silme (eleman yoksa hata vermez) renkler.discard("turuncu") print(f"discard() sonrası (olmayan eleman): {renkler}") # pop() metodu ile rastgele bir eleman silme ve döndürme silinen_renk = renkler.pop() print(f"pop() ile silinen: {silinen_renk}, Kalan renkler: {renkler}") # clear() metodu ile tüm elemanları silme renkler.clear() print(f"clear() sonrası: {renkler}") softmush.com 3. set Üzerinde Küme İşlemleri: set1 = {1, 2, 3, 4, 5} set2 = {4, 5, 6, 7, 8} # Birleşim (Union): | operatörü veya union() metodu birlesim = set1 | set2 print(f"Birleşim: {birlesim}") # veya set1.union(set2) # Kesişim (Intersection): & operatörü veya intersection() metodu kesisim = set1 & set2 print(f"Kesişim: {kesisim}") # veya set1.intersection(set2) # Fark (Difference): - operatörü veya difference() metodu fark1 = set1 - set2 # set1'de olup set2'de olmayanlar print(f"Set1 - Set2 farkı: {fark1}") # veya set1.difference(set2) fark2 = set2 - set1 # set2'de olup set1'de olmayanlar print(f"Set2 - Set1 farkı: {fark2}") # veya set2.difference(set1) # Simetrik Fark (Symmetric Difference): ^ operatörü veya symmetric_difference() metodu # Her iki sette de olup kesişimde olmayanlar simetrik_fark = set1 ^ set2 print(f"Simetrik Fark: {simetrik_fark}") # veya set1.symmetric_difference(set2) # Alt Küme (Subset) ve Üst Küme (Superset) Testleri set_a = {1, 2} set_b = {1, 2, 3, 4} print(f"Set A, Set B'nin alt kümesi mi? {set_a.issubset(set_b)}") print(f"Set B, Set A'nın üst kümesi mi? {set_b.issuperset(set_a)}") softmush.com 4. set Üyelik Testi: harfler = {'a', 'b', 'c'} print(f"'a' harfler setinde mi? {'a' in harfler}") print(f"'d' harfler setinde mi? {'d' in harfler}") softmush.com Önemli Notlar Boş set Oluşturma: Boş bir set oluşturmak için mutlaka set() fonksiyonunu kullanın. {} boş bir sözlük oluşturur. Sırasız Yapı: set'ler sırasızdır. Elemanların eklenme sırası korunmaz ve indeksleme (my_set[0] gibi) kullanılamaz. Değiştirilemez Elemanlar: set elemanları hashable (değiştirilemez) olmalıdır. Bu nedenle, list'ler, dict'ler veya başka set'ler doğrudan bir set'in elemanı olamaz. Eğer değiştirilemez bir set'e ihtiyacınız varsa frozenset kullanabilirsiniz. Performans: set'ler, elemanların benzersizliğini kontrol etmek ve üyelik testleri (in operatörü) için yüksek performans sunar, özellikle büyük veri kümelerinde. Kullanım Alanları: Tekrarlanan elemanları kaldırma, veri temizleme, iki koleksiyon arasındaki ortak veya farklı elemanları bulma gibi senaryolarda set'ler oldukça etkilidir.
avatar
Emin
19
0
SQL Makaleleri
sql-select-top-kullanimi-sorgu-sonuclarini-sinirlandirma
SQL SELECT TOP Kullanımı: Sorgu Sonuçlarını Sınırlandırma
Veritabanlarından veri çekerken, özellikle büyük veri kümeleriyle çalışırken, yalnızca belirli sayıda veya oranda kaydı almak sıklıkla gerekli olur. SQL'deki SELECT TOP ifadesi, bu ihtiyacı karşılamak üzere tasarlanmış güçlü bir araçtır ve sorgu sonuçlarını belirli bir limit dahilinde döndürmeyi sağlar. Bu özellik, performans optimizasyonundan kullanıcı arayüzü kısıtlamalarına kadar çeşitli senaryolarda kritik bir rol oynar. Sözdizimi SELECT TOP ifadesinin genel sözdizimi aşağıdaki gibidir: SELECT TOP sayı | yüzde [PERCENT] FROM tablo_adı WHERE koşul ORDER BY sütun_adı [ASC|DESC];softmush.com Detaylı Açıklama SELECT TOP ifadesinin her bir bileşeni belirli bir amaca hizmet eder: SELECT: Veritabanından veri çekmek için kullanılan temel SQL komutudur. TOP sayı: Sorgu sonucundan kaç adet kaydın döndürüleceğini belirten bir tam sayıdır. Örneğin, TOP 10 ilk 10 kaydı döndürür. TOP yüzde PERCENT: Sorgu sonucundan döndürülecek kayıtların toplam kayıt sayısına göre yüzdesini belirtir. Örneğin, TOP 5 PERCENT toplam kayıtların ilk %5'ini döndürür. FROM tablo_adı: Verilerin çekileceği tablonun adını belirtir. WHERE koşul: İsteğe bağlı bir yan tümcedir. Belirtilen koşulları karşılayan kayıtları filtrelemek için kullanılır. Eğer bir WHERE koşulu kullanılmazsa, TOP tüm tablodaki kayıtlar üzerinde işlem yapar. ORDER BY sütun_adı [ASC|DESC]: İsteğe bağlı ancak kritik bir yan tümcedir. Kayıtların hangi kritere göre sıralanacağını ve dolayısıyla hangi "ilk" kayıtların seçileceğini belirler. ASC (artan) veya DESC (azalan) sıralama yönünü belirtir. Eğer ORDER BY kullanılmazsa, döndürülen "ilk" kayıtlar veritabanının fiziksel depolama sırasına göre veya sorgu planına göre belirlenir ki bu da tutarsız sonuçlara yol açabilir. TOP ile birlikte ORDER BY kullanımı, tutarlı ve anlamlı sonuçlar elde etmek için şiddetle tavsiye edilir. Pratik Kullanım Örnekleri Aşağıdaki örneklerde, bir "Ürünler" tablosu olduğunu varsayalım. Bu tabloda ProductID, ProductName, Price ve StockQuantity gibi sütunlar bulunmaktadır. **Örnek 1: En pahalı 5 ürünü listeleme.** Bu örnek, ürünleri fiyata göre azalan sırada sıralar ve en pahalı ilk 5 ürünü seçer. SELECT TOP 5 ProductName, Price FROM Ürünler ORDER BY Price DESC;softmush.com **Örnek 2: Stoğu en az olan %10 ürünü listeleme.** Bu örnek, ürünleri stok miktarına göre artan sırada sıralar ve toplam ürün sayısının %10'una karşılık gelen stoğu en az ürünleri döndürür. SELECT TOP 10 PERCENT ProductName, StockQuantity FROM Ürünler ORDER BY StockQuantity ASC;softmush.com **Örnek 3: Belirli bir kategoriye ait en yeni 3 ürünü listeleme.** Bu örnek için "Ürünler" tablosunda bir CategoryID ve AddedDate sütunu olduğunu varsayalım. Koşul olarak CategoryID = 1 olan ürünleri filtreler, eklenme tarihine göre azalan sırada sıralar ve en yeni ilk 3 ürünü seçer. SELECT TOP 3 ProductName, AddedDate FROM Ürünler WHERE CategoryID = 1 ORDER BY AddedDate DESC;softmush.com Önemli Notlar Veritabanı Uyumluluğu: SELECT TOP ifadesi özellikle SQL Server ve MS Access gibi veritabanlarında yaygın olarak kullanılır. Diğer veritabanı sistemlerinde benzer işlevsellik farklı sözdizimleri ile sağlanır: MySQL: LIMIT anahtar kelimesi (örneğin: SELECT sütunlar FROM tablo LIMIT 10;) PostgreSQL: LIMIT anahtar kelimesi (örneğin: SELECT sütunlar FROM tablo LIMIT 10;) Oracle: ROWNUM sözde sütunu (eski versiyonlar) veya FETCH FIRST N ROWS ONLY (Oracle 12c ve sonrası) kullanılır (örneğin: SELECT sütunlar FROM tablo FETCH FIRST 10 ROWS ONLY;) ORDER BY Kullanımının Önemi: TOP ifadesi ile birlikte ORDER BY kullanmamak, veritabanının kayıtları fiziksel olarak nasıl depoladığına veya sorgu planına bağlı olarak rastgele veya tutarsız sonuçlar almanıza neden olabilir. Tutarlı ve öngörülebilir sonuçlar için mutlaka ORDER BY kullanın. Performans: Büyük tablolarda TOP ifadesini kullanmak, sorgunun performansını artırabilir çünkü veritabanının tüm kayıtları işlemesi yerine yalnızca belirli sayıda kaydı işlemesini sağlar. Ancak, karmaşık WHERE ve ORDER BY yan tümceleriyle birleştiğinde performans üzerinde ek yükler oluşabilir. Eşit Değerler (TIES): Bazı veritabanı sistemlerinde (örneğin SQL Server), TOP N WITH TIES sözdizimi ile, sıralama kriterine göre son kaydın aynı değere sahip olduğu ek kayıtları da dahil edebilirsiniz. Bu, TOP limitine ulaşılsa bile, son sıradaki değerle eşleşen tüm kayıtların döndürülmesini sağlar.
avatar
Emin
15
0
HTML Makaleleri
html-dilinde-resimlerin-img-etiketi-detayli-kullanimi
HTML Dilinde Resimlerin (`` Etiketi) Detaylı Kullanımı
Web sayfaları, metinsel içeriğin yanı sıra görsel unsurlarla zenginleştirildiğinde kullanıcı deneyimi açısından önemli bir değer kazanır. HTML'de resimleri bir web sayfasına entegre etmek için kullanılan temel etiket, kendisi kapalı bir etiket olan etiketidir. Bu etiket, sayfaya harici bir görsel kaynağı yerleştirmek için kullanılır ve web içeriğinin estetik çekiciliğini ve bilgilendirici gücünü artırır. Bu makale, etiketinin sözdizimini, temel niteliklerini ve pratik kullanım örneklerini detaylı bir şekilde inceleyerek, resimlerin web'e doğru ve etkili bir şekilde nasıl dahil edileceğine dair kapsamlı bir rehber sunmaktadır. Sözdizimi etiketi, bir görselin kaynağını ve alternatif metnini belirtmek için ana nitelikleri kullanır. Temel kullanım yapısı aşağıdaki gibidir: softmush.com Detaylı Açıklama etiketinin işlevselliği, çeşitli nitelikler aracılığıyla genişletilir. En yaygın ve zorunlu nitelikler aşağıda açıklanmıştır: src (Source - Kaynak): Bu nitelik, görüntünün dosya yolunu veya URL'sini belirtir. Tarayıcı, bu yoldan görüntüyü alır ve sayfada görüntüler. Mutlak (https:// ile başlayan) veya göreceli (aynı sunucudaki bir klasöre işaret eden) yollar kullanılabilir. Bu, etiketi için zorunlu bir niteliktir. alt (Alternative Text - Alternatif Metin): Bu nitelik, resmin içeriğini veya işlevini tanımlayan metinsel bir açıklama sağlar. Resim yüklenemediğinde, ekran okuyucular tarafından erişilebilirlik için veya arama motorları tarafından içeriği anlamak için kullanılır. Erişilebilirlik ve SEO için kritik öneme sahiptir. width (Genişlik): Görüntünün genişliğini piksel cinsinden (varsayılan) veya yüzde olarak belirtir. Yalnızca width="200" yazmak 200 piksel anlamına gelir. height (Yükseklik): Görüntünün yüksekliğini piksel cinsinden (varsayılan) veya yüzde olarak belirtir. Yalnızca height="150" yazmak 150 piksel anlamına gelir. loading: Tarayıcının görüntüyü nasıl yüklemesi gerektiğini belirten bir ipucu sunar. Değerleri "lazy" (görüntü görüntüleme alanına yaklaştığında yükle) veya "eager" (hemen yükle) olabilir. Performans optimizasyonu için önemlidir. srcset: Farklı çözünürlük veya ekran boyutları için birden fazla görüntü kaynağı belirtmenizi sağlar. Tarayıcı, kullanıcının cihazına en uygun görüntüyü seçer. Duyarlı (responsive) tasarım için vazgeçilmezdir. sizes: srcset ile birlikte kullanıldığında, tarayıcıya görüntünün farklı görüntüleme alanlarında ne kadar yer kaplayacağını bildirir. Bu, tarayıcının srcset'ten en uygun görüntüyü seçmesine yardımcı olur. Pratik Kullanım Örnekleri Aşağıdaki örnekler, etiketinin çeşitli senaryolarda nasıl kullanılabileceğini göstermektedir. 1. Temel Görüntü Ekleme (Göreli Yol): Bu örnek, aynı dizindeki bir resmi sayfaya ekler. softmush.com 2. Harici Bir Kaynaktan Görüntü Ekleme: Bir CDN'den veya başka bir web sitesinden bir görüntü yükler. softmush.com 3. Duyarlı (Responsive) Görüntü Kullanımı (srcset ve sizes ile): Tarayıcının farklı ekran boyutlarına göre en uygun görüntüyü seçmesini sağlar. softmush.com 4. Gecikmeli Yükleme (Lazy Loading): Görüntünün yalnızca kullanıcı görüntüleme alanına yaklaştığında yüklenmesini sağlar, bu da sayfa performansını artırır. softmush.com 5. ve ile Resim ve Açıklama: Bir resmi ve ilişkili başlığını semantik olarak gruplandırmak için kullanılır. Akdeniz'de muhteşem bir günbatımı görüntüsü. softmush.com Önemli Notlar alt Niteliklerinin Önemi: Her etiketi bir alt niteliği içermelidir. Bu, hem erişilebilirlik (ekran okuyucular için) hem de SEO (arama motorlarının resim içeriğini anlaması için) açısından kritik öneme sahiptir. Dekoratif resimler için alt="" boş bırakılabilir, ancak yine de nitelik mevcut olmalıdır. Dosya Biçimleri: Yaygın olarak kullanılan resim formatları JPEG (fotoğraflar için), PNG (saydamlık gerektiren görseller için) ve GIF (animasyonlar için) ve WebP (genel olarak daha iyi sıkıştırma ve performans için) ve SVG (vektörel grafikler için) şeklindedir. Performans Optimizasyonu: Büyük boyutlu resimler sayfa yükleme süresini artırabilir. Resimleri web için optimize etmek (sıkıştırmak ve doğru boyutlandırmak) önemlidir. loading="lazy" kullanmak da performansı artırabilir. Boyutlandırma (width ve height): Tarayıcının resim için ayrılacak alanı önceden bilmesi için width ve height niteliklerini her zaman kullanmak iyi bir uygulamadır. Bu, "Cumulative Layout Shift" (CLS) gibi görsel istikrarsızlık sorunlarını önlemeye yardımcı olur. Duyarlı Tasarım: Modern web geliştirmede resimlerin farklı ekran boyutlarına ve çözünürlüklerine uyum sağlaması çok önemlidir. srcset ve sizes nitelikleri bu ihtiyacı karşılamak için tasarlanmıştır.
avatar
Emin
8
0
Python Makaleleri
python-dilinde-tuple-kullanimi-sabit-veri-yapilari
Python Dilinde Tuple Kullanımı: Sabit Veri Yapıları
Python programlama dilinde veri yapıları, programların veriyi düzenli ve etkin bir şekilde depolamasını ve işlemesini sağlar. Bu veri yapılarından biri olan tuple (demet), değiştirilemez (immutable) ve sıralı (ordered) bir koleksiyon türüdür. Listeler gibi diğer sıralı koleksiyonların aksine, bir tuple oluşturulduktan sonra elemanları değiştirilemez, eklenemez veya silinemez. Bu özelliği, tuple'ları sabit veri setlerini veya fonksiyonlardan birden fazla değer döndürmek gibi senaryolarda ideal bir seçim haline getirir. Python Tuple: Temel Sözdizimi Bir tuple, parantez () kullanılarak ve elemanları virgülle , ayrılarak oluşturulur. Elemanlar farklı veri tiplerinden olabilir. # Boş bir tuple oluşturma bos_tuple = () # Sayılardan oluşan bir tuple sayi_tuple = (1, 2, 3, 4, 5) # Farklı veri tiplerinden oluşan bir tuple karisik_tuple = ("Python", 3.14, True, 100) # Tek elemanlı tuple oluşturma (virgül kullanımı önemlidir) tek_elemanli_tuple = (42,) # Virgül olmadan sadece parantez bir integer olur # Parantez olmadan tuple oluşturma (tuple paketleme) paketlenmis_tuple = 1, 2, "üç" # Bu da geçerli bir tuple oluşturur softmush.com Detaylı Açıklama Tuple'ların temel özellikleri ve kullanım mekanizmaları aşağıda açıklanmıştır: Değiştirilemezlik (Immutability): Bir tuple'ın en belirgin özelliğidir. Oluşturulduktan sonra içindeki elemanlar ne değiştirilebilir ne de yeni elemanlar eklenebilir veya mevcutlar silinebilir. Bu özellik, veri bütünlüğünü sağlamak ve tuple'ları daha güvenli veri taşıyıcıları yapmak için önemlidir. Sıralı (Ordered): Tuple elemanları belirli bir sıraya sahiptir ve bu sıra korunur. Elemanlara erişim indeks numaraları aracılığıyla yapılır. İndekslenebilir (Indexable): Listeler gibi, tuple elemanlarına da sıfır tabanlı indekslerle erişilebilir. Dilimleme (slicing) işlemleri de desteklenir. Farklı Veri Tipleri: Bir tuple, aynı anda farklı veri tiplerinden (integer, float, string, boolean vb.) elemanları barındırabilir. Tuple Paketleme ve Açma (Packing/Unpacking): Python, birden fazla değeri bir tuple olarak "paketlemeye" ve bir tuple'daki değerleri birden fazla değişkene "açmaya" olanak tanır. Bu, özellikle fonksiyonlardan çoklu değer döndürmede veya değişkenleri hızlıca takas etmede kullanışlıdır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, Python tuple'larının nasıl oluşturulduğunu, elemanlarına nasıl erişildiğini ve çeşitli senaryolarda nasıl kullanıldığını göstermektedir. Örnek 1: Tuple Oluşturma ve Elemanlara Erişme # Bir tuple oluşturma koordinatlar = (10, 20) print(f"Koordinatlar: {koordinatlar}") # İndeks kullanarak elemanlara erişim x_koordinati = koordinatlar[0] y_koordinati = koordinatlar[1] print(f"X Koordinatı: {x_koordinati}, Y Koordinatı: {y_koordinati}") # Negatif indeksleme son_eleman = koordinatlar[-1] print(f"Son eleman: {son_eleman}") # Dilimleme (Slicing) ilk_iki = (1, 2, 3, 4, 5)[0:2] print(f"İlk iki eleman: {ilk_iki}") softmush.com Örnek 2: Tuple Paketleme ve Açma # Tuple Paketleme bilgi = "Alice", 30, "Mühendis" # Otomatik olarak bir tuple oluşturulur # Tuple Açma isim, yas, meslek = bilgi print(f"İsim: {isim}, Yaş: {yas}, Meslek: {meslek}") # Değişkenleri takas etme a = 5 b = 10 print(f"Takas öncesi: a={a}, b={b}") a, b = b, a # Tuple paketleme ve açma ile hızlı takas print(f"Takas sonrası: a={a}, b={b}") softmush.com Örnek 3: Fonksiyonlardan Çoklu Değer Döndürme def dikdortgen_bilgileri(uzunluk, genislik): alan = uzunluk * genislik cevre = 2 * (uzunluk + genislik) return alan, cevre # Fonksiyon bir tuple döndürür # Fonksiyonu çağırma ve döndürülen tuple'ı açma alan_degeri, cevre_degeri = dikdortgen_bilgileri(5, 8) print(f"Dikdörtgenin Alanı: {alan_degeri}, Çevresi: {cevre_degeri}") softmush.com Örnek 4: Tuple Metotları Tuple'lar, değiştirilemez olmalarına rağmen, elemanları üzerinde bilgi edinmek için bazı dahili metotlara sahiptir: count() ve index(). my_tuple = (1, 2, 2, 3, 4, 2, 5) # count() metodu: Belirli bir elemanın kaç kez geçtiğini sayar iki_sayisi = my_tuple.count(2) print(f"2 sayısı tuple içinde {iki_sayisi} kez geçiyor.") # index() metodu: Belirli bir elemanın ilk geçtiği indeksi döndürür # Eğer eleman bulunamazsa ValueError yükseltir uc_indeksi = my_tuple.index(3) print(f"3 elemanının ilk indeksi: {uc_indeksi}") # Olmayan bir eleman için deneme try: altı_indeksi = my_tuple.index(6) print(f"6 elemanının ilk indeksi: {altı_indeksi}") except ValueError as e: print(f"Hata: {e}") softmush.com Önemli Notlar ve İpuçları Tek Elemanlı Tuple Oluşturma: Tek bir elemanı olan bir tuple oluştururken, elemandan sonra mutlaka bir virgül , eklemelisiniz. Örneğin, (42,) bir tuple'dır; (42) ise sadece bir tam sayıdır. Performans: Tuples, listelere göre genellikle daha az bellek tüketir ve daha hızlı işlenir, çünkü değiştirilemez yapıları Python'ın optimizasyon yapmasına olanak tanır. Sabit veri setleri için tuple kullanmak performans avantajı sağlayabilir. Hashable Olma: Yalnızca değiştirilemez (immutable) elemanlar içeren tuple'lar hashable'dır. Bu da onları Python sözlüklerinde anahtar olarak veya set'lerde eleman olarak kullanılabileceği anlamına gelir. Örneğin, (1, 2) bir sözlük anahtarı olabilirken, (1, [2, 3]) olamaz çünkü içindeki liste değiştirilemez değildir. Değiştirilemezliğin Kapsamı: Tuple'lar kendileri değiştirilemez olsa da, eğer bir tuple mutable (değiştirilebilir) bir obje (örneğin bir liste) içeriyorsa, o mutable objenin içeriği değiştirilebilir. Tuple'ın referansı sabittir, ancak referans ettiği objenin içeriği değişebilir. Kullanım Senaryoları: Tuples, özellikle aşağıdaki durumlarda tercih edilmelidir: Fonksiyonlardan birden fazla değer döndürme. Sabit koleksiyonları temsil etme (örneğin, haftanın günleri, renk kodları). Sözlük anahtarı olarak kullanılacak verileri depolama. Veri bütünlüğünün önemli olduğu durumlar.
avatar
Emin
17
0
SQL Makaleleri
sql-dilinde-sql-delete-kullanimi
SQL Dilinde SQL DELETE Kullanımı
SQL (Yapısal Sorgu Dili), veri tabanlarıyla etkileşim kurmak için kullanılan güçlü bir dildir. Bu etkileşimin temel bileşenlerinden biri de mevcut verileri silme yeteneğidir. DELETE ifadesi, bir tablodan bir veya daha fazla satırı kalıcı olarak kaldırmak için kullanılır. Bu makale, DELETE ifadesinin sözdizimini, kullanımını ve dikkat edilmesi gereken önemli noktaları detaylı bir şekilde ele alacaktır. Sözdizimi DELETE ifadesinin temel sözdizimi aşağıdaki gibidir: DELETE FROM tablo_adi WHERE kosul;softmush.com Tüm satırları silmek için WHERE koşulu atlanabilir: DELETE FROM tablo_adi;softmush.com DELETE ifadesinin bileşenleri şunlardır: DELETE FROM: Bu anahtar kelimeler, belirtilen tablodan satır silme işlemini başlatır. tablo_adi: Verilerin silineceği tablonun adıdır. Bu, işlemin hedefidir. WHERE kosul: İsteğe bağlı bir koşuldur. Bu koşul belirtilirse, yalnızca koşulu karşılayan satırlar silinir. Eğer WHERE koşulu belirtilmezse, tablodaki tüm satırlar silinir. Bu durum geri alınamaz olduğundan büyük dikkat gerektirir. Koşul, bir veya daha fazla sütun üzerinde mantıksal operatörler (=, , , =, LIKE, IN, BETWEEN vb.) kullanılarak tanımlanır. Örnekler Aşağıdaki örnekler, DELETE ifadesinin çeşitli senaryolarda nasıl kullanılacağını göstermektedir. Örneklerde, Calisanlar adında bir tablonun var olduğu varsayılmaktadır. Örnek 1: Belirli Bir Satırı Silme Calisanlar tablosundan CalisanID'si 101 olan çalışanı silmek için: DELETE FROM Calisanlar WHERE CalisanID = 101;softmush.com Örnek 2: Birden Fazla Satırı Koşula Göre Silme Calisanlar tablosundan 'Pazarlama' departmanında çalışan tüm personeli silmek için: DELETE FROM Calisanlar WHERE Departman = 'Pazarlama';softmush.com Örnek 3: Belirli Bir Tarihten Önceki Kayıtları Silme Calisanlar tablosundan GirisTarihi 2020 yılından önce olan tüm çalışanları silmek için: DELETE FROM Calisanlar WHERE GirisTarihi < '2020-01-01';softmush.com Örnek 4: Tüm Satırları Silme (WHERE koşulu olmadan) Calisanlar tablosundaki tüm kayıtları silmek için: DELETE FROM Calisanlar;softmush.com Bu işlem, tablonun yapısını korurken tüm verileri kalıcı olarak kaldırır. Önemli Notlar Yedekleme: DELETE işlemini gerçekleştirmeden önce her zaman veri tabanınızı yedekleyin. Yanlışlıkla yapılan silme işlemleri geri alınamaz sonuçlar doğurabilir. WHERE Koşulunun Önemi: WHERE koşulunu dikkatlice yazın ve doğruluğundan emin olun. Koşulun yanlış olması, beklenenden daha fazla veya yanlış verilerin silinmesine yol açabilir. TRUNCATE TABLE vs. DELETE: Tüm satırları silmek için DELETE FROM tablo_adi; yerine TRUNCATE TABLE tablo_adi; de kullanılabilir. Ancak bu iki komut arasında önemli farklar vardır: DELETE, satır satır silme işlemi yapar ve her silinen satır için işlem günlüğü (transaction log) kaydı tutar. Bu nedenle daha yavaş olabilir ve geri alınabilir (ROLLBACK) bir işlem olabilir. TRUNCATE TABLE, tabloyu yeniden oluşturarak daha hızlı bir şekilde tüm verileri siler. İşlem günlüğüne minimum kayıt yazar, bu yüzden daha performanslıdır. Ancak, bu işlem genellikle geri alınamaz (ROLLBACK edilemez). İlişkisel Bütünlük (Referential Integrity): Bir tabloda silmeye çalıştığınız veriler başka bir tablonun dış anahtar (FOREIGN KEY) kısıtlamaları tarafından referans alınıyorsa, silme işlemi başarısız olabilir veya ilişkili verilerin de silinmesini (ON DELETE CASCADE) tetikleyebilir. Veri tabanı tasarımınızı ve kısıtlamalarınızı anlayın. İşlem Kontrolü (Transaction Control): Özellikle kritik silme işlemleri için BEGIN TRANSACTION (veya START TRANSACTION), COMMIT ve ROLLBACK komutlarını kullanın. Bu, silme işlemini test etmenize ve gerekirse geri almanıza olanak tanır. BEGIN TRANSACTION; DELETE FROM Calisanlar WHERE CalisanID = 101; -- SELECT * FROM Calisanlar WHERE CalisanID = 101; -- Silinip silinmediğini kontrol et -- COMMIT; -- Değişiklikleri kalıcı hale getir -- ROLLBACK; -- Değişiklikleri geri alsoftmush.com
avatar
Emin
9
0
JavaScript Makaleleri
javascript-dilinde-map-nesnesinin-kapsamli-kullanimi
JavaScript Dilinde Map Nesnesinin Kapsamlı Kullanımı
Map nesnesi, JavaScript'te anahtar-değer çiftlerini saklamak için kullanılan güçlü bir veri yapısıdır. Geleneksel nesnelerin (Object) sınırlamalarını aşarak, anahtar olarak herhangi bir veri türünü (nesneler, fonksiyonlar, ilkel değerler) kullanılmasına olanak tanır ve elemanların eklenme sırasını korur. Bu özellikler, Map'i belirli senaryolarda Object'e göre daha esnek ve verimli bir alternatif haline getirir. Sözdizimi Map nesnesi, new Map() yapıcı fonksiyonu kullanılarak oluşturulur. Anahtar-değer çiftleri eklemek, almak ve yönetmek için çeşitli yöntemler sunar. Yeni bir Map oluşturma: const myMap = new Map();softmush.com Başlangıç değerleri ile Map oluşturma: const initialMap = new Map([ ['anahtar1', 'değer1'], ['anahtar2', 'değer2'] ]);softmush.com Bir anahtar-değer çifti ekleme: myMap.set('ad', 'Alice');softmush.com Bir anahtarın değerini alma: const ad = myMap.get('ad'); // 'Alice'softmush.com Bir anahtarın varlığını kontrol etme: const varMi = myMap.has('ad'); // truesoftmush.com Bir anahtar-değer çiftini silme: myMap.delete('ad');softmush.com Map'teki eleman sayısını alma: const boyut = myMap.size;softmush.com Tüm anahtar-değer çiftlerini temizleme: myMap.clear();softmush.com Detaylı Açıklama Map nesnesi, JavaScript'teki geleneksel Object'lere göre bazı önemli avantajlar sunar ve farklı kullanım senaryolarına hitap eder. Anahtar Türleri: Geleneksel nesnelerde anahtarlar yalnızca string veya Symbol olabilirken, Map nesneleri anahtar olarak herhangi bir veri türünü (nesneler, fonksiyonlar, diziler, ilkel değerler vb.) kabul edebilir. Bu, özellikle DOM elemanları veya diğer nesneleri doğrudan anahtar olarak kullanmak istediğinizde büyük bir avantaj sağlar. Eleman Sırası: Map nesneleri, anahtar-değer çiftlerinin eklenme sırasını korur. Bu, üzerinde iterasyon yaparken elemanların hangi sırayla eklendiğini bilmek veya bu sırayı kullanmak istediğinizde önemlidir. Geleneksel nesnelerde özelliklerin sırası garanti edilmez (ancak ES2015'ten sonra bazı durumlarda kısmen garanti edilmeye başlanmıştır, yine de Map kadar güçlü değildir). Boyut: Map nesnesinin size özelliği, içerdiği anahtar-değer çiftlerinin sayısını doğrudan ve verimli bir şekilde verir. Geleneksel nesnelerde bu bilgiye ulaşmak için genellikle Object.keys(obj).length gibi yöntemler kullanmak gerekir ki bu da her seferinde yeni bir dizi oluşturmayı gerektirir. Performans: Sık sık anahtar-değer çiftlerinin eklenip silindiği senaryolarda, Map genellikle geleneksel nesnelere göre daha iyi performans sergileyebilir. Özellikle anahtar sayısı arttıkça bu fark daha belirgin hale gelebilir. Iterasyon: Map nesneleri doğrudan iterable'dır. Bu, for...of döngüleri ile kolayca anahtarlar, değerler veya anahtar-değer çiftleri üzerinde döngü yapmanızı sağlar. map.keys(), map.values() ve map.entries() yöntemleri, ilgili iterable nesneleri döndürür. Bir Map'e aynı anahtarla yeni bir değer atandığında, mevcut değerin üzerine yazılır. Bu, anahtarların benzersiz olmasını sağlar. Pratik Kullanım Örnekleri Aşağıdaki örnekler, Map nesnesinin çeşitli kullanım senaryolarını göstermektedir. Örnek 1: Temel Map İşlemleri Bu örnek, bir Map oluşturmayı, eleman eklemeyi, eleman almayı, varlığını kontrol etmeyi ve silmeyi gösterir. const kullaniciBilgileri = new Map(); // Eleman ekleme kullaniciBilgileri.set('id', 101); kullaniciBilgileri.set('ad', 'Veli'); kullaniciBilgileri.set('soyad', 'Demir'); kullaniciBilgileri.set('aktif', true); console.log('Kullanıcı Adı:', kullaniciBilgileri.get('ad')); // Çıktı: Kullanıcı Adı: Veli console.log('ID mevcut mu?', kullaniciBilgileri.has('id')); // Çıktı: ID mevcut mu? true console.log('Email mevcut mu?', kullaniciBilgileri.has('email')); // Çıktı: Email mevcut mu? false // Bir elemanı silme kullaniciBilgileri.delete('aktif'); console.log('Aktif durumu silindi mi?', !kullaniciBilgileri.has('aktif')); // Çıktı: Aktif durumu silindi mi? true console.log('Map boyutu:', kullaniciBilgileri.size); // Çıktı: Map boyutu: 3 // Tüm elemanları temizleme kullaniciBilgileri.clear(); console.log('Map temizlendikten sonra boyut:', kullaniciBilgileri.size); // Çıktı: Map temizlendikten sonra boyut: 0softmush.com Örnek 2: Nesneleri Anahtar Olarak Kullanma Map'in en güçlü yönlerinden biri, anahtar olarak nesneleri kullanabilmesidir. Bu örnek, iki farklı nesneyi anahtar olarak nasıl kullanacağımızı gösterir. const kullanici1 = { id: 1, ad: 'Ayşe' }; const kullanici2 = { id: 2, ad: 'Fatma' }; const kullaniciRolleri = new Map(); kullaniciRolleri.set(kullanici1, 'Yönetici'); kullaniciRolleri.set(kullanici2, 'Editör'); console.log(kullaniciRolleri.get(kullanici1)); // Çıktı: Yönetici console.log(kullaniciRolleri.get(kullanici2)); // Çıktı: Editör // Yeni bir nesne oluşturup aynı değerlere sahip olsa bile farklı bir anahtar olarak kabul edilir. const kullanici3 = { id: 1, ad: 'Ayşe' }; console.log(kullaniciRolleri.get(kullanici3)); // Çıktı: undefined (çünkü bellekte farklı bir referanstır)softmush.com Örnek 3: Map Üzerinde Iterasyon Map nesneleri, for...of döngüsü ile kolayca iterate edilebilir. Bu örnek, anahtarlar, değerler ve anahtar-değer çiftleri üzerinde nasıl döngü yapılacağını gösterir. const urunFiyatlari = new Map([ ['Laptop', 12000], ['Klavye', 500], ['Fare', 250] ]); console.log('--- Anahtar-Değer Çiftleri ---'); for (const [urun, fiyat] of urunFiyatlari) { console.log(`${urun}: ${fiyat} TL`); } // Çıktı: // Laptop: 12000 TL // Klavye: 500 TL // Fare: 250 TL console.log('\n--- Sadece Anahtarlar ---'); for (const urun of urunFiyatlari.keys()) { console.log(urun); } // Çıktı: // Laptop // Klavye // Fare console.log('\n--- Sadece Değerler ---'); for (const fiyat of urunFiyatlari.values()) { console.log(fiyat); } // Çıktı: // 12000 // 500 // 250softmush.com Örnek 4: Map'i Diziye ve Diziyi Map'e Dönüştürme Map ve dizi arasında kolayca dönüşüm yapabilirsiniz. // Diziden Map oluşturma const diziVeri = [['a', 1], ['b', 2], ['c', 3]]; const harita = new Map(diziVeri); console.log('Diziden Oluşturulan Map:', harita); // Çıktı: Diziden Oluşturulan Map: Map(3) { 'a' => 1, 'b' => 2, 'c' => 3 } // Map'i diziye dönüştürme (entries olarak) const haritaDizi = Array.from(harita); console.log('Map\'in Diziye Dönüştürülmüş Hali (entries):', haritaDizi); // Çıktı: Map'in Diziye Dönüştürülmüş Hali (entries): [ [ 'a', 1 ], [ 'b', 2 ], [ 'c', 3 ] ] // Sadece anahtarları diziye dönüştürme const anahtarlarDizi = [...harita.keys()]; console.log('Map Anahtarları Dizi Olarak:', anahtarlarDizi); // Çıktı: Map Anahtarları Dizi Olarak: [ 'a', 'b', 'c' ] // Sadece değerleri diziye dönüştürme const degerlerDizi = [...harita.values()]; console.log('Map Değerleri Dizi Olarak:', degerlerDizi); // Çıktı: Map Değerleri Dizi Olarak: [ 1, 2, 3 ]softmush.com Önemli Notlar Anahtar Karşılaştırması: Map'teki anahtarlar, SameValueZero algoritması kullanılarak karşılaştırılır. Bu, === operatörüne benzer ancak NaN değerinin kendisine eşit kabul edilmesi gibi bazı farklılıklar içerir (NaN === NaN false dönerken, Map içinde NaN anahtarı NaN ile eşleşir). Map vs. Object: Ne zaman hangisini kullanacağınızı iyi belirleyin. Eğer anahtarlarınız yalnızca string veya Symbol ise ve eleman sırası önemli değilse, basit bir Object yeterli olabilir. Ancak anahtarlarınız farklı veri tiplerinde olacaksa, eleman sırasını korumanız gerekiyorsa veya sık sık eleman ekleyip siliyorsanız, Map genellikle daha iyi bir seçimdir. Serileştirme: Map nesneleri doğrudan JSON.stringify() ile serileştirilemez. Bir Map'i JSON formatına dönüştürmek için önce onu bir diziye veya düz bir nesneye dönüştürmeniz gerekir. WeakMap: JavaScript ayrıca WeakMap adında bir veri yapısı sunar. WeakMap, yalnızca nesneleri anahtar olarak kabul eder ve anahtarların "zayıf" referanslarını tutar. Bu, anahtar nesneye başka hiçbir referans kalmadığında çöp toplayıcının anahtarı ve ilgili değeri otomatik olarak silmesine olanak tanır. Bellek yönetimi açısından önemlidir, ancak Map'ten farklı bir kullanım senaryosu vardır.
avatar
Emin
9
0
PHP Makaleleri
php-dilinde-istisnalar-exceptions-kullanimi
PHP Dilinde İstisnalar (Exceptions) Kullanımı
PHP programlamada, bir uygulamanın çalışma zamanında beklenmedik durumlarla karşılaşması yaygın bir senaryodur. Bu tür durumlar, programın normal akışını bozarak hatalara veya istenmeyen davranışlara yol açabilir. PHP'de bu tür durumları zarif ve kontrollü bir şekilde yönetmek için istisnalar (exceptions) mekanizması kullanılır. İstisnalar, hata koşullarını temsil eden nesnelerdir ve programın hatayı yakalamasına, işlemesine ve uygun bir yanıt vermesine olanak tanır. Bu kılavuz, PHP dilinde istisnaların temel sözdizimini, detaylı kullanımını ve pratik örneklerini adım adım açıklamaktadır. Temel Sözdizimi PHP'de istisna yönetimi, try, catch ve isteğe bağlı olarak finally blokları kullanılarak gerçekleştirilir. Bu yapı, potansiyel olarak istisna fırlatabilecek kodun yürütülmesini izlemek ve fırlatılan istisnaları ele almak için tasarlanmıştır. softmush.com Detaylı Açıklama İstisna yönetimi yapısının her bir bileşeni belirli bir amaca hizmet eder: try Bloğu: Potansiyel olarak bir istisna fırlatabilecek kodun bulunduğu alandır. Program bu blok içindeki kodun yürütülmesini izler. Eğer try bloğu içinde bir istisna fırlatılırsa, PHP normal akışı durdurur ve fırlatılan istisnayı yakalayabilecek uygun bir catch bloğu arar. catch Bloğu: Bir try bloğunda fırlatılan istisnaları yakalamak ve işlemek için kullanılır. Her catch bloğu, yakalamak istediği istisna tipini (sınıfını) belirtir. PHP, fırlatılan istisna nesnesinin tipiyle eşleşen ilk catch bloğunu yürütür. Bir istisna yakalandığında, catch bloğu içindeki kod çalıştırılır ve bu, hatanın ele alınmasını sağlar. Birden fazla catch bloğu kullanarak farklı istisna tiplerini ayrı ayrı ele alabilirsiniz. finally Bloğu: PHP 5.5'ten itibaren kullanılabilen bu blok, try ve catch blokları tamamlandıktan sonra, bir istisna fırlatılsın veya fırlatılmasın, her zaman yürütülecek kodu içerir. Bu, veritabanı bağlantılarını kapatma, dosya tanıtıcılarını serbest bırakma gibi temizleme (cleanup) işlemleri için son derece kullanışlıdır ve kaynak sızıntılarını önlemeye yardımcı olur. throw Anahtar Kelimesi: Bir istisna fırlatmak için kullanılır. Bir Exception sınıfının veya ondan türetilmiş bir sınıfın nesnesiyle birlikte kullanılır. Örneğin: throw new Exception("Hata mesajı"); Exception Sınıfı: PHP'de tüm yerleşik ve özel istisnaların türediği temel sınıftır. Kendi özel istisna sınıflarınızı oluştururken genellikle bu sınıftan türetirsiniz. Pratik Kullanım Örnekleri Aşağıdaki örnekler, istisna yönetiminin farklı senaryolarda nasıl kullanılabileceğini göstermektedir. Örnek 1: Temel İstisna Yakalama softmush.com Bu örnekte, bolmeIslemi fonksiyonu sıfıra bölme durumunda bir istisna fırlatır. try bloğu içinde bu istisna yakalanır ve hata mesajı ekrana yazdırılır. İstisna fırlatıldıktan sonra try bloğundaki diğer kodların çalışmadığına dikkat edin. Örnek 2: Çoklu catch Blokları ve Özel İstisnalar Kendi özel istisna sınıflarınızı tanımlayarak daha spesifik hata durumlarını ele alabilirsiniz. Özel istisna sınıfları genellikle Exception sınıfından türetilir. softmush.com Bu örnek, farklı hata türlerini ele almak için birden çok catch bloğunun nasıl kullanılacağını gösterir. finally bloğu ise, istisna fırlatılsa da fırlatılmasa da her zaman çalışarak temizleme işlemleri için bir garanti sağlar. Örnek 3: İstisnaları Yeniden Fırlatma (Re-throwing Exceptions) Bazen bir istisnayı yakalayıp belirli bir işlem yaptıktan sonra, daha yüksek bir seviyede ele alınması için yeniden fırlatmak isteyebilirsiniz. softmush.com Bu örnekte, dosyaOku fonksiyonu bir istisna yakalar, loglar ve ardından daha genel bir istisna mesajıyla yeniden fırlatır. Yeniden fırlatılan istisnaya orijinal istisna, getPrevious() metodu ile erişilebilir. İpuçları ve Önemli Notlar Spesifik catch Blokları Önce Gelmeli: Birden fazla catch bloğu kullanırken, daha spesifik istisna sınıflarını (GecersizParametreException gibi) genel Exception sınıfından önce yerleştirin. Aksi takdirde, daha genel olan blok tüm istisnaları yakalar ve spesifik bloklara asla ulaşılamaz. İstisnaları Yutmaktan Kaçının: Bir istisnayı yakalayıp hiçbir işlem yapmadan (boş bir catch bloğu) bırakmak, hataların gizlenmesine ve hata ayıklamanın zorlaşmasına neden olur. Her zaman yakalanan istisnayı loglayın, kullanıcıya anlamlı bir mesaj gösterin veya uygun şekilde ele alın. Sadece Hata Durumları İçin Kullanın: İstisnalar, programın normal akışının bir parçası olmayan, beklenmedik hata durumları için tasarlanmıştır. Kontrol akışını yönlendirmek için istisnaları kullanmaktan kaçının (örneğin, bir döngüyü kırmak için). Throwable Arayüzü: PHP 7'den itibaren, hem Exception hem de Error sınıflarının uyguladığı Throwable arayüzü tanıtılmıştır. Bu, hem istisnaları hem de ciddi hataları (örneğin, bellek tükenmesi) tek bir catch (Throwable $e) bloğu ile yakalamanıza olanak tanır. Standart İstisna Sınıfları: PHP, InvalidArgumentException, RuntimeException, PDOException gibi birçok yerleşik istisna sınıfı sağlar. Uygulamanızda bu standart sınıfları veya bunlardan türettiğiniz özel sınıfları kullanmak iyi bir pratiktir.
avatar
Emin
8
0
Python Makaleleri
python-dilinde-python-lists-kullanimi
Python Dilinde Python Lists Kullanımı
Python programlama dilinde listeler, birden fazla öğeyi tek bir değişken altında depolamak için kullanılan temel ve çok yönlü veri yapılarından biridir. Sıralı, değiştirilebilir (mutable) ve farklı veri tiplerindeki öğeleri barındırabilen koleksiyonlardır. Veri yönetimi, algoritma geliştirme ve birçok programlama görevinde kritik bir rol oynarlar. Bu kılavuz, Python listelerinin oluşturulmasından karmaşık manipülasyonlarına kadar tüm yönlerini adım adım ele alacaktır. Sözdizimi Python'da bir liste, köşeli parantezler [] içine virgülle ayrılmış öğeler yerleştirilerek oluşturulur. liste_adi = [eleman1, eleman2, eleman3, ...]softmush.com Detaylı Açıklama liste_adi: Oluşturulan listeyi referans alan değişkendir. Geçerli bir Python tanımlayıcısı olmalıdır. =: Atama operatörüdür. Sağdaki liste değerini soldaki değişkene atar. []: Köşeli parantezler, bir liste veri yapısının başlangıcını ve sonunu işaret eder. Python yorumlayıcısı, bu parantezlerin içindeki öğeleri bir liste olarak tanır. eleman1, eleman2, eleman3, ...: Listede saklanacak öğelerdir. Bu öğeler, tam sayılar, ondalık sayılar, dizeler, boolean değerler, hatta başka listeler veya özel nesneler dahil olmak üzere herhangi bir Python veri tipinde olabilir. Öğeler birbirlerinden virgül , ile ayrılır. Listeler sıralıdır, yani öğelerin eklenme sırası korunur ve bir dizin (index) numarası ile erişilebilirler. İlk öğenin dizini 0'dır. Ayrıca, listeler değiştirilebilirdir, yani oluşturulduktan sonra öğeleri eklenebilir, çıkarılabilir veya güncellenebilir. Pratik Kullanım Örnekleri Aşağıdaki örnekler, Python listelerinin temel kullanım senaryolarını göstermektedir. 1. Liste Oluşturma Boş bir liste veya farklı veri tiplerini içeren bir liste oluşturabilirsiniz. # Boş bir liste oluşturma bos_liste = [] print(f"Boş Liste: {bos_liste}") # Tam sayılar içeren bir liste sayilar = [1, 2, 3, 4, 5] print(f"Sayılar Listesi: {sayilar}") # Dizeler içeren bir liste meyveler = ["elma", "armut", "kiraz"] print(f"Meyveler Listesi: {meyveler}") # Farklı veri tiplerini içeren bir liste karisik_liste = [10, "Python", True, 3.14] print(f"Karışık Liste: {karisik_liste}") # İç içe liste (nested list) ic_ice_liste = [[1, 2], ["a", "b"]] print(f"İç İçe Liste: {ic_ice_liste}")softmush.com 2. Listeye Erişim Listelerdeki öğelere dizin numaraları (index) kullanılarak erişilir. Dizinler 0'dan başlar. Negatif dizinler listenin sonundan itibaren saymaya başlar (-1 son öğeyi temsil eder). my_list = ["a", "b", "c", "d", "e"] # İlk öğeye erişim print(f"İlk öğe: {my_list[0]}") # Çıktı: a # Üçüncü öğeye erişim print(f"Üçüncü öğe: {my_list[2]}") # Çıktı: c # Son öğeye erişim (negatif dizin) print(f"Son öğe: {my_list[-1]}") # Çıktı: e # Sondan ikinci öğeye erişim print(f"Sondan ikinci öğe: {my_list[-2]}") # Çıktı: dsoftmush.com 3. Liste Öğelerini Değiştirme Listeler değiştirilebilir olduğu için, belirli bir dizindeki öğeyi güncelleyebilirsiniz. sayilar = [10, 20, 30, 40] print(f"Orijinal liste: {sayilar}") # İlk öğeyi değiştirme sayilar[0] = 5 print(f"Değiştirilen ilk öğe sonrası: {sayilar}") # Çıktı: [5, 20, 30, 40] # Son öğeyi değiştirme sayilar[-1] = 50 print(f"Değiştirilen son öğe sonrası: {sayilar}") # Çıktı: [5, 20, 30, 50]softmush.com 4. Listeye Eleman Ekleme append() metodu listenin sonuna, insert() metodu ise belirtilen bir dizine öğe ekler. meyveler = ["elma", "armut"] # listenin sonuna öğe ekleme meyveler.append("muz") print(f"Append sonrası: {meyveler}") # Çıktı: ['elma', 'armut', 'muz'] # Belirli bir dizine öğe ekleme (dizin 1'e 'kiraz' ekle) meyveler.insert(1, "kiraz") print(f"Insert sonrası: {meyveler}") # Çıktı: ['elma', 'kiraz', 'armut', 'muz']softmush.com 5. Listeden Eleman Çıkarma remove() metodu belirtilen değeri, pop() metodu belirtilen dizindeki öğeyi (veya son öğeyi), del anahtar kelimesi ise belirtilen dizindeki öğeyi veya dilimi siler. renkler = ["kırmızı", "yeşil", "mavi", "sarı"] # Değere göre silme renkler.remove("yeşil") print(f"Remove 'yeşil' sonrası: {renkler}") # Çıktı: ['kırmızı', 'mavi', 'sarı'] # Dizin 1'deki öğeyi silme (pop varsayılan olarak son öğeyi siler) silinen_renk = renkler.pop(1) print(f"Pop sonrası: {renkler}, Silinen: {silinen_renk}") # Çıktı: ['kırmızı', 'sarı'], Silinen: mavi # 'del' anahtar kelimesi ile dizin 0'daki öğeyi silme del renkler[0] print(f"Del sonrası: {renkler}") # Çıktı: ['sarı'] # Tüm listeyi silme # del renkler # print(renkler) # Hata verecektir, çünkü liste artık mevcut değil. # Listeyi temizleme (içindeki tüm öğeleri siler, liste objesi kalır) sayilar = [1, 2, 3] sayilar.clear() print(f"Clear sonrası: {sayilar}") # Çıktı: []softmush.com 6. Liste Dilimleme (Slicing) Listenin bir bölümünü (dilimini) almak için dilimleme işlemi kullanılır. Sözdizimi liste[baslangic:bitis:adim] şeklindedir. alfabe = ["a", "b", "c", "d", "e", "f", "g"] # İlk üç öğeyi al print(f"İlk üç: {alfabe[0:3]}") # Çıktı: ['a', 'b', 'c'] print(f"İlk üç (kısa): {alfabe[:3]}") # Çıktı: ['a', 'b', 'c'] # İkinci dizinden sona kadar print(f"İkinci dizinden sona: {alfabe[1:]}") # Çıktı: ['b', 'c', 'd', 'e', 'f', 'g'] # Üçüncü dizinden beşinci dizine kadar (beşinci dahil değil) print(f"Üçüncüden beşe: {alfabe[2:5]}") # Çıktı: ['c', 'd', 'e'] # Tüm listeyi kopyalama kopyalanmis_alfabe = alfabe[:] print(f"Kopyalanmış: {kopyalanmis_alfabe}") # Çıktı: ['a', 'b', 'c', 'd', 'e', 'f', 'g'] # Her ikinci öğeyi al print(f"Her ikinci: {alfabe[::2]}") # Çıktı: ['a', 'c', 'e', 'g'] # Listeyi ters çevir print(f"Ters çevrilmiş: {alfabe[::-1]}") # Çıktı: ['g', 'f', 'e', 'd', 'c', 'b', 'a']softmush.com 7. Temel Liste Operasyonları Listeler üzerinde çeşitli temel operasyonlar gerçekleştirebilirsiniz. liste1 = [1, 2, 3] liste2 = [4, 5, 6] # Listeleri birleştirme (concatenation) birlesik_liste = liste1 + liste2 print(f"Birleşik liste: {birlesik_liste}") # Çıktı: [1, 2, 3, 4, 5, 6] # Bir listeyi tekrarlama tekrarlanan_liste = liste1 * 3 print(f"Tekrarlanan liste: {tekrarlanan_liste}") # Çıktı: [1, 2, 3, 1, 2, 3, 1, 2, 3] # Liste uzunluğunu bulma print(f"Liste1 uzunluğu: {len(liste1)}") # Çıktı: 3 # Bir öğenin listede olup olmadığını kontrol etme print(f"2 listede mi? {'2' in liste1}") # Çıktı: False (int 2, str '2' değil) print(f"2 listede mi? {2 in liste1}") # Çıktı: True print(f"7 listede mi? {7 not in liste2}") # Çıktı: Truesoftmush.com Önemli Notlar Değiştirilebilirlik (Mutability): Listeler değiştirilebilir veri yapılarıdır. Bu, içeriklerinin oluşturulduktan sonra değiştirilebileceği anlamına gelir. Bu özellik, listelerin esnekliğini artırır ancak aynı zamanda dikkatli kullanılmasını gerektirir, özellikle liste kopyalama ve referans verme durumlarında. Heterojen Öğeler: Bir Python listesi, farklı veri tiplerindeki (örneğin, tam sayı, dize, boolean, hatta başka bir liste) öğeleri aynı anda barındırabilir. Sıralı Yapı ve Dizinleme: Listelerdeki öğeler belirli bir sırayı korur ve bu sıraya dizin numaraları (0'dan başlayarak) aracılığıyla erişilebilir. Dizin dışı bir öğeye erişim denemesi IndexError hatasına yol açar. Kopyalama Davranışı: Bir listeyi basit bir atama (örneğin, yeni_liste = eski_liste) ile kopyalamak, yeni bir liste oluşturmaz, yalnızca orijinal listenin referansını kopyalar. Bu, her iki değişkenin de aynı listeyi işaret ettiği anlamına gelir. Bağımsız bir kopya oluşturmak için .copy() metodu veya dilimleme [:] kullanılmalıdır (örn. yeni_liste = eski_liste.copy()). Yüksek Performanslı İşlemler: Büyük listelerde sık sık ekleme/çıkarma işlemleri yapılıyorsa, performans sorunları yaşanabilir. Bu tür senaryolarda, collections.deque gibi alternatif veri yapıları daha uygun olabilir.
avatar
Emin
8
0
SQL Makaleleri
sql-dilinde-sql-update-kullanimi-veri-guncelleme-rehberi
SQL Dilinde SQL UPDATE Kullanımı: Veri Güncelleme Rehberi
Veritabanı yönetim sistemlerinde (DBMS) mevcut kayıtların üzerinde değişiklik yapmak, veri bütünlüğünü sağlamak ve dinamik uygulamalar geliştirmek için temel bir gerekliliktir. SQL (Yapısal Sorgu Dili) bu ihtiyacı karşılamak üzere güçlü bir komut olan UPDATE ifadesini sunar. Bu makale, SQL UPDATE komutunun sözdizimini, kullanımını ve pratik örneklerini detaylı bir şekilde ele alarak, veritabanlarınızdaki bilgileri güvenli ve etkili bir şekilde nasıl güncelleyeceğinizi açıklamaktadır. Sözdizimi SQL UPDATE komutunun temel yapısı aşağıdaki gibidir: UPDATE tablo_adı SET sütun1 = değer1, sütun2 = değer2, ... WHERE koşul;softmush.com Yukarıdaki sözdizimi, belirli bir tablodaki bir veya daha fazla satırın bir veya daha fazla sütunundaki verileri değiştirmek için kullanılır. Detaylı Açıklama UPDATE tablo_adı: Güncellemek istediğiniz tablonun adını belirtir. Bu kısım, işlemin hangi veritabanı nesnesi üzerinde yapılacağını tanımlar. SET sütun1 = değer1, sütun2 = değer2, ...: Güncellenecek sütunları ve bu sütunlara atanacak yeni değerleri belirtir. Birden fazla sütunu güncellemek için sütun-değer çiftleri virgüllerle ayrılır. Atanan değerler sabit bir değer, başka bir sütunun değeri, bir ifade veya bir alt sorgunun sonucu olabilir. WHERE koşul: Bu anahtar kelime ve ardından gelen koşul, hangi satırların güncelleneceğini belirler. Yalnızca belirtilen koşulu sağlayan satırlar güncellenir. Eğer WHERE koşulu kullanılmazsa, tablodaki tüm satırlar SET ifadesinde belirtilen değerlerle güncellenir. Bu, genellikle istenmeyen ve dikkatli olunması gereken bir durumdur. Pratik Kullanım Örnekleri Aşağıdaki örnekler, UPDATE komutunun farklı senaryolarda nasıl kullanılabileceğini göstermektedir. Örneklerde Müşteriler ve Ürünler adında iki tablo varsayılmaktadır. Örnek 1: Tek Bir Sütunu Güncelleme Belirli bir müşteri ID'sine sahip müşterinin e-posta adresini güncelleyelim: UPDATE Müşteriler SET E_posta = 'yeni.eposta@example.com' WHERE MüşteriID = 101;softmush.com Bu sorgu, MüşteriID'si 101 olan kaydın E_posta sütununu yeni.eposta@example.com olarak değiştirir. Örnek 2: Birden Fazla Sütunu Güncelleme Belirli bir ürünün fiyatını ve stok miktarını aynı anda güncelleyelim: UPDATE Ürünler SET Fiyat = 29.99, StokMiktarı = 150 WHERE ÜrünID = 205;softmush.com ÜrünID'si 205 olan ürünün hem Fiyat hem de StokMiktarı sütunları güncellenir. Örnek 3: Koşula Bağlı Olarak Değerleri Artırma veya Azaltma Belirli bir kategorideki tüm ürünlerin fiyatını %10 artıralım: UPDATE Ürünler SET Fiyat = Fiyat * 1.10 WHERE Kategori = 'Elektronik';softmush.com Bu örnek, mevcut Fiyat değerini kullanarak yeni bir değer hesaplar ve atar. Örnek 4: Tüm Satırları Güncelleme (Dikkatli Kullanın!) Eğer WHERE koşulu kullanılmazsa, tablodaki tüm satırlar güncellenir. Örneğin, tüm ürünlerin durumunu 'Pasif' olarak ayarlamak için: UPDATE Ürünler SET Durum = 'Pasif';softmush.com Bu sorgu, Ürünler tablosundaki her ürünün Durum sütununu 'Pasif' olarak ayarlar. Bu tür bir işlem yapmadan önce daima veritabanı yedeği almanız ve işlemin etkilerini tam olarak anladığınızdan emin olmanız şiddetle tavsiye edilir. Önemli Notlar WHERE koşulunun gücü ve tehlikesi: WHERE koşulu olmadan yapılan bir UPDATE işlemi, tablonuzdaki tüm verileri geri dönülemez bir şekilde değiştirebilir. Her zaman önce SELECT sorgusu ile güncellenecek satırları kontrol edin. TRANSACTION kullanımı: Büyük veya kritik UPDATE işlemleri yaparken BEGIN TRANSACTION, COMMIT ve ROLLBACK komutlarını kullanmak iyi bir uygulamadır. Bu, bir hata durumunda değişiklikleri geri almanıza olanak tanır. Yedekleme: Herhangi bir büyük veri değişikliği yapmadan önce daima veritabanınızın yedeğini alın. Bu, beklenmedik sorunlar karşısında verilerinizi kurtarmanızı sağlar.
avatar
Emin
15
0
JavaScript Makaleleri
javascript-dilinde-js-sets-kullanimi
JavaScript Dilinde JS Sets Kullanımı
JavaScript'te Setler, benzersiz değerlerden oluşan bir koleksiyonu depolamak için kullanılan özel bir nesne türüdür.Bu veri yapısı, tekrar eden öğelerin otomatik olarak elenmesini sağlayarak veri yönetimi ve manipülasyonunda önemli avantajlar sunar.Bu makale, JavaScript Setlerinin temel kullanımını, sözdizimini ve pratik uygulamalarını detaylı bir şekilde açıklayacaktır. Sözdizimi Bir Set oluşturmak için new Set() kurucusu kullanılır.Değerler, Set'in kurucusuna bir iterable (örneğin bir dizi) olarak geçirilebilir veya daha sonra add() metodu ile eklenebilir. // Boş bir Set oluşturma const mySet = new Set(); // Başlangıç değerleri ile Set oluşturma const initialSet = new Set([1, 2, 3, 2, 4]); // initialSet: {1, 2, 3, 4} // Metotlar mySet.add(value); // Bir değer ekler mySet.delete(value); // Bir değeri siler mySet.has(value); // Bir değerin varlığını kontrol eder mySet.clear(); // Set'teki tüm öğeleri siler mySet.size; // Set'teki öğe sayısını döndürürsoftmush.com Detaylı Açıklama new Set([iterable]): Yeni bir Set nesnesi oluşturur. İsteğe bağlı olarak, iterable bir nesne (örneğin bir dizi) alabilir. Bu iterable içindeki tüm öğeler Set'e eklenir. Tekrar eden değerler otomatik olarak göz ardı edilir. Set.prototype.add(value): Set'e yeni bir değer ekler. Eğer değer zaten Set'te mevcutsa, Set değişmez. Zincirleme çağrılara izin vermek için Set nesnesini döndürür. Set.prototype.delete(value): Set'ten belirli bir değeri siler. Eğer değer Set'te mevcutsa true, aksi takdirde false döndürür. Set.prototype.has(value): Belirli bir değerin Set'te olup olmadığını kontrol eder. Varsa true, yoksa false döndürür. Set.prototype.clear(): Set'teki tüm öğeleri siler ve Set'i boşaltır. Set.prototype.size: Set'teki benzersiz öğelerin sayısını döndüren bir erişimci özelliğidir. Set.prototype.forEach(callbackFn[, thisArg]): Set'teki her öğe için bir callback fonksiyonu yürütür. Dizilerdeki forEach metoduna benzer. Set.prototype.values(), Set.prototype.keys(), Set.prototype.entries(): Set'teki değerleri, anahtarları (Set'lerde anahtarlar ve değerler aynıdır) veya anahtar/değer çiftlerini ([value, value] formatında) içeren yeni bir Iterator nesnesi döndürür. Pratik Kullanım Örnekleri Aşağıdaki örnekler, JavaScript Setlerinin çeşitli kullanım senaryolarını göstermektedir. 1. Benzersiz Öğeleri Toplama Bir dizideki yinelenen öğeleri kaldırmak ve yalnızca benzersiz değerleri elde etmek için Setleri kullanmak oldukça etkilidir. const numbers = [1, 2, 3, 4, 2, 1, 5, 6, 3]; const uniqueNumbers = new Set(numbers); console.log(uniqueNumbers); // Set(6) {1, 2, 3, 4, 5, 6} // Set'i tekrar bir diziye dönüştürme const uniqueNumbersArray = [...uniqueNumbers]; console.log(uniqueNumbersArray); // [1, 2, 3, 4, 5, 6]softmush.com 2. Öğelerin Varlığını Kontrol Etme Bir öğenin bir koleksiyonda olup olmadığını hızlıca kontrol etmek için has() metodunu kullanabilirsiniz. const fruits = new Set(['elma', 'armut', 'muz']); console.log(fruits.has('elma')); // true console.log(fruits.has('çilek')); // false fruits.add('çilek'); console.log(fruits.has('çilek')); // truesoftmush.com 3. Set Üzerinde İterasyon Set öğeleri üzerinde döngü yapmak için forEach() metodunu veya for...of döngüsünü kullanabilirsiniz. const colors = new Set(['kırmızı', 'mavi', 'yeşil']); // forEach ile iterasyon colors.forEach(color => { console.log(color); }); // Çıktı: // kırmızı // mavi // yeşil // for...of ile iterasyon for (const color of colors) { console.log(color); } // Çıktı: // kırmızı // mavi // yeşilsoftmush.com Önemli Notlar Değer Karşılaştırması: Setler, değerleri karşılaştırırken aynı algoritmayı kullanır. Bu, NaN değerlerinin Set içinde benzersiz olarak ele alındığı anlamına gelir (NaN === NaN false olmasına rağmen, Set içinde sadece bir adet NaN bulunabilir). Obje referansları için, farklı referanslara sahip aynı içeriğe sahip objeler farklı kabul edilir. Sırasız Yapı: Setler, öğeleri eklenme sırasına göre depolasa da, Setin birincil amacı benzersiz öğeleri tutmaktır, belirli bir sırayı garanti etmek değildir. Bazı durumlarda iterasyon sırası ekleme sırasına denk gelebilir, ancak buna güvenilmemelidir. Performans: Bir öğenin Set'te varlığını kontrol etmek (has() metodu) genellikle O(1) zaman karmaşıklığına sahiptir, bu da büyük veri kümeleri için dizilerdeki aramalara göre daha verimli olabilir. Zayıf Referanslar: Eğer objeler için zayıf referanslara ihtiyacınız varsa (yani objeye başka referans kalmadığında otomatik olarak belleğin serbest bırakılmasını istiyorsanız), WeakSet kullanmanız gerekebilir. Ancak WeakSet sadece objeleri depolayabilir ve iterable değildir. Anahtar-Değer Çiftleri İçin Setler: Eğer benzersiz anahtar-değer çiftleri depolamanız gerekiyorsa, Map nesnesi daha uygun bir seçenek olabilir.
avatar
Emin
8
0
Bilim Makaleleri
matematikte-dogustan-kotu-olmak-mumkun-mu-bilimin-isiginda-bir-bakis
Matematikte Doğuştan Kötü Olmak Mümkün Mü? Bilimin Işığında Bir Bakış
Hepimizin hayatında en az bir kere duyduğu, belki de kendi kendine sorduğu bir soru var: "Ben matematikte doğuştan kötüyüm, değil mi?" Bu cümle, genellikle matematiğe karşı hissedilen bir çaresizliğin, bir kabullenişin ifadesidir. Ancak bir SEO yazarı ve gazeteci olarak, bu konuda edindiğim bilgilerle size bambaşka bir pencere açmak istiyorum. Gerçekten de bazı insanlar matematikte doğuştan mı başarısızdır, yoksa bu sadece yaygın bir yanılsama mı? Gelin, bu konuyu bilimsel veriler, uzman görüşleri ve psikolojinin ışığında derinlemesine inceleyelim. Çünkü matematik, sandığımızdan çok daha esnek, öğrenilebilir ve herkesin erişebileceği bir alandır. "Matematik Beyni" Efsanesi: Gerçek mi, Mit mi? Toplumda sıkça karşılaştığımız bir inanç vardır: Bazı insanların "matematik beyni" ile doğduğu, bazılarının ise bu yetenekten yoksun olduğu. Bu durum, genellikle çocukluktan itibaren "sayısalcı" veya "sözelci" gibi etiketlemelerle pekiştirilir. Ancak modern bilim, bu katı ayrımın pek de doğru olmadığını gösteriyor. Beynimiz, düşündüğümüzden çok daha esnektir ve hayat boyu öğrenmeye açıktır. Araştırmalar, matematiğin sadece sol beynin işi olmadığını, aslında beynin birçok farklı bölgesinin etkileşim içinde çalıştığını ortaya koyuyor. Mantık, problem çözme, uzamsal düşünme, hatta yaratıcılık bile matematiksel süreçlerde rol oynar. Yani, "matematik beyni" diye tekil bir yapıdan bahsetmek yerine, matematiksel düşünmenin karmaşık ve çok yönlü bir beceri olduğunu anlamak daha doğru olacaktır. Zihin Yapısının Gücü: Sabit mi, Gelişebilir mi? Stanford Üniversitesi'nden psikolog Carol Dweck'in çalışmaları, "zihin yapısı" kavramının öğrenme üzerindeki etkisini çarpıcı bir şekilde ortaya koymuştur. Dweck, iki ana zihin yapısından bahseder: Sabit Zihin Yapısı (Fixed Mindset): Bireylerin yeteneklerinin doğuştan geldiğine ve değiştirilemez olduğuna inandığı durumdur. "Matematikte kötüyüm, çünkü bu benim kaderim" düşüncesi bu kategoriye girer. Bu inanca sahip kişiler, zorluklarla karşılaştıklarında kolayca pes etme eğilimindedirler. Büyüme Zihin Yapısı (Growth Mindset): Bireylerin yeteneklerinin çaba, pratik ve doğru stratejilerle geliştirilebileceğine inandığı durumdur. "Matematikte şu an zorlanıyorum, ama daha çok çalışarak ve farklı yöntemler deneyerek öğrenebilirim" düşüncesi bu zihin yapısının temelidir. Bu kişiler, hataları öğrenme fırsatı olarak görür ve azimle yola devam ederler. Matematikteki başarısızlığın büyük bir kısmı, aslında sabit zihin yapısının bir sonucudur. Eğer kendimize "yapamam" dersek, beynimiz de bu inancı pekiştirir ve gerçekten yapamayız. Oysa büyüme zihin yapısını benimsemek, matematiksel potansiyelimizi ortaya çıkarmanın ilk ve en önemli adımıdır. Eğitim Metotlarının Rolü: Her Öğrenciye Uygun Bir Yol Var mı? Matematik öğrenme deneyimimiz, büyük ölçüde bize nasıl öğretildiğiyle de şekillenir. Geleneksel ezbere dayalı, formül odaklı öğretim yöntemleri, birçok öğrencinin matematiğin soyut dünyasında kaybolmasına neden olabilir. Oysa modern eğitim yaklaşımları, matematiği daha somut, anlamlı ve etkileşimli hale getirmeyi hedefler. Öğretmenlerin sabrı, konuyu farklı açılardan açıklama yeteneği ve öğrencilerin bireysel öğrenme stillerine dikkat etmesi, matematik başarısı üzerinde kritik bir etkiye sahiptir. Bazı öğrenciler görsel öğrenirken, bazıları işitsel, bazıları ise yaparak-yaşayarak öğrenir. Tek tip bir öğretim metodunun herkes için geçerli olmadığını anlamak, matematik eğitiminde devrim niteliğinde bir adımdır. Matematik Kaygısı: Görünmez Bir Engel Matematik kaygısı, birçok insanın matematiksel görevler karşısında hissettiği gerginlik, endişe ve korku durumudur. Bu kaygı, sınav anında zihnin donmasına, basit hatalar yapmaya ve hatta matematiksel kavramları anlama yeteneğinin körelmesine neden olabilir. Matematik kaygısı, genellikle geçmişteki olumsuz deneyimler, öğretmenin veya ebeveynlerin olumsuz yaklaşımları veya toplumsal baskılar sonucunda ortaya çıkar. İlginçtir ki, matematik kaygısı yaşayan bireylerin çoğu, aslında matematiksel yetenekten yoksun değildir. Aksine, zeki ve potansiyeli yüksek öğrencilerde bile görülebilir. Kaygı, bilişsel kaynakları tüketerek problem çözme becerisini engeller. Bu durum, "matematikte kötüyüm" algısını pekiştiren bir kısır döngü yaratır. Ailenin ve Çevrenin Etkisi: "Ben de Matematikte İyi Değildim" Ebeveynlerin veya çevrenin matematiğe karşı tutumu, çocukların matematiğe bakış açısını derinden etkiler. "Ben de matematikte iyi değildim zaten" gibi ifadeler, farkında olmadan çocuklara matematiğin zor ve başa çıkılamaz bir ders olduğu mesajını verir. Bu tür olumsuz mesajlar, çocukların matematiğe karşı önyargılı yaklaşmasına ve daha başlamadan pes etmesine neden olabilir. Araştırmalar, ebeveynlerin çocuklarının matematik ödevlerine yardımcı olurken gösterdikleri kaygının bile çocuklara geçebileceğini gösteriyor. Destekleyici, olumlu ve sabırlı bir çevre, matematik öğreniminde mucizeler yaratabilir. Diskaluli: Gerçek Bir Öğrenme Güçlüğü (Ancak Nadir) Yukarıda bahsettiğimiz tüm faktörler, matematiksel başarısızlığın büyük bir kısmını açıklasa da, çok nadir de olsa gerçek bir öğrenme güçlüğü olan "diskalkuli"den bahsetmek gerekir. Diskaluli, matematiksel kavramları anlama, sayıları işleme ve aritmetik işlemleri yapmada ciddi ve kalıcı zorluklarla karakterize edilen nörolojik bir durumdur. Diskaluli tanısı konmuş bireyler, temel sayı hissi (number sense) ve matematiksel muhakeme yeteneğinde belirgin eksiklikler yaşarlar. Ancak unutulmamalıdır ki, diskalkuli matematiksel zorluk yaşayan nüfusun çok küçük bir yüzdesini oluşturur. Matematikte zorlanan çoğu kişi, diskalkuli değil, yukarıda saydığımız öğrenme, zihin yapısı veya kaygı temelli sorunlar yaşamaktadır. Doğru destek ve stratejilerle bu zorlukların üstesinden gelmek mümkündür. Pratik ve Tekrarın Önemi: Bir Kas Gibi Gelişen Beyin Matematik de bir dil öğrenmek veya bir enstrüman çalmak gibidir. Düzenli pratik, tekrar ve sabır gerektirir. İlk başta zor gelen kavramlar, üzerine gidildikçe, farklı örneklerle tekrarlandıkça zihnimizde yer edinir ve kalıcı hale gelir. Beynimizdeki sinir ağları, yeni bilgiler öğrendikçe güçlenir ve yeni bağlantılar kurar. Bu duruma nöroplastisite denir. Yani, matematiksel beceriler, tıpkı bir kas gibi, kullanıldıkça ve zorlandıkça gelişir. Yanlış yapmak, öğrenme sürecinin doğal bir parçasıdır. Önemli olan, yanlışlardan ders çıkarıp denemeye devam etmektir. Ne Yapmalı? Matematikle Barışmanın Yolları Eğer siz de kendinizi "matematikte kötüyüm" diyenlerden biri olarak görüyorsanız, umutsuzluğa kapılmayın. İşte size birkaç öneri: Zihin Yapınızı Değiştirin: Sabit zihin yapısından büyüme zihin yapısına geçmeye çalışın. "Yapamam" yerine "Henüz yapamıyorum, ama öğrenebilirim" deyin. Küçük Adımlarla Başlayın: Kendinizi bunaltacak büyük hedefler koymak yerine, temel kavramları anlamaya odaklanın. Küçük başarılar, motivasyonunuzu artıracaktır. Yardım Almaktan Çekinmeyin: Anlamadığınız bir konu olduğunda öğretmenlerinizden, arkadaşlarınızdan veya özel ders verenlerden yardım isteyin. Utanmak yerine, meraklı olun. Farklı Kaynakları Deneyin: Sadece ders kitabıyla sınırlı kalmayın. İnternetteki eğitim videoları, interaktif uygulamalar veya farklı anlatım tarzına sahip kitaplar size yeni kapılar açabilir. Matematikle Aranızdaki Kaygıyı Azaltın: Meditasyon, derin nefes alma egzersizleri gibi tekniklerle sınav kaygınızı yönetmeyi öğrenin. Başarıya giden yolda sakin bir zihin şarttır. Pratik Yapın, Tekrar Edin: Düzenli olarak problem çözün. Başarısız olsanız bile, bu bir öğrenme fırsatıdır. Yanlışlarınızdan ders çıkarın. Matematiğin Günlük Hayattaki Yerini Görün: Matematik sadece formüllerden ibaret değildir. Mutfakta, alışverişte, spor yaparken veya oyun oynarken bile matematikle iç içeyiz. Bu bağlantıları görmek, matematiği daha anlamlı hale getirecektir. Sonuç olarak, "matematikte doğuştan kötü olmak" kavramı, modern bilimin ve psikolojinin ışığında geçerliliğini büyük ölçüde yitirmiştir. Yeteneklerimiz sabit değildir; zihin yapımız, aldığımız eğitim, yaşadığımız kaygılar ve çevremizin etkisiyle şekillenir. Matematik, tıpkı diğer tüm beceriler gibi, çaba, doğru stratejiler ve inançla geliştirilebilir bir alandır. Kendinize bu şansı verin ve matematiğin büyülü dünyasını yeniden keşfedin!
avatar
Emin
11
0
PHP Makaleleri
php-dilinde-hata-ve-istisna-yonetimi
PHP Dilinde Hata ve İstisna Yönetimi
PHP dilinde hata ve istisna yönetimi, uygulamaların beklenmedik durumlarla nasıl başa çıktığını belirleyen kritik bir konudur. Etkili hata yönetimi, uygulamanın kararlılığını artırır, kullanıcı deneyimini iyileştirir ve hata ayıklama süreçlerini önemli ölçüde kolaylaştırır. PHP, hem geleneksel hata işleme yaklaşımları hem de modern istisna mekanizmaları sunarak geliştiricilere esneklik sağlar. Temel Sözdizimi PHP'de hata ve istisna yönetimi, genellikle iki ana mekanizma etrafında şekillenir: İstisna Yönetimi: Potansiyel olarak hata oluşturabilecek kod bloklarını sarmalamak ve bu bloklarda fırlatılan istisnaları yakalamak için try...catch...finally yapıları kullanılır. Özel durumları belirtmek için throw ifadesiyle istisnalar fırlatılabilir. Geleneksel Hata İşleme: PHP'nin eski sürümünden gelen ve E_NOTICE, E_WARNING gibi hata seviyelerini içeren hatalar için set_error_handler() fonksiyonu ile özel hata işleyicileri tanımlanabilir. Detaylı Açıklama PHP'nin hata ve istisna yönetimi yapıları aşağıdaki bileşenlerden oluşur: try Bloğu: İstisna fırlatma potansiyeli olan kodun yerleştirildiği bloktur. Bu blok içindeki herhangi bir istisna fırlatıldığında, normal akış durur ve uygun catch bloğu aranır. catch Bloğu: Bir try bloğu içinde fırlatılan belirli bir türdeki istisnayı yakalamak için kullanılır. catch bloğu, yakalanan istisnayı parametre olarak alır ve bu istisna üzerinde işlem yapılmasına olanak tanır. PHP 7'den itibaren birden fazla catch bloğu tanımlanabilir ve bir catch bloğu birden fazla istisna türünü | operatörü ile yakalayabilir. finally Bloğu (PHP 5.5+): İster bir istisna fırlatılsın ister fırlatılmasın, try ve catch bloklarından sonra her durumda çalıştırılması garanti edilen kod bloğudur. Bu genellikle kaynakların serbest bırakılması veya temizlik işlemleri için kullanılır. throw İfadesi: Manuel olarak bir istisna nesnesi fırlatmak için kullanılır. Genellikle bir koşul sağlanmadığında veya beklenmedik bir durum oluştuğunda programın akışını kontrol altına almak için tercih edilir. set_error_handler(callable $handler, int $error_types = E_ALL | E_STRICT): PHP'nin varsayılan hata işleyicisini özel bir fonksiyonla değiştirmeye yarar. Bu fonksiyon, E_ERROR dışındaki tüm hata türlerini (E_WARNING, E_NOTICE vb.) yakalayabilir. Fonksiyon, hata kodu, hata mesajı, dosya adı ve satır numarası gibi parametreler alır. restore_error_handler(): Daha önce set_error_handler() ile değiştirilmiş olan hata işleyiciyi PHP'nin varsayılan işleyicisine geri döndürür. error_reporting(int $level): Hangi hata seviyelerinin raporlanacağını belirler. Geliştirme ortamında genellikle tüm hatalar raporlanırken (E_ALL), üretim ortamında daha düşük seviyeli hatalar gizlenir. display_errors ve log_errors: PHP'nin php.ini dosyasında veya çalışma zamanında ayarlanabilen bu yönergeler, hataların tarayıcı çıktısında gösterilip gösterilmeyeceğini ve hata günlüklerine yazılıp yazılmayacağını kontrol eder. Pratik Kullanım Örnekleri Aşağıdaki örnekler, PHP'de hata ve istisna yönetiminin farklı senaryolarda nasıl kullanılabileceğini göstermektedir. 1. Temel try...catch Kullanımı softmush.com 2. Özel İstisna Sınıfı Tanımlama ve Kullanımı softmush.com 3. finally Bloğu Kullanımı softmush.com 4. set_error_handler() ile Geleneksel Hata Yakalama
avatar
Emin
12
0
SQL Makaleleri
sql-dilinde-null-degerlerin-etkili-kullanimi
SQL Dilinde NULL Değerlerin Etkili Kullanımı
Veritabanı yönetim sistemlerinde, bir sütundaki veri değerinin bilinmediğini, uygulanabilir olmadığını veya henüz atanmadığını belirtmek için NULL anahtar kelimesi kullanılır. Bu özel değer, diğer veri türlerinden farklı olarak, bir sayıyı (örneğin 0) veya boş bir karakter dizisini (örneğin '') temsil etmez; aksine, bir değerin yokluğunu veya belirsizliğini ifade eder. SQL sorgularında NULL değerlerle doğru bir şekilde çalışabilmek, veri bütünlüğünü sağlamak ve beklenen sonuçları elde etmek için kritik öneme sahiptir. Sözdizimi SQL'de NULL değerleri sorgulamak ve yönetmek için genellikle IS NULL, IS NOT NULL operatörleri ve COALESCE gibi özel fonksiyonlar kullanılır. Temel kullanım yapıları aşağıdaki gibidir: -- Bir sütunda NULL değerleri seçmek için: SELECT column_name(s) FROM table_name WHERE column_name IS NULL; -- Bir sütunda NULL olmayan değerleri seçmek için: SELECT column_name(s) FROM table_name WHERE column_name IS NOT NULL; -- NULL değerleri alternatif bir değerle değiştirmek için: SELECT COALESCE(column_name, default_value) AS new_column_name FROM table_name; softmush.com Detaylı Açıklama NULL Nedir? SQL'deki NULL, bir değerin yokluğunu temsil eder. Bu, bir sütunun o satır için herhangi bir bilgi içermediği veya bu bilginin bilinmediği anlamına gelir. NULL, sıfırdan, boş bir karakter dizisinden veya boşluktan farklıdır. Örneğin, bir kullanıcının telefon numarasının NULL olması, o kullanıcının telefon numarasının olmadığını veya bilinmediğini ifade eder; '0' olması ise telefon numarasının 0 olduğunu gösterir. IS NULL Operatörü IS NULL operatörü, belirli bir sütundaki değerin NULL olup olmadığını kontrol etmek için kullanılır. Geleneksel karşılaştırma operatörleri (=, , !=) NULL değerlerle doğru şekilde çalışmadığı için bu operatör zorunludur. WHERE koşulunda kullanılarak, belirtilen sütunda NULL değeri bulunan tüm satırları döndürür. IS NOT NULL Operatörü IS NOT NULL operatörü, IS NULL operatörünün zıttıdır. Bir sütundaki değerin NULL olmadığını kontrol etmek için kullanılır. Bu operatör, belirli bir sütunda geçerli (NULL olmayan) bir değere sahip olan tüm satırları seçmek istediğinizde faydalıdır. COALESCE Fonksiyonu COALESCE fonksiyonu, kendisine verilen ifadeler listesinden NULL olmayan ilk ifadeyi döndürür. Bu fonksiyon, bir sütundaki NULL değerleri okunaklı bir varsayılan değerle (örneğin 'Bilinmiyor' veya 0) değiştirmek istediğinizde çok kullanışlıdır. Eğer tüm ifadeler NULL ise, COALESCE de NULL döndürür. NULL ile Karşılaştırmalar SQL'de NULL değerleri doğrudan diğer değerlerle (hatta başka bir NULL ile bile) = veya gibi operatörlerle karşılaştırmak her zaman UNKNOWN (bilinmeyen) sonucunu verir. Örneğin, NULL = NULL ifadesi TRUE döndürmez, UNKNOWN döndürür. Bu nedenle, NULL değerleri test etmek için mutlaka IS NULL veya IS NOT NULL operatörleri kullanılmalıdır. Örnekler Aşağıdaki örnekler, NULL değerlerin SQL sorgularında nasıl kullanıldığını göstermektedir. İlk olarak, örnek bir tablo oluşturalım ve içine veri ekleyelim: -- 1. Örnek Tablo Oluşturma ve Veri Ekleme CREATE TABLE Calisanlar ( CalisanID INT PRIMARY KEY, Ad VARCHAR(50) NOT NULL, Soyad VARCHAR(50) NOT NULL, Email VARCHAR(100), Telefon VARCHAR(15), DepartmanID INT ); softmush.com INSERT INTO Calisanlar (CalisanID, Ad, Soyad, Email, Telefon, DepartmanID) VALUES (1, 'Ayşe', 'Yılmaz', 'ayse.yilmaz@example.com', '5551234567', 101), (2, 'Mehmet', 'Demir', NULL, '5557654321', 102), (3, 'Zeynep', 'Kaya', 'zeynep.kaya@example.com', NULL, 101), (4, 'Ali', 'Can', 'ali.can@example.com', '5559876543', 103), (5, 'Elif', 'Aksoy', NULL, NULL, 102), (6, 'Deniz', 'Çelik', 'deniz.celik@example.com', '5551112233', NULL); softmush.com IS NULL Kullanımı Email adresi NULL olan çalışanları listelemek: SELECT CalisanID, Ad, Soyad, Email FROM Calisanlar WHERE Email IS NULL; softmush.com Bu sorgu, Mehmet Demir ve Elif Aksoy'un kayıtlarını döndürecektir. IS NOT NULL Kullanımı Telefon numarası tanımlanmış (NULL olmayan) çalışanları listelemek: SELECT CalisanID, Ad, Soyad, Telefon FROM Calisanlar WHERE Telefon IS NOT NULL; softmush.com Bu sorgu, Ayşe Yılmaz, Mehmet Demir, Ali Can ve Deniz Çelik'in kayıtlarını döndürecektir. COALESCE Kullanımı Email adresi NULL olan çalışanlar için 'Email Yok' yazısını göstermek: SELECT CalisanID, Ad, Soyad, COALESCE(Email, 'Email Yok') AS GosterilenEmail FROM Calisanlar; softmush.com Bu sorgu, Mehmet Demir ve Elif Aksoy'un Email sütununda 'Email Yok' ifadesini gösterecektir. Birden Fazla NULL Kontrolü Hem Email hem de Telefon bilgisi NULL olan çalışanları bulmak: SELECT CalisanID, Ad, Soyad, Email, Telefon FROM Calisanlar WHERE Email IS NULL AND Telefon IS NULL; softmush.com Bu sorgu, Elif Aksoy'un kaydını döndürecektir. Önemli Notlar NULL ve Sıfır/Boş String Farkı: NULL, matematiksel sıfırdan (0) veya boş karakter dizisinden ('') farklıdır. Bu değerler birer veri değeriyken, NULL bir değerin yokluğunu ifade eder. Karşılaştırmalarda bu farka dikkat edilmelidir. Karşılaştırma Operatörleri: =, , != gibi standart karşılaştırma operatörlerini NULL değerlerle kullanmaktan kaçının. Bu operatörler NULL ile karşılaştırıldığında her zaman UNKNOWN döndürür ve beklenen sonucu vermez. Daima IS NULL veya IS NOT NULL kullanın. Toplama Fonksiyonları ve NULL: COUNT(), SUM(), AVG() gibi toplama (aggregate) fonksiyonları genellikle NULL değerleri hesaplamalarına dahil etmez. Örneğin, AVG(SutunAdı), SutunAdı içindeki NULL değerleri göz ardı ederek ortalamayı hesaplar. Ancak COUNT(*), NULL değerleri de içeren tüm satırları sayar. NOT IN ve NULL: NOT IN operatörü ile NULL değerleri kullanırken dikkatli olun. Eğer NOT IN listesinde bir NULL değer varsa, sorgu beklenmedik şekilde hiçbir sonuç döndürmeyebilir çünkü NULL ile yapılan herhangi bir karşılaştırma UNKNOWN sonucunu verir. Örneğin, SELECT * FROM Tablo WHERE Deger NOT IN (1, 2, NULL); sorgusu UNKNOWN nedeniyle sorunlara yol açabilir. Veritabanı Tasarımı: Tablo oluştururken bir sütunun NULL değer kabul edip etmeyeceğini NULL veya NOT NULL kısıtlamaları ile belirleyebilirsiniz. NOT NULL kısıtlaması, o sütunun her zaman bir değer içermesini sağlar ve veri bütünlüğünü artırır.
avatar
Emin
8
0
JavaScript Makaleleri
javascript-dilinde-diziler-arrays-kullanimi
JavaScript Dilinde Diziler (Arrays) Kullanımı
JavaScript, web geliştirmede dinamik ve etkileşimli deneyimler oluşturmak için vazgeçilmez bir dildir. Bu dilin temel yapı taşlarından biri olan diziler (arrays), birden çok değeri tek bir değişken altında depolamamızı ve yönetmemizi sağlar. Diziler, veri koleksiyonlarını düzenli bir şekilde saklamak, üzerlerinde döngüler yapmak ve çeşitli manipülasyonlar gerçekleştirmek için kritik öneme sahiptir. Bu makalede, JavaScript dizilerinin temel sözdizimini, öğelere erişimi, yaygın kullanılan metotları ve pratik uygulama örneklerini detaylı bir şekilde inceleyeceğiz. Sözdizimi JavaScript'te dizi oluşturmanın ve kullanmanın iki temel yolu vardır: 1. Dizi Değişmezi (Array Literal) Kullanımı Bu, en yaygın ve önerilen yöntemdir. Köşeli parantezler [] arasına, virgülle ayrılmış olarak dizi öğeleri yazılır. const meyveler = ["Elma", "Muz", "Portakal"]; let sayilar = [1, 2, 3, 4, 5]; const karisikDizi = ["Metin", 123, true, null, {adi: "Nesne"}];softmush.com Yukarıdaki örneklerde görüldüğü gibi, bir dizi içinde farklı veri tiplerini barındırabiliriz. Diziler const, let veya var anahtar kelimeleri ile tanımlanabilir. 2. Array Kurucu Fonksiyonu (Constructor Function) Kullanımı new Array() kurucu fonksiyonunu kullanarak da dizi oluşturulabilir. Bu yöntem daha az tercih edilse de, belirli senaryolarda kullanılabilir. const meyveler = new Array("Elma", "Muz", "Portakal"); const bosDizi = new Array(); // Boş bir dizi oluşturur const onElemanliDizi = new Array(10); // 10 boş öğe içeren bir dizi oluşturursoftmush.com Tek bir sayısal argümanla çağrıldığında, new Array() o boyutta boş öğeler içeren bir dizi oluşturur. Birden fazla argümanla çağrıldığında ise, bu argümanlar dizinin öğeleri haline gelir. Dizi Öğelerine Erişim ve Değiştirme Dizilerdeki öğelere, sıfır tabanlı indeksleme kullanarak erişilir. Yani, ilk öğenin indeksi 0, ikincisinin 1 ve bu şekilde devam eder. Öğelere erişmek için dizi adından sonra köşeli parantez içinde indeks numarası belirtilir. const renkler = ["Kırmızı", "Yeşil", "Mavi"]; console.log(renkler[0]); // Çıktı: Kırmızı console.log(renkler[1]); // Çıktı: Yeşilsoftmush.com Dizi öğelerini değiştirmek de benzer şekilde yapılır. İstenen indeks belirtilerek yeni bir değer atanır: renkler[2] = "Sarı"; console.log(renkler); // Çıktı: ["Kırmızı", "Yeşil", "Sarı"]softmush.com Bir dizinin toplam öğe sayısını öğrenmek için length özelliğini kullanırız: console.log(renkler.length); // Çıktı: 3softmush.com Örnekler 1. Dizi Tanımlama ve Temel Erişim Bu örnek, bir dizi tanımlamayı ve belirli indekslerdeki öğelere nasıl erişileceğini göstermektedir. // Bir meyve dizisi tanımlama const meyveler = ["Elma", "Armut", "Kiraz", "Çilek"]; // Dizinin ilk elemanına erişme (indeks 0) console.log("İlk meyve:", meyveler[0]); // Çıktı: İlk meyve: Elma // Dizinin üçüncü elemanına erişme (indeks 2) console.log("Üçüncü meyve:", meyveler[2]); // Çıktı: Üçüncü meyve: Kiraz // Dizinin son elemanına erişme (length - 1) console.log("Son meyve:", meyveler[meyveler.length - 1]); // Çıktı: Son meyve: Çileksoftmush.com 2. Dizi Öğelerini Değiştirme ve Yeni Öğeler Ekleme/Çıkarma Bu örnek, var olan bir dizi öğesinin nasıl değiştirileceğini ve dizinin sonuna/başına öğe ekleme/çıkarma işlemlerini göstermektedir. let alisverisListesi = ["Süt", "Ekmek", "Yumurta"]; // İkinci öğeyi değiştirme (indeks 1) alisverisListesi[1] = "Peynir"; console.log("Değişen liste:", alisverisListesi); // Çıktı: Değişen liste: ["Süt", "Peynir", "Yumurta"] // Dizinin sonuna yeni bir öğe ekleme (push metodu) alisverisListesi.push("Meyve Suyu"); console.log("Ekleme sonrası:", alisverisListesi); // Çıktı: Ekleme sonrası: ["Süt", "Peynir", "Yumurta", "Meyve Suyu"] // Dizinin sonundaki öğeyi çıkarma (pop metodu) const cikarilanOge = alisverisListesi.pop(); console.log("Çıkarılan öğe:", cikarilanOge); // Çıktı: Çıkarılan öğe: Meyve Suyu console.log("Çıkarma sonrası:", alisverisListesi); // Çıktı: Çıkarma sonrası: ["Süt", "Peynir", "Yumurta"] // Dizinin başına yeni bir öğe ekleme (unshift metodu) alisverisListesi.unshift("Yoğurt"); console.log("Başına ekleme:", alisverisListesi); // Çıktı: Başına ekleme: ["Yoğurt", "Süt", "Peynir", "Yumurta"] // Dizinin başındaki öğeyi çıkarma (shift metodu) const cikarilanBasOge = alisverisListesi.shift(); console.log("Baştan çıkarılan öğe:", cikarilanBasOge); // Çıktı: Baştan çıkarılan öğe: Yoğurt console.log("Baştan çıkarma sonrası:", alisverisListesi); // Çıktı: Baştan çıkarma sonrası: ["Süt", "Peynir", "Yumurta"]softmush.com 3. Diziler Üzerinde Döngü Kullanımı Dizi öğeleri üzerinde işlem yapmak için döngüler sıkça kullanılır. En yaygın yöntemlerden biri for döngüsü ve forEach() metodudur. const ogrenciler = ["Ali", "Ayşe", "Mehmet", "Fatma"]; // For döngüsü ile dizi öğelerini listeleme console.log("For döngüsü ile öğrenciler:"); for (let i = 0; i < ogrenciler.length; i++) { console.log(ogrenciler[i]); } // forEach() metodu ile dizi öğelerini listeleme console.log("\nforEach() ile öğrenciler:"); ogrenciler.forEach(function(ogrenci, index) { console.log(`${index + 1}. ${ogrenci}`); });softmush.com Önemli Notlar Dinamik Boyut: JavaScript dizileri dinamik yapıdadır. Oluşturulduktan sonra boyutları otomatik olarak büyüyüp küçülebilir. Önceden bir boyut belirtme zorunluluğu yoktur. Karışık Veri Tipleri: JavaScript dizileri, aynı anda string, number, boolean, object, null, undefined gibi farklı veri tiplerini barındırabilir. Referans Tipi: Diziler birer referans tipi (reference type) veri yapısıdır. Bir diziyi başka bir değişkene atadığınızda, aslında dizinin kendisi değil, bellekteki referansı kopyalanır. Bu nedenle, yeni değişken üzerinden yapılan değişiklikler orijinal diziyi de etkiler. const ile Dizi Tanımlama: const ile tanımlanan bir dizinin referansı değiştirilemez, yani başka bir dizi atanması mümkün değildir. Ancak, dizinin içindeki öğeler (indeksler üzerinden) değiştirilebilir veya dizi metotları (push, pop vb.) ile manipüle edilebilir. const sabitDizi = [1, 2, 3]; sabitDizi.push(4); // Geçerli: [1, 2, 3, 4] // sabitDizi = [5, 6]; // Hata: Assignment to constant variable.softmush.com Dizi Metotları: JavaScript, dizilerle çalışmayı kolaylaştıran zengin bir dizi metotları setine sahiptir (map(), filter(), reduce(), find(), splice(), slice() vb.). Bu metotlar, diziler üzerinde daha gelişmiş işlemler yapmak için kullanılır ve modern JavaScript programlamasında kritik öneme sahiptir.
avatar
Emin
8
0
Python Makaleleri
python-dilinde-python-booleans-kullanimi
Python Dilinde Python Booleans Kullanımı
Python'da Booleans, programlama mantığının temelini oluşturan, yalnızca iki olası değere sahip özel bir veri tipidir: True ve False. Bu değerler, koşullu ifadelerde, döngülerde ve genel program akış kontrolünde kararlar almak için kullanılır. Mantıksal işlemlerin sonucunu temsil ederler ve bir durumun doğru mu yanlış mı olduğunu belirtirler. Python'da, bool sınıfının bir örneği olarak kabul edilirler ve dahili olarak sırasıyla 1 ve 0 tam sayı değerlerine karşılık gelirler. Temel Sözdizimi Python'da boolean değerleri doğrudan True ve False anahtar kelimeleri kullanılarak ifade edilir. Bu anahtar kelimeler büyük harfle başlar ve Python'ın ayrılmış kelimeleridir. Detaylı Açıklama True: Mantıksal olarak "doğru" anlamına gelir. Bir koşulun karşılandığını veya bir ifadenin geçerli olduğunu belirtir.False: Mantıksal olarak "yanlış" anlamına gelir. Bir koşulun karşılanmadığını veya bir ifadenin geçersiz olduğunu belirtir. Python'da birçok veri tipi ve ifade, boolean bağlamında değerlendirildiğinde dolaylı olarak bir boolean değere sahiptir. Örneğin, boş stringler (""), boş listeler ([]), boş sözlükler ({}), 0 sayısı ve None değeri False olarak değerlendirilirken; sıfırdan farklı sayılar, dolu stringler ve dolu koleksiyonlar True olarak değerlendirilir. Bu duruma "truthiness" denir ve bool() fonksiyonu ile açıkça kontrol edilebilir. Pratik Kullanım Örnekleri Örnek 1: Basit Atama ve Kontrol Bir değişkene boolean değeri atayarak ve bu değeri kullanarak koşullu bir ifade çalıştırmak için aşağıdaki kodu inceleyebiliriz. is_active = True is_admin = False if is_active: print("Kullanıcı aktif.") else: print("Kullanıcı pasif.") if is_admin: print("Yönetici yetkilerine sahip.") else: print("Yönetici yetkilerine sahip değil.")softmush.com Örnek 2: Karşılaştırma Operatörleri Karşılaştırma operatörleri (==, !=, , =) her zaman bir boolean değeri döndürür. x = 10 y = 20 print(f"x == y: {x == y}") print(f"x != y: {x != y}") print(f"x < y: {x < y}") print(f"x > y: {x > y}")softmush.com Örnek 3: Mantıksal Operatörler Mantıksal operatörler (and, or, not) boolean değerleri birleştirmek veya tersine çevirmek için kullanılır. has_permission = True is_logged_in = True is_subscriber = False if has_permission and is_logged_in: print("Erişim granted.") if has_permission or is_subscriber: print("En az bir koşul doğru.") if not is_subscriber: print("Abone değil.")softmush.com Örnek 4: bool() Fonksiyonu ile Değerlendirme Bir ifadenin boolean bağlamında nasıl değerlendirileceğini bool() fonksiyonu ile açıkça görebiliriz. print(f"bool(0): {bool(0)}") print(f"bool(1): {bool(1)}") print(f"bool(''): {bool('')}") print(f"bool('Hello'): {bool('Hello')}") print(f"bool([]): {bool([])}") print(f"bool([1, 2]): {bool([1, 2])}") print(f"bool(None): {bool(None)}")softmush.com İpuçları/Önemli Notlar True ve False anahtar kelimeleri Python'da büyük harfle başlar. Küçük harfle yazmak (örneğin, true veya false) bir hata ile sonuçlanır çünkü bunlar ayrılmış anahtar kelimelerdir ve değişken adları olarak algılanmazlar.Boolean değerleri, dahili olarak sırasıyla 1 ve 0 tamsayı değerlerine karşılık gelir. Bu, bazen aritmetik işlemlerde veya tip dönüştürmelerde ilginç sonuçlar doğurabilir; örneğin, True + True ifadesi 2 sonucunu verir.Karşılaştırma ve mantıksal operatörler, koşullu ifadeler ve döngüler için vazgeçilmezdir. Programınızın akışını kontrol etmek için bu operatörleri doğru bir şekilde kullanmak kritik öneme sahiptir.bool() fonksiyonu, herhangi bir Python nesnesinin boolean karşılığını elde etmek için kullanılabilir. Bu, özellikle bir koleksiyonun boş olup olmadığını veya bir değişkenin değer içerip içermediğini kontrol etmek için faydalıdır.
avatar
Emin
14
0
SQL Makaleleri
sql-dilinde-insert-into-komutunun-detayli-kullanimi
SQL Dilinde `INSERT INTO` Komutunun Detaylı Kullanımı
Veritabanı yönetim sistemlerinde, tablolara yeni veri satırları eklemek temel bir işlemdir. SQL dilinde bu amaçla kullanılan anahtar komut INSERT INTO ifadesidir. Bu komut, bir tablonun belirli sütunlarına veya tüm sütunlarına tek bir satır veri eklemekten, başka bir sorgunun sonucunu kullanarak birden fazla satır eklemeye kadar geniş bir kullanım yelpazesine sahiptir. Bu makale, INSERT INTO komutunun sözdizimini, detaylı açıklamalarını ve pratik örneklerini sunarak veritabanı manipülasyonu yeteneklerinizi geliştirmeyi amaçlamaktadır. Sözdizimi INSERT INTO komutu, temelde iki farklı şekilde kullanılabilir. Birincisi, belirli sütunlara değer atamak için kullanılırken, ikincisi tablonun tüm sütunlarına değer atamak için kullanılır. -- Belirli sütunlara veri ekleme INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); -- Tablonun tüm sütunlarına veri ekleme (sütun sırasına dikkat edilmeli) INSERT INTO table_name VALUES (value1, value2, value3, ...); -- Başka bir tablodan veri kopyalama INSERT INTO table_name (column1, column2, ...) SELECT column_a, column_b, ... FROM source_table WHERE condition;softmush.com Detaylı Açıklama Yukarıda belirtilen sözdizimindeki her bir bileşenin işlevi aşağıda açıklanmıştır: INSERT INTO: Bu anahtar kelime dizisi, bir tabloya yeni bir satır ekleme işlemini başlattığını belirtir. table_name: Verinin ekleneceği hedef tablonun adını temsil eder. Bu, mevcut bir tablonun adı olmalıdır. (column1, column2, ...): Bu parantez içindeki liste, verinin ekleneceği belirli sütunların adlarını içerir. Bu kısım isteğe bağlıdır. Eğer belirtilmezse, VALUES listesindeki değerlerin tablonun tüm sütunlarına, tanımlandıkları sıraya göre atanacağı varsayılır. Sütun adlarını belirtmek, hem okunabilirliği artırır hem de sütun sırasındaki olası değişikliklerden kaynaklanabilecek hataları önler. VALUES: Bu anahtar kelime, eklenecek değerlerin listesinin başlangıcını işaret eder. (value1, value2, ...): Bu parantez içindeki liste, (column1, column2, ...) listesindeki sütunlara veya eğer sütun listesi belirtilmediyse tablonun tüm sütunlarına atanacak değerleri içerir. Her value, karşılık gelen column'un veri tipiyle uyumlu olmalıdır. SELECT column_a, column_b, ... FROM source_table WHERE condition: Bu yapı, başka bir tablodan veri seçerek hedef tabloya eklemek için kullanılır. Bu, birden fazla satırı aynı anda eklemek için oldukça güçlü bir yöntemdir. Pratik Kullanım Örnekleri INSERT INTO komutunun farklı senaryolarda nasıl kullanıldığını gösteren pratik örnekler aşağıda sunulmuştur. Örnek 1: Belirli Sütunlara Veri Ekleme Aşağıdaki örnek, Musteriler adlı bir tabloya yalnızca Ad, Soyad ve Email sütunlarına veri eklemeyi göstermektedir. Diğer sütunlar varsayılan değerlerini alacak veya NULL olarak ayarlanacaktır (eğer izin veriliyorsa). INSERT INTO Musteriler (Ad, Soyad, Email) VALUES ('Ayşe', 'Yılmaz', 'ayse.yilmaz@example.com');softmush.com Bu komut, Musteriler tablosuna yeni bir müşteri kaydı ekler. Sadece belirtilen sütunlar için değerler sağlanmıştır. Örnek 2: Tüm Sütunlara Veri Ekleme (Sütun Adı Belirtmeden) Eğer tablonun tüm sütunlarına, tanımlandıkları sıraya göre veri ekleniyorsa, sütun adlarını belirtmek zorunlu değildir. Ancak, bu yöntemde değerlerin sırası ve sayısı tablo yapısıyla tam olarak eşleşmelidir. -- Varsayalım ki Urunler tablosunun sütunları sırasıyla: -- UrunID (otomatik artan), UrunAdi, Fiyat, StokAdedi, KategoriID INSERT INTO Urunler VALUES (DEFAULT, 'Akıllı Telefon', 7500.00, 150, 1);softmush.com Bu örnekte, UrunID sütunu otomatik artan bir alan olduğundan DEFAULT anahtar kelimesi kullanılmıştır. Diğer sütunlar için ise doğrudan değerler belirtilmiştir. Örnek 3: Başka Bir Tablodan Veri Kopyalama INSERT INTO ... SELECT ifadesi, bir veya daha fazla satırı başka bir tablodan seçip mevcut tabloya eklemek için kullanılır. Bu, toplu veri aktarımı için idealdir. INSERT INTO ArsivMusteriler (MusteriID, Ad, Soyad, KayitTarihi) SELECT ID, Isim, Soyisim, KayitTarihi FROM Musteriler WHERE KayitTarihi < '2020-01-01';softmush.com Yukarıdaki komut, Musteriler tablosundaki 1 Ocak 2020'den önce kaydedilmiş tüm müşterileri seçerek, bu verileri ArsivMusteriler tablosuna aktarır. SELECT sorgusundaki sütunlar ve INSERT INTO ifadesindeki sütunlar veri tipi ve sıra olarak uyumlu olmalıdır. Önemli Notlar INSERT INTO komutunu kullanırken dikkat edilmesi gereken bazı önemli noktalar şunlardır: Veri Tipi Uyumluluğu: Eklenecek değerlerin, atandıkları sütunların tanımlanmış veri tipleriyle uyumlu olması esastır. Aksi takdirde, veritabanı bir hata döndürebilir. NULL Değerler: Bir sütunun NULL değer kabul etmesi durumunda, o sütun için açıkça NULL değeri atanabilir veya sütun adı INSERT INTO (column1, ...) listesinde belirtilmezse otomatik olarak NULL atanır (eğer sütunun varsayılan değeri yoksa). Otomatik Artan Alanlar (IDENTITY / AUTO_INCREMENT): Çoğu veritabanı sisteminde, otomatik artan (örneğin, PRIMARY KEY olan ID) sütunlar için genellikle manuel olarak değer belirtmeye gerek yoktur. Bu tür sütunlar için DEFAULT anahtar kelimesini kullanabilir veya basitçe sütun listesinden çıkarabilirsiniz. Sütun Sırası: Sütun adları belirtildiğinde, VALUES listesindeki değerlerin sırası bu adlara uymalıdır. Sütun adları belirtilmediğinde ise, değerlerin sırası tablonun fiziksel sütun sırasına tam olarak uymalıdır. Tırnak İşaretleri: Metinsel (VARCHAR, TEXT) ve tarih/saat (DATE, DATETIME) değerleri tek tırnak (') içine alınmalıdır. Sayısal değerler (INT, DECIMAL, vb.) tırnak içine alınmaz. Kısıtlamalar ve Hata Yönetimi: Tablolara tanımlanmış PRIMARY KEY, UNIQUE, CHECK veya FOREIGN KEY gibi kısıtlamalar, ekleme işlemi sırasında ihlal edilirse veritabanı bir hata döndürecektir. Bu durumlar, uygun hata yönetimi stratejileriyle ele alınmalıdır.
avatar
Emin
16
1
JavaScript Makaleleri
javascript-dilinde-js-dates-kullanimi
JavaScript Dilinde JS Dates Kullanımı
JavaScript'te tarih ve saat verilerini yönetmek, görüntülemek ve üzerinde işlem yapmak için yerleşik Date nesnesi kullanılır. Bu nesne, milisaniyeler cinsinden zamanı temsil eder ve 1 Ocak 1970 UTC (Evrensel Eşgüdümlü Saat) tarihinden bu yana geçen süreyi temel alır. Date nesnesi ile mevcut tarihi ve saati alabilir, belirli bir tarihi oluşturabilir, tarih bileşenlerini değiştirebilir ve farklı formatlarda görüntüleyebilirsiniz. Sözdizimi Date nesnesi, new Date() yapıcı fonksiyonu kullanılarak dört farklı şekilde oluşturulabilir: new Date(): Mevcut tarih ve saati içeren bir Date nesnesi oluşturur. new Date(milisaniye): 1 Ocak 1970 UTC'den bu yana geçen milisaniye sayısını temsil eden bir Date nesnesi oluşturur. new Date(tarihDizisi): Bir tarih dizisini (örneğin, "2023-10-26" veya "October 26, 2023 10:30:00") ayrıştırarak bir Date nesnesi oluşturur. new Date(yıl, ay, gün, saat, dakika, saniye, milisaniye): Belirli tarih ve saat bileşenleriyle bir Date nesnesi oluşturur. Ay değeri 0'dan (Ocak) 11'e (Aralık) kadar indeklenmiştir. Detaylı Açıklama Date nesnesinin yapıcı fonksiyonları ve yöntemleri, tarih ve saat manipülasyonu için güçlü araçlar sunar: new Date(): Argüman olmadan çağrıldığında, Date nesnesi, komutun çalıştırıldığı yerel sistemin mevcut tarih ve saatini temsil eder. new Date(milisaniye): Bu yapıcı, new Date(0) ile 1 Ocak 1970 UTC başlangıcını temsil eder. Pozitif değerler bu tarihten sonrasını, negatif değerler ise öncesini ifade eder. Örneğin, new Date(86400000) 1 Ocak 1970 UTC'den 24 saat sonrasını temsil eder. new Date(tarihDizisi): JavaScript, çeşitli ISO 8601 formatlarını (örneğin, "YYYY-MM-DD", "YYYY-MM-DDTHH:mm:ssZ") ve tarayıcıya özgü bazı diğer tarih dizisi formatlarını ayrıştırabilir. Ancak, tarayıcılar arası tutarlılık için ISO 8601 formatları tercih edilmelidir. new Date(yıl, ay, gün, saat, dakika, saniye, milisaniye): Bu yapıcı, tarih bileşenlerini doğrudan belirterek kesin bir tarih ve saat oluşturmanıza olanak tanır. ay parametresinin 0-indeksli olduğunu unutmamak önemlidir. Örneğin, Ekim ayı için 9 değeri kullanılır. gün, saat, dakika, saniye ve milisaniye parametreleri isteğe bağlıdır ve belirtilmezse varsayılan olarak 1 (gün için) veya 0 (diğerleri için) değerini alırlar. Date nesnesinin birçok yöntemi vardır. Bunlar genellikle iki kategoriye ayrılır: yerel zaman dilimine göre (getFullYear(), getMonth()) ve UTC'ye göre (getUTCFullYear(), getUTCMonth()) çalışan yöntemler. Benzer şekilde, tarih bileşenlerini ayarlamak için setFullYear() veya setUTCFullYear() gibi yöntemler mevcuttur. Pratik Kullanım Örnekleri Mevcut tarih ve saati alıp görüntüleme: const simdi = new Date(); console.log(simdi); // Örnek çıktı: Thu Oct 26 2023 10:30:00 GMT+0300 (Türkiye Standart Saati) console.log(simdi.toLocaleDateString()); // Örnek çıktı: 26.10.2023 console.log(simdi.toLocaleTimeString()); // Örnek çıktı: 10:30:00 console.log(simdi.toISOString()); // Örnek çıktı: 2023-10-26T07:30:00.000Z (UTC formatında)softmush.com Belirli bir tarih ve saat oluşturma: // Yıl, ay (0-indeksli), gün, saat, dakika, saniye, milisaniye const dogumGunu = new Date(1990, 4, 15, 12, 0, 0, 0); // 15 Mayıs 1990, 12:00:00 console.log(dogumGunu.toDateString()); // Örnek çıktı: Tue May 15 1990 // Tarih dizisi kullanarak const yaziIleTarih = new Date("2024-01-20T14:30:00Z"); // UTC olarak 20 Ocak 2024, 14:30:00 console.log(yaziIleTarih.toLocaleString()); // Tarayıcının yerel ayarına göre görüntülenirsoftmush.com Tarih bileşenlerini alma: const bugun = new Date(); const yil = bugun.getFullYear(); // Yılı alır (örneğin, 2023) const ay = bugun.getMonth(); // Ayı alır (0-11, Ocak 0'dır) const gun = bugun.getDate(); // Ayın gününü alır (1-31) const gunAdi = bugun.getDay(); // Haftanın gününü alır (0-6, Pazar 0'dır) const saat = bugun.getHours(); // Saati alır (0-23) const dakika = bugun.getMinutes(); // Dakikayı alır (0-59) const saniye = bugun.getSeconds(); // Saniyeyi alır (0-59) const milisaniye = bugun.getMilliseconds(); // Milisaniyeyi alır (0-999) const zamanDamgasi = bugun.getTime(); // 1 Ocak 1970'ten bu yana geçen milisaniye sayısı console.log(`Yıl: ${yil}, Ay: ${ay + 1}, Gün: ${gun}, Saat: ${saat}:${dakika}`);softmush.com Tarih bileşenlerini ayarlama: const gelecektekiTarih = new Date(); gelecektekiTarih.setFullYear(2025); gelecektekiTarih.setMonth(0); // Ocak gelecektekiTarih.setDate(1); // Ayın 1. günü gelecektekiTarih.setHours(9); gelecektekiTarih.setMinutes(0); gelecektekiTarih.setSeconds(0); gelecektekiTarih.setMilliseconds(0); console.log(gelecektekiTarih.toLocaleString()); // Örnek çıktı: 1.01.2025 09:00:00softmush.com Tarihler arası fark hesaplama: const tarih1 = new Date('2023-10-01'); const tarih2 = new Date('2023-10-31'); const farkMilisaniye = tarih2.getTime() - tarih1.getTime(); const farkGun = farkMilisaniye / (1000 * 60 * 60 * 24); console.log(`İki tarih arasındaki gün farkı: ${farkGun}`); // Çıktı: 30softmush.com Önemli Notlar Ay İndekslemesi: Date nesnesinin yapıcı fonksiyonunda ve getMonth(), setMonth() gibi yöntemlerinde ay değerleri 0'dan 11'e kadar indekslenir (0 = Ocak, 11 = Aralık). Bu yaygın bir hata kaynağıdır. Saat Dilimi Farklılıkları: Date nesnesi, genellikle yerel saat dilimini kullanır. Ancak, getUTCFullYear(), setUTCHours() gibi UTC ön ekli yöntemler, Evrensel Eşgüdümlü Saat'e göre işlem yapar. Bu durum, özellikle uluslararası uygulamalarda veya sunucu-istemci iletişimi sırasında önemlidir. Tarihleri UTC formatında depolayıp, kullanıcının yerel saat dilimine göre görüntülemek iyi bir pratiktir. String Ayrıştırma Güvenilirliği: new Date(tarihDizisi) yapıcı fonksiyonu, farklı tarayıcılarda ve JavaScript motorlarında farklı dizileri ayrıştırabilir. En güvenilir yöntem, ISO 8601 formatında tarih dizileri kullanmak (örneğin, "YYYY-MM-DDTHH:mm:ss.sssZ" veya "YYYY-MM-DD"). Date.now(): Bu statik yöntem, 1 Ocak 1970 UTC'den bu yana geçen milisaniye sayısını döndürür ve bir Date nesnesi oluşturmadan anlık zaman damgasını almak için hızlı bir yoldur. Performans açısından new Date().getTime()'dan daha etkilidir. Geçersiz Tarihler: Geçersiz bir tarih oluşturmaya çalışırsanız (örneğin, 31 Şubat), Date nesnesi "Invalid Date" (Geçersiz Tarih) döndürür. Bu durumu isNaN(date.getTime()) ile kontrol edebilirsiniz.
avatar
Emin
9
0
Kazanç Makaleleri
youtube-kanali-acarak-gelir-elde-etme-rehberi-hayallerinizi-gercege-donusturun
YouTube Kanalı Açarak Gelir Elde Etme Rehberi: Hayallerinizi Gerçeğe Dönüştürün!
Merhaba sevgili içerik üreticisi adayları ve dijital dünya meraklıları! Bugün, birçoğumuzun hayalini süsleyen, yaratıcılığımızı gelire dönüştürebileceğimiz harika bir platformdan bahsedeceğiz: YouTube. Belki de aklınızda harika bir video fikri var, belki de uzman olduğunuz bir konuda insanlara faydalı olmak istiyorsunuz. Ya da sadece ek gelir elde etmenin yeni yollarını arıyorsunuz. Her ne sebeple olursa olsun, YouTube, milyonlarca insana ulaşabileceğiniz ve potansiyelinizi keşfedebileceğiniz eşsiz bir alan sunuyor. Peki, bir YouTube kanalı açarak gerçekten gelir elde edebilir misiniz? Cevabımız kocaman bir evet! Ama bu yolculukta bilmeniz gereken bazı önemli adımlar ve stratejiler var. Hazırsanız, bu heyecan verici dünyaya birlikte dalalım. YouTube Yolculuğuna Başlarken: Temelleri Atmak Her büyük başarı hikayesi sağlam temeller üzerine kurulur. YouTube serüveninize başlarken de dikkat etmeniz gereken ilk adımlar var. Nişinizi Belirleyin: Hangi konuda içerik üreteceksiniz? Oyun, makyaj, teknoloji, eğitim, gezi, yemek tarifleri... Seçenekler sınırsız. Önemli olan, hem tutkulu olduğunuz hem de bilgi sahibi olduğunuz bir alanı seçmek. Unutmayın, nişiniz ne kadar spesifik olursa, hedef kitlenize ulaşmanız o kadar kolaylaşır ve kendinizi o alanda bir otorite olarak konumlandırabilirsiniz. Nişinizi belirlemek, uzun vadeli başarınızın anahtarıdır. Kanal Adı ve Markalaşma: Kanalınızın adı, markanızın ilk izlenimidir. Akılda kalıcı, nişinizle uyumlu ve telif hakkı sorunu olmayan bir isim seçin. Kanalınızın logosu, banner'ı ve genel görsel kimliği de profesyonel bir görünüm için kritik. Bu unsurlar, izleyicilerinizin kanalınızı tanımasını ve hatırlamasını sağlar. Ekipman ve Başlangıç: Çoğu kişi "Profesyonel ekipmanım yok" diyerek başlama konusunda çekimser kalır. Ancak günümüzde iyi bir akıllı telefon bile başlangıç için yeterli olabilir! Önemli olan, iyi bir ışıklandırma ve net bir ses kalitesi sağlamaktır. Zamanla ve geliriniz arttıkça ekipmanınızı geliştirebilirsiniz. Asıl önemli olan içeriktir, ekipman değil. İçerik Planlaması: Başarılı bir YouTube kanalı rastgele videolardan oluşmaz. Bir içerik takvimi oluşturmak, ne zaman ne tür videolar çekeceğinizi planlamak ve düzenli yayın akışı sağlamak izleyici sadakatini artırır. Konu araştırması yapın, senaryolarınızı hazırlayın ve çekim planınızı oluşturun. Kaliteli İçerik Üretimi: İzleyicileri Bağımlı Hale Getirin YouTube'da kalıcı olmak ve gelir elde etmek istiyorsanız, kaliteli içerik üretmekten asla ödün vermemelisiniz. Video Kalitesi: Görüntü kalitesi kadar ses kalitesi de çok önemlidir. Kimse cızırtılı veya anlaşılmayan bir sesi dinlemek istemez. İyi bir mikrofon edinmek, ilk yatırımınız olabilir. Videolarınızın çözünürlüğü yüksek olsun ve iyi bir ışıklandırma kullanmaya özen gösterin. Kurgu ve Montaj: Videolarınızı sıkıcı olmaktan çıkaracak, akıcı ve dinamik bir kurgu yapın. Giriş, gelişme, sonuç dengesini iyi ayarlayın. Müzik, efektler ve metinler kullanarak videonuzu daha ilgi çekici hale getirin. Ücretsiz veya uygun fiyatlı montaj programlarıyla başlayabilirsiniz. Başlıklar ve Küçük Resimler (Thumbnails): Videonuz ne kadar iyi olursa olsun, eğer kimse tıklamazsa izlenmez. Videonuzun başlığı ve küçük resmi, adeta bir vitrin gibidir. Merak uyandıran, videonun içeriğini yansıtan ve yüksek çözünürlüklü küçük resimler hazırlayın. Başlıklarınızda anahtar kelimeler kullanmayı unutmayın. YouTube SEO: Videolarınızın keşfedilmesini sağlamak için YouTube SEO'sunu iyi kullanmalısınız. Videonuzun başlığına, açıklamasına ve etiketlerine alakalı anahtar kelimeler ekleyin. Açıklamalarınızı detaylı yazın, zaman damgaları ekleyin ve diğer videolarınıza veya ilgili kaynaklara bağlantılar verin. Bu, YouTube algoritmasının videonuzu doğru kitlelere ulaştırmasına yardımcı olur. Kitlenizi Büyütmek ve Etkileşimi Artırmak Para kazanmanın yolu, geniş ve sadık bir kitleye sahip olmaktan geçer. Kitlenizi büyütmek için sürekli çaba göstermelisiniz. Düzenli Yayın Akışı: Belirli aralıklarla video yayınlamak, izleyicilerinizin ne zaman yeni içerik bekleyeceğini bilmesini sağlar ve sadakatlerini pekiştirir. Tutarlı olmak, YouTube algoritması tarafından da ödüllendirilir. Yorumlara Cevap Verin: İzleyicilerinizle etkileşim kurmak, onlarla bir bağ kurmanın en iyi yoludur. Yorumlarına cevap verin, sorularını yanıtlayın ve onların fikirlerine değer verdiğinizi gösterin. Bu, topluluk hissini güçlendirir. Sosyal Medya Entegrasyonu: YouTube kanalınızı diğer sosyal medya platformlarında da tanıtın. Instagram, TikTok, Twitter gibi platformlarda videolarınızdan kısa kesitler paylaşarak daha fazla kişiye ulaşın ve kanalınıza yönlendirin. Ortak Çalışmalar (Collaborations): Benzer nişlerdeki diğer YouTuber'larla işbirliği yapmak, her iki tarafın da kitlesini genişletmek için harika bir yöntemdir. Farklı kitlelere ulaşarak abone sayınızı hızla artırabilirsiniz. YouTube'dan Para Kazanma Yolları: Gelirinizi Çeşitlendirin Şimdi gelelim asıl konuya: YouTube'dan nasıl para kazanılır? Tek bir yöntemle sınırlı kalmak yerine, gelirinizi çeşitlendirmek akıllıca olacaktır. YouTube İş Ortağı Programı (AdSense): Bu, YouTube'dan para kazanmanın en bilinen yoludur. Kanalınızın belirli kriterleri (genellikle 1000 abone ve son 12 ayda 4000 saat genel izlenme süresi veya Shorts videolarında 90 günde 10 milyon geçerli izlenme) karşılaması halinde başvurabilirsiniz. Onaylandığınızda, videolarınızda gösterilen reklamlardan gelir elde edersiniz. Gelir, reklam türüne, izleyici demografisine ve reklamverenlerin bütçesine göre değişiklik gösterir. Bu, çoğu YouTuber için ilk gelir kapısıdır. Marka İş Birlikleri ve Sponsorluklar: Kanalınız büyüdükçe, markalar ürünlerini veya hizmetlerini tanıtmanız için sizinle iletişime geçebilir. Bu, genellikle doğrudan bir ödeme karşılığında veya ürün değişimi şeklinde olur. Nişinizle alakalı ve izleyicilerinize fayda sağlayacak markalarla çalışmak, hem sizin hem de markanın itibarını artırır. Şeffaf olun ve sponsorlu içeriği her zaman belirtin. Ürün Satışı (Merchandise): Kendi markanız altında tişört, kupa, şapka gibi ürünler satarak gelir elde edebilirsiniz. Özellikle sadık ve büyük bir kitleniz varsa, bu yöntem oldukça etkili olabilir. YouTube'un kendi merchandise rafı özelliği de bulunmaktadır. Satış Ortaklığı (Affiliate Marketing): Videolarınızda bahsettiğiniz ürün veya hizmetlerin linklerini açıklama bölümüne ekleyerek, bu linkler üzerinden yapılan her satıştan komisyon kazanabilirsiniz. Amazon Ortaklık Programı gibi platformlar bu konuda size yardımcı olabilir. İzleyicilerinize gerçekten faydalı olabilecek ürünleri tavsiye etmeye özen gösterin. Patreon ve Kitle Fonlaması: İzleyicileriniz, Patreon gibi platformlar aracılığıyla kanalınıza aylık belirli bir miktar ödeme yaparak doğrudan destek olabilirler. Karşılığında onlara özel içerikler, erken erişim veya diğer ayrıcalıklar sunabilirsiniz. Bu, özellikle niş ve sadık bir topluluğa sahip kanallar için harika bir gelir kaynağıdır. Dijital Ürünler ve Hizmetler: Eğer bir uzmansanız, bilginizi e-kitaplar, online kurslar, danışmanlık hizmetleri veya premium içerikler gibi dijital ürün ve hizmetlere dönüştürebilirsiniz. YouTube kanalınız, bu ürünlerinizi tanıtmak ve satmak için güçlü bir platform görevi görür. Örneğin, bir fitness kanalı kişisel antrenman programları satabilir, bir dil öğrenme kanalı özel dersler verebilir. YouTube Premium Geliri: YouTube Premium aboneleri, platformu reklamsız izlerler. Bu aboneler videolarınızı izlediğinde, YouTube bu gelirin bir kısmını içerik üreticileriyle paylaşır. Bu da ek bir pasif gelir kaynağıdır. Süper Sohbet ve Süper Teşekkürler: Canlı yayınlar sırasında izleyicileriniz Süper Sohbet ile mesajlarını öne çıkarabilir veya Süper Teşekkürler ile favori videolarınıza doğrudan destek gönderebilir. Bu da izleyici katılımını teşvik eden ve ek gelir sağlayan özelliklerdir. Başarıya Giden Yolda Önemli İpuçları YouTube'da gelir elde etmek bir maraton, sprint değil. Bu yolculukta sizi motive tutacak ve başarıya taşıyacak bazı önemli noktalar var. Sabırlı Olun ve Tutarlı Kalın: Hiçbir kanal bir gecede fenomen olmaz. Sabırla ve düzenli olarak içerik üretmeye devam edin. Başarı zamanla ve emekle gelecektir. Analitikleri Takip Edin: YouTube Studio'daki analitik verileri düzenli olarak inceleyin. Hangi videolarınız daha çok izleniyor? İzleyicileriniz videonuzun hangi bölümünde ayrılıyor? Hangi demografik yapıya sahip izleyicileriniz var? Bu veriler, içerik stratejinizi geliştirmeniz için paha biçilmez bilgiler sunar. Trendleri Yakalayın ama Kendiniz Olun: Popüler konuları ve trendleri takip etmek önemlidir, ancak kendi özgün sesinizi ve tarzınızı kaybetmeyin. Taklitçi olmak yerine, kendi benzersiz bakış açınızı sunun. Geri Bildirimlere Açık Olun: İzleyicilerinizin yorumları ve eleştirileri, kendinizi geliştirmeniz için bir fırsattır. Olumlu ve yapıcı eleştirileri dikkate alın. Ağ Kurun: Diğer içerik üreticileriyle iletişimde olun, topluluklara katılın. Tecrübe paylaşımı ve destek almak, bu yolculukta yalnız olmadığınızı hissettirecektir. Gördüğünüz gibi, YouTube sadece bir video platformu değil, aynı zamanda ciddi bir gelir potansiyeli sunan, kendi işinizi kurabileceğiniz bir ekosistemdir. Başlamak için mükemmel anı beklemeyin, elinizdeki imkanlarla ilk adımı atın. Unutmayın, en büyük YouTuber'lar bile bir zamanlar sıfırdan başladı. Yaratıcılığınızı serbest bırakın, tutkunuzu paylaşın ve bu heyecan verici dijital dünyada kendi yerinizi oluşturun. Başarılar dileriz!
avatar
Emin
9
0
PHP Makaleleri
php-nedir-kapsamli-bir-rehber-ve-populer-web-dilinin-gelecegi
PHP Nedir? Kapsamlı Bir Rehber ve Popüler Web Dilinin Geleceği
İnternet dünyasının temel taşlarından biri olan PHP, web sitelerinin dinamik ve interaktif olmasını sağlayan güçlü bir programlama dilidir. Milyonlarca web sitesinin ve popüler web uygulamalarının arkasındaki teknoloji olan PHP, özellikle sunucu tarafı (server-side) web geliştirmede kendine sağlam bir yer edinmiştir. Peki, tam olarak PHP nedir? Nasıl çalışır ve neden bu kadar popülerdir? Bu kapsamlı rehberde, PHP'nin ne olduğunu, tarihçesini, temel özelliklerini, kullanım alanlarını, avantajlarını ve geleceğini detaylı bir şekilde inceleyeceğiz. Web geliştirme dünyasına adım atmak isteyenler veya mevcut bilgilerini pekiştirmek isteyenler için bu makale, PHP'nin derinliklerine inen bir yolculuk sunacak. PHP Nedir? Temel Tanımlar ve Amaç PHP, açılımı "Hypertext Preprocessor" olan, geniş ölçüde kullanılan, açık kaynaklı bir sunucu taraflı komut dosyası dilidir. Aslen "Personal Home Page" olarak başlayan bu isim, zamanla dilin yetenekleri genişledikçe değiştirilmiştir. PHP, özellikle web geliştirmeye odaklanmıştır ve HTML içine gömülebilir. Yani, bir HTML belgesi içerisinde PHP kodları yazabilir ve bu kodların sunucu tarafından işlenerek dinamik içerik üretmesini sağlayabilirsiniz. PHP'nin temel amacı, statik HTML sayfalarının aksine, her kullanıcı isteğinde veya belirli koşullara göre değişebilen dinamik web sayfaları oluşturmaktır. Örneğin, bir kullanıcının oturum açtığında farklı bir içerik görmesi, bir e-ticaret sitesinde ürün listelerinin veritabanından çekilmesi veya bir blog sitesinde yorumların anında yayınlanması gibi işlevler, PHP gibi sunucu taraflı diller sayesinde mümkün olur. Bu dinamizm, web sitelerini daha etkileşimli, kişiselleştirilmiş ve güncel hale getirir. PHP, sunucu üzerinde çalışır ve bir web tarayıcısı tarafından istenen bir PHP dosyasını işler. Sunucu, PHP kodunu çalıştırır, sonuçları (genellikle HTML olarak) oluşturur ve bu çıktıyı tarayıcıya gönderir. Tarayıcıya ulaşan tek şey, nihai HTML çıktısıdır; orijinal PHP kodu asla istemci tarafına gönderilmez. Bu, hem güvenlik hem de performans açısından önemli bir avantajdır. PHP'nin Tarihçesi ve Evrimi PHP'nin hikayesi, 1994 yılında Rasmus Lerdorf adında bir geliştiricinin kendi kişisel ana sayfasını yönetmek için bir dizi C dilinde CGI (Common Gateway Interface) ikilisi yazmasıyla başladı. Bu araçlar, form verilerini işlemek ve MySQL veritabanlarıyla etkileşim kurmak gibi basit görevleri yerine getiriyordu. Lerdorf, bu araçları "Personal Home Page/Forms Interpreter" (PHP/FI) olarak adlandırdı ve 1995 yılında kaynak kodunu halka açık hale getirdi. PHP/FI'nin popülaritesi hızla arttı ve diğer geliştiriciler de kendi web sitelerinde kullanmaya başladı. Geri bildirimler ve katkılarla dil gelişmeye devam etti. 1997 yılında, Andi Gutmans ve Zeev Suraski adında iki geliştirici, PHP/FI'nin çekirdeğini yeniden yazmaya karar verdi. Bu yeniden yazım, performans ve modülerlik açısından önemli iyileştirmeler getirdi ve "Zend Engine" adını aldı. 1998'de, bu yeni sürüm PHP 3.0 olarak piyasaya sürüldü ve dilin adını "PHP: Hypertext Preprocessor" olarak değiştirdi. PHP 4.0, 2000 yılında piyasaya sürüldü ve daha da geliştirilmiş bir Zend Engine (Zend Engine 1.0) ile birlikte geldi. Bu sürüm, oturum desteği, çıktı tamponlama ve daha iyi web sunucusu entegrasyonu gibi önemli özellikler ekledi. PHP 4, dilin küresel çapta benimsenmesinde kritik bir rol oynadı. 2004 yılında, PHP 5.0, tamamen yeniden tasarlanmış bir Zend Engine (Zend Engine 2.0) ile birlikte çıktı. Bu sürüm, özellikle nesne yönelimli programlama (OOP) desteğini önemli ölçüde geliştirdi, XML ve veritabanı entegrasyonunu iyileştirdi ve birçok yeni özellik ekledi. PHP 5, uzun yıllar boyunca web geliştirmenin temel direği oldu. En büyük sıçramalardan biri, 2015 yılında piyasaya sürülen PHP 7 serisi oldu. PHP 6 projesi başarısızlıkla sonuçlandıktan sonra, geliştiriciler doğrudan PHP 7'ye geçtiler. PHP 7, Zend Engine 3.0'ı tanıttı ve performans açısından devrim niteliğinde iyileştirmeler getirdi. PHP 5'e kıyasla çoğu uygulamada iki kat daha hızlı çalışabiliyordu. Ayrıca, yeni tür bildirimleri, anonim sınıflar ve daha birçok modern programlama özelliği eklendi. PHP'nin en son büyük sürümü olan PHP 8, 2020 yılında yayınlandı. JIT (Just In Time) derleyici, nitelikler (attributes), adlandırılmış argümanlar, birleşim türleri (union types) ve match ifadesi gibi heyecan verici yeni özellikler sunarak dilin gücünü ve modernliğini daha da artırdı. PHP, sürekli gelişen, güncel ve performans odaklı bir dil olmaya devam etmektedir. PHP Neden Tercih Edilmeli? Avantajları PHP'nin web geliştirme dünyasındaki kalıcı popülaritesi, sunduğu bir dizi önemli avantajdan kaynaklanmaktadır: Açık Kaynak ve Ücretsizdir: PHP, açık kaynaklı bir dildir ve kullanımı tamamen ücretsizdir. Bu, geliştiriciler ve şirketler için maliyetleri düşürür ve geniş bir topluluğun dilin gelişimine katkıda bulunmasına olanak tanır. Geniş Topluluk ve Destek: PHP, dünya çapında milyonlarca geliştiriciye sahip devasa bir topluluğa sahiptir. Bu, sorun yaşadığınızda veya yardıma ihtiyacınız olduğunda kolayca destek bulabileceğiniz anlamına gelir. Forumlar, belgeler, tutorial'lar ve açık kaynaklı projelerle dolu bir ekosistem mevcuttur. Öğrenmesi Kolay: Diğer bazı programlama dillerine kıyasla PHP'nin sözdizimi nispeten basittir ve yeni başlayanlar için öğrenmesi daha kolaydır. Basit web sayfaları oluşturmak için hızla temel bilgilere hakim olunabilir. Esneklik ve Entegrasyon Yeteneği: PHP, HTML ile kolayca entegre olabilir. Ayrıca, çeşitli veritabanları (MySQL, PostgreSQL, Oracle, SQL Server vb.), web sunucuları (Apache, Nginx) ve işletim sistemleri (Linux, Windows, macOS) ile sorunsuz bir şekilde çalışabilir. Bu esneklik, geliştiricilere geniş bir seçenek yelpazesi sunar. Performans: PHP 7 ve PHP 8 ile birlikte performans ciddi oranda artırılmıştır. Özellikle JIT derleyicisi gibi yeni özellikler, PHP uygulamalarının çok daha hızlı çalışmasını sağlamıştır. Bu, büyük ölçekli ve yüksek trafikli web siteleri için kritik bir faktördür. Çok Yönlülük: PHP sadece web siteleri oluşturmakla kalmaz; komut satırı uygulamaları, masaüstü uygulamaları (GTK+ ile) ve hatta API'ler oluşturmak için de kullanılabilir. Zengin Kütüphane ve Çerçeve Ekosistemi: Laravel, Symfony, CodeIgniter gibi güçlü çerçeveler ve WordPress, Drupal, Joomla gibi popüler içerik yönetim sistemleri (CMS) sayesinde geliştirme süreci hızlanır ve daha düzenli hale gelir. Composer gibi paket yöneticileri, kütüphane yönetimini kolaylaştırır. PHP Nerelerde Kullanılır? Yaygın Kullanım Alanları PHP'nin kullanım alanları oldukça geniştir ve internetin önemli bir bölümünü oluşturur. İşte PHP'nin en yaygın kullanıldığı bazı alanlar: Dinamik Web Siteleri ve Uygulamalar: PHP, e-ticaret siteleri, sosyal medya platformları, haber portalları, bloglar ve forumlar gibi dinamik içerik sunan her türlü web sitesinin omurgasını oluşturur. WordPress, Drupal, Joomla gibi dünyanın en popüler CMS'lerinin tamamı PHP ile yazılmıştır. İçerik Yönetim Sistemleri (CMS): Dünya genelindeki web sitelerinin büyük bir yüzdesi WordPress tarafından desteklenmektedir ve WordPress'in kendisi de tamamen PHP ile yazılmıştır. Benzer şekilde, Drupal ve Joomla gibi diğer büyük CMS'ler de PHP kullanır. E-ticaret Platformları: Magento, OpenCart, PrestaShop gibi popüler e-ticaret çözümleri PHP tabanlıdır. Bu platformlar, ürün katalogları, sepet işlevselliği, ödeme ağ geçitleri ve sipariş yönetimi gibi karmaşık işlevleri PHP ile sağlar. API Geliştirme: PHP, RESTful API'ler oluşturmak için sıklıkla kullanılır. Bu API'ler, mobil uygulamalar, tek sayfa uygulamalar (SPA'lar) veya diğer hizmetler arasında veri alışverişini sağlar. Laravel ve Symfony gibi çerçeveler, API geliştirmeyi oldukça kolaylaştırır. Sosyal Medya ve Büyük Ölçekli Uygulamalar: Facebook gibi dünyanın en büyük sosyal medya platformlarından biri, başlangıcından bu yana PHP'yi yoğun bir şekilde kullanmıştır (özel olarak optimize edilmiş bir versiyonu olan Hack ile birlikte). Wikipedia gibi bilgi devleri de PHP kullanır. Komut Satırı Uygulamaları: PHP, sadece web sunucuları üzerinde değil, aynı zamanda komut satırı arayüzü (CLI) uygulamaları oluşturmak için de kullanılabilir. Bu, otomasyon görevleri, veri işleme betikleri veya arka plan işlemleri için idealdir. PHP'nin Çalışma Prensibi PHP'nin çalışma prensibi, bir web sitesini ziyaret ettiğinizde gerçekleşen adımları anlamak için önemlidir. İşte basit bir açıklama: İstemci İsteği: Bir kullanıcı web tarayıcısına bir URL yazar veya bir bağlantıya tıklar. Bu, web sunucusuna bir istek gönderir. Sunucu Tarafında İşleme: Web sunucusu (örneğin Apache veya Nginx), isteğin bir PHP dosyasına yönelik olduğunu anlar. Bu durumda, isteği PHP yorumlayıcısına (veya PHP işlemcisine) iletir. PHP Yorumlayıcısı: PHP yorumlayıcısı (genellikle Zend Engine), PHP dosyasındaki kodu satır satır okur ve çalıştırır. Bu sırada, veritabanı bağlantıları kurabilir, veritabanından veri çekebilir, dosya işlemleri yapabilir, form verilerini işleyebilir ve diğer sunucu tarafı mantığını uygulayabilir. HTML Çıktısı Üretimi: PHP kodu çalıştıktan sonra, genellikle dinamik olarak üretilmiş HTML, CSS ve JavaScript kodlarından oluşan bir çıktı üretir. Sunucu Yanıtı: Web sunucusu, PHP yorumlayıcısından aldığı bu çıktıyı alır ve istemciye (kullanıcının web tarayıcısına) bir HTTP yanıtı olarak geri gönderir. Tarayıcı Tarafında Görüntüleme: Kullanıcının web tarayıcısı, sunucudan gelen HTML çıktısını alır ve ekranda web sayfasını görüntüler. Kullanıcı, PHP kodunu değil, sadece nihai HTML çıktısını görür. Bu süreç, her web sayfası isteği için tekrarlanır ve PHP'nin dinamik ve etkileşimli web deneyimleri sunmasını sağlar. PHP Ekosistemi: Çerçeveler, CMS'ler ve Araçlar PHP'nin gücü, sadece dilin kendisinden değil, aynı zamanda etrafında inşa edilen zengin ekosistemden de gelir. Bu ekosistem, geliştiricilerin daha hızlı, daha verimli ve daha güvenli uygulamalar oluşturmasına yardımcı olan birçok araç, kütüphane ve çerçeve içerir. PHP Çerçeveleri (Frameworks): PHP çerçeveleri, web uygulaması geliştirmeyi hızlandıran ve standartlaştıran yapılandırılmış bir temel sağlar. En popüler PHP çerçeveleri şunlardır: Laravel: Modern, zarif ve güçlü bir çerçevedir. Geliştirici deneyimini ön planda tutar ve birçok yerleşik özellikle gelir. Geniş bir topluluğa ve zengin bir dokümantasyona sahiptir. Symfony: Kurumsal düzeyde uygulamalar için sağlam ve esnek bir çerçevedir. Bileşen tabanlı yapısıyla dikkat çeker ve Laravel de dahil olmak üzere birçok başka projede Symfony bileşenleri kullanılır. CodeIgniter: Hafif ve hızlı bir çerçevedir. Öğrenme eğrisi daha düşüktür ve küçük ile orta ölçekli projeler için idealdir. Zend Framework (Laminas Project): Kurumsal uygulamalar için güçlü ve modüler bir çerçevedir. Büyük projelerde esneklik ve ölçeklenebilirlik sunar. Yii: Yüksek performanslı web uygulamaları geliştirmek için tasarlanmış bir çerçevedir. Kapsamlı özellik setine sahiptir. İçerik Yönetim Sistemleri (CMS): PHP, dünyanın en yaygın kullanılan CMS'lerinin temelini oluşturur: WordPress: Bloglardan e-ticaret sitelerine kadar her türlü web sitesini oluşturmak için kullanılan açık kaynaklı bir CMS'dir. Dünya üzerindeki web sitelerinin %40'ından fazlası WordPress kullanır. Drupal: Kurumsal düzeyde ve karmaşık web siteleri için güçlü ve esnek bir CMS'dir. Güvenlik ve ölçeklenebilirlik konusunda öne çıkar. Joomla: WordPress ve Drupal arasında bir denge sunan, orta ölçekli web siteleri için popüler bir CMS'dir. Paket Yöneticisi (Composer): Composer, PHP için standart bir bağımlılık yöneticisidir. Projelerinizde ihtiyaç duyduğunuz kütüphaneleri ve paketleri kolayca indirmenizi, yönetmenizi ve güncellemenizi sağlar. PHP ekosistemindeki modern geliştirmenin temel taşlarından biridir. Entegre Geliştirme Ortamları (IDE'ler): PhpStorm, VS Code, Sublime Text gibi araçlar, PHP geliştiricilerine kod yazma, hata ayıklama ve proje yönetimi konusunda büyük kolaylıklar sunar. PHP'nin Geleceği Bazı dönemlerde "PHP öldü mü?" gibi sorular ortaya çıksa da, PHP her geçen gün kendini yenileyen ve geliştiren canlı bir dildir. PHP 7 ve PHP 8 ile gelen performans iyileştirmeleri, modern özellikler ve sürekli devam eden geliştirme süreçleri, dilin web geliştirme dünyasındaki yerini sağlamlaştırmıştır. Büyük teknoloji şirketleri (Facebook, Wikipedia) hala PHP'ye yatırım yapmakta, Laravel gibi çerçeveler yenilikçi çözümler sunmakta ve WordPress gibi CMS'ler milyonlarca siteye güç vermeye devam etmektedir. PHP, bulut tabanlı mimariler, mikro hizmetler ve API odaklı geliştirme gibi modern yaklaşımlara da başarıyla adapte olmaktadır. Bu nedenle, PHP'nin geleceği parlak ve web geliştirmenin vazgeçilmez bir parçası olmaya devam edecektir. PHP Öğrenmeye Nasıl Başlanır? Eğer PHP öğrenmeye başlamak istiyorsanız, işte size bazı adımlar ve kaynaklar: Temel Web Bilgisi: HTML ve CSS'i iyi anladığınızdan emin olun. JavaScript'e temel düzeyde hakim olmak da faydalıdır. Geliştirme Ortamı Kurulumu: Yerel bir sunucu ortamı kurmanız gerekecek. XAMPP, WAMP veya MAMP gibi paketler, Apache web sunucusu, MySQL veritabanı ve PHP'yi tek bir pakette sunar ve kurulumu kolaylaştırır. Temel PHP Sözdizimi: Değişkenler, veri tipleri, operatörler, koşullu ifadeler (if/else), döngüler (for/while), fonksiyonlar gibi temel PHP sözdizimini öğrenin. Veritabanı Entegrasyonu: PHP'nin MySQL gibi veritabanlarıyla nasıl etkileşim kurduğunu öğrenin. PDO (PHP Data Objects) veya MySQLi uzantısını kullanarak veritabanı işlemleri yapmayı pratik edin. Nesne Yönelimli Programlama (OOP): Daha büyük ve karmaşık uygulamalar geliştirmek için OOP prensiplerini (sınıflar, nesneler, miras, arayüzler) anlamak önemlidir. Çerçeveler ve CMS'ler: Temel PHP'ye hakim olduktan sonra, Laravel veya Symfony gibi bir PHP çerçevesini veya WordPress gibi bir CMS'i öğrenmeye başlayabilirsiniz. Bu, daha hızlı ve yapılandırılmış geliştirme yapmanızı sağlar. Pratik Yapın: En iyi öğrenme yolu pratik yapmaktır. Küçük projelerden başlayın, hata yapmaktan korkmayın ve sürekli olarak yeni şeyler deneyin. Kaynaklar: PHP'nin resmi belgeleri (php.net), online eğitim platformları (Udemy, Coursera), YouTube kanalları ve geliştirici blogları harika öğrenme kaynaklarıdır. Sıkça Sorulan Sorular (SSS) Bu bölümde, PHP hakkında en çok merak edilen bazı sorulara yanıt bulacaksınız. PHP öğrenmek zor mu? Hayır, PHP genel olarak öğrenmesi kolay bir dildir, özellikle web geliştirme dünyasına yeni başlayanlar için. Sözdizimi diğer bazı dillerden daha basittir ve geniş bir topluluk desteği ile bol miktarda kaynak mevcuttur. Temel HTML ve CSS bilginiz varsa, PHP'ye adapte olmanız daha da kolay olacaktır. PHP hala popüler mi? Kesinlikle evet. Bazı iddialara rağmen, PHP web geliştirme dünyasının en popüler dillerinden biri olmaya devam ediyor. Milyonlarca web sitesi, özellikle WordPress gibi büyük platformlar PHP ile çalışıyor. PHP 7 ve PHP 8 ile gelen performans iyileştirmeleri ve modern özellikler, dilin canlılığını korumasını sağlıyor. PHP ile neler yapılabilir? PHP ile dinamik web siteleri, e-ticaret platformları, bloglar, forumlar, sosyal medya siteleri, API'ler, İçerik Yönetim Sistemleri (CMS) ve hatta bazı komut satırı uygulamaları geliştirebilirsiniz. İnternette gördüğünüz çoğu dinamik içeriğin arkasında PHP veya benzeri bir sunucu taraflı dil bulunur. PHP hangi veritabanlarıyla çalışır? PHP, MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Oracle ve MongoDB gibi birçok farklı veritabanıyla sorunsuz bir şekilde entegre olabilir. En yaygın kullanılanı MySQL'dir, ancak PHP'nin esnekliği sayesinde çoğu modern veritabanıyla çalışabilir. PHP hangi işletim sistemlerinde çalışır? PHP, platformdan bağımsız bir dildir. Linux, Windows, macOS ve Unix tabanlı sistemler dahil olmak üzere hemen hemen tüm büyük işletim sistemlerinde çalışabilir. Bu, geliştiricilere ve sunucu yöneticilerine büyük bir esneklik sunar. PHP mi yoksa Python mu daha iyi? Her iki dilin de kendine özgü güçlü yönleri vardır. PHP, web geliştirmeye odaklanmış ve bu alanda çok güçlü bir ekosisteme sahiptir. Python ise daha genel amaçlı bir dil olup web geliştirmeyle birlikte veri bilimi, yapay zeka ve otomasyon gibi alanlarda da yaygın olarak kullanılır. Seçim, projenizin gereksinimlerine ve kişisel tercihlerinize bağlıdır. PHP mi yoksa JavaScript (Node.js) mi daha iyi? PHP ve Node.js (JavaScript'in sunucu tarafı çalışma zamanı) her ikisi de sunucu tarafı geliştirme için popüler seçeneklerdir. PHP genellikle geleneksel web uygulamaları ve CMS'ler için tercih edilirken, Node.js gerçek zamanlı uygulamalar, mikro hizmetler ve tek sayfa uygulamalarının (SPA) API katmanları için güçlüdür. İki dil de modern web geliştirmede önemli bir rol oynar ve çoğu zaman birlikte kullanılırlar (örneğin, PHP bir web sitesinin arka ucunu sağlarken, JavaScript ön yüzü dinamik hale getirir).
avatar
Emin
9
0
CSS Makaleleri
css-dilinde-css-padding-kullanimi-detayli-rehber
CSS Dilinde CSS Padding Kullanımı: Detaylı Rehber
Cascading Style Sheets (CSS) dilinde padding özelliği, bir elementin içeriği ile kenarlığı arasındaki iç boşluğu ayarlamak için kullanılır. Bu boşluk, elementin görsel alanını genişletir ancak içeriğin kendisini etkilemez. Web sayfalarının düzeninde ve elementler arası görsel hiyerarşide kritik bir role sahiptir. padding, CSS Kutu Modeli'nin (Box Model) önemli bir bileşenidir ve elementlerin tarayıcıda nasıl render edileceğini doğrudan etkiler. Temel Sözdizimi padding özelliği, bir elementin dört tarafındaki iç boşlukları (üst, sağ, alt, sol) tek tek veya toplu olarak tanımlamak için çeşitli sözdizimi biçimlerine sahiptir. En yaygın kullanımları aşağıdaki gibidir: /* Tek tek özellikler */ padding-top: ; padding-right: ; padding-bottom: ; padding-left: ; /* Kısaltılmış (shorthand) özellik - 4 değer */ padding: ; /* Kısaltılmış (shorthand) özellik - 3 değer */ padding: ; /* Kısaltılmış (shorthand) özellik - 2 değer */ padding: ; /* Kısaltılmış (shorthand) özellik - 1 değer */ padding: ; softmush.com Detaylı Açıklama padding özelliği için atanabilecek değerler, piksel (px), yüzde (%), em (em), rem (rem) gibi uzunluk birimleri veya auto gibi anahtar kelimeler olabilir. Negatif değerler padding için geçerli değildir. Tek Tek Özellikler: padding-top, padding-right, padding-bottom ve padding-left özellikleri, elementin belirtilen tarafına doğrudan bir boşluk değeri atar. Bu yöntem, her taraf için farklı değerler gerektiğinde veya belirli bir tarafı hedeflemek istendiğinde kullanışlıdır. Kısaltılmış (Shorthand) Özellik - Dört Değer: padding: üst sağ alt sol; şeklinde kullanılır. Değerler saat yönünde atanır: üst, sağ, alt ve sol. Bu, her bir tarafa farklı bir boşluk vermek için en yaygın ve okunabilir yöntemdir. Kısaltılmış (Shorthand) Özellik - Üç Değer: padding: üst sağ-sol alt; şeklinde kullanılır. Birinci değer üst kenar için, ikinci değer hem sağ hem de sol kenarlar için, üçüncü değer ise alt kenar için geçerlidir. Kısaltılmış (Shorthand) Özellik - İki Değer: padding: üst-alt sağ-sol; şeklinde kullanılır. Birinci değer hem üst hem de alt kenarlar için, ikinci değer ise hem sağ hem de sol kenarlar için geçerlidir. Kısaltılmış (Shorthand) Özellik - Tek Değer: padding: tüm-taraflar; şeklinde kullanılır. Belirtilen tek değer, elementin dört kenarının (üst, sağ, alt, sol) tamamına uygulanır. Bu, tüm kenarlara eşit boşluk vermek istendiğinde en kısa yöntemdir. Pratik Kullanım Örnekleri Aşağıdaki örnekler, padding özelliğinin farklı senaryolarda nasıl kullanılabileceğini göstermektedir. Örnek 1: Tek Değer Kullanımı Tüm kenarlara eşit 20 piksel iç boşluk uygulanması. .kutucuk-1 { background-color: lightblue; border: 1px solid blue; padding: 20px; /* Tüm kenarlara 20px iç boşluk */ } softmush.com Örnek 2: İki Değer Kullanımı Üst ve alt kenarlara 15 piksel, sağ ve sol kenarlara 30 piksel iç boşluk uygulanması. .kutucuk-2 { background-color: lightgreen; border: 1px solid green; padding: 15px 30px; /* Üst/Alt: 15px, Sağ/Sol: 30px */ } softmush.com Örnek 3: Dört Değer Kullanımı Üst kenara 10 piksel, sağa 20 piksel, alta 30 piksel ve sola 40 piksel iç boşluk uygulanması. .kutucuk-3 { background-color: lightcoral; border: 1px solid red; padding: 10px 20px 30px 40px; /* Üst: 10px, Sağ: 20px, Alt: 30px, Sol: 40px */ } softmush.com Örnek 4: Yüzde Değer Kullanımı Elementin genişliğine göre yüzde bazında iç boşluk uygulanması. Yüzde değerler her zaman elementin genişliğine göre hesaplanır, yüksekliğine göre değil. .kutucuk-4 { width: 200px; height: 100px; background-color: lightgray; border: 1px solid black; padding: 10% 5%; /* Üst/Alt: genişliğin %10'u, Sağ/Sol: genişliğin %5'i */ } softmush.com İpuçları/Önemli Notlar Box-sizing: border-box: Varsayılan olarak, padding bir elementin toplam genişliğine ve yüksekliğine eklenir. Bu durum, düzen hesaplamalarını karmaşıklaştırabilir. box-sizing: border-box; özelliğini kullanarak, padding ve border değerlerinin elementin belirtilen genişlik ve yüksekliğine dahil edilmesini sağlayabilirsiniz. Bu, daha öngörülebilir bir düzen oluşturmanıza yardımcı olur. Negatif Değerler: padding özelliği için negatif değerler kullanılamaz. Negatif boşluklar yaratmak için margin özelliğini kullanmanız gerekir. İçerik Genişliği: padding, elementin içeriği ile kenarlığı arasındaki mesafeyi artırdığı için, elementin görsel boyutunu genişletir. Ancak, içeriğin asıl genişliği (width değeri) değişmez, sadece etrafındaki boşluk artar. Görsel Hiyerarşi: padding, metin veya diğer elementlerin kenarlara çok yakın durmasını engeller, böylece okunabilirliği ve genel kullanıcı deneyimini iyileştirir. Kısaltılmış Kullanım Önceliği: Tek tek padding-top, padding-right vb. özellikleri tanımladıktan sonra, kısaltılmış padding özelliğini kullanırsanız, kısaltılmış özellik önceki tanımları geçersiz kılar. Bu nedenle, stil çakışmalarını önlemek için kullanım sırasına dikkat edin.
avatar
Emin
12
0
HTML Makaleleri
html-dilinde-aciklamalarin-comments-etkin-kullanimi
HTML Dilinde Açıklamaların (Comments) Etkin Kullanımı
HTML geliştirme sürecinde, kodun okunabilirliğini artırmak, gelecekteki değişiklikleri kolaylaştırmak ve takım çalışmasını desteklemek amacıyla açıklamalara ihtiyaç duyulur. HTML yorumları, tarayıcılar tarafından göz ardı edilen ve web sayfasında görüntülenmeyen metin blokları eklemenin standart yoludur. Bu kılavuz, HTML yorumlarının sözdizimini, kullanım alanlarını ve en iyi pratiklerini detaylı bir şekilde ele alacaktır. Sözdizimi HTML yorumları, karakter dizisiyle sona erer. Bu iki işaret arasında yer alan tüm içerik, tarayıcı tarafından yorumlanmaz ve sayfa üzerinde gösterilmez. Bu yapı, tek satırlık yorumlar veya birden çok satırı kapsayan yorumlar için kullanılabilir. softmush.com Yukarıdaki sözdiziminde: (kapanış etiketi): Yorum bloğunun sonunu belirtir. Pratik Kullanım Örnekleri HTML yorumları, çeşitli senaryolarda kodun yönetimini ve anlaşılırlığını artırmak için kullanılabilir. 1. Kodun Amacını Açıklama: Bu, özellikle karmaşık veya belirli bir işlevi olan kod bloklarının ne yaptığını belgelemek için kullanılır. Büyük projelerde veya takım ortamında kodun ne işe yaradığını hızlıca anlamak için kritik öneme sahiptir. Ana Sayfa Hakkımızda İletişim Web Sitemize Hoş Geldiniz Bu sayfa, HTML yorumlarının kullanımını göstermektedir. softmush.com 2. Hata Ayıklama ve Geçici Kod Devre Dışı Bırakma: Bir kod bloğunun sayfa üzerindeki etkisini geçici olarak kaldırmak veya bir hatanın kaynağını izole etmek için kullanılabilir. Bu, belirli bir bölümü devre dışı bırakarak sayfanın diğer kısımlarını test etmeyi sağlar. Bu paragraf görünür. Bu paragraf da görünür.softmush.com 3. Tarayıcıya Özel İçerik (Koşullu Yorumlar - Eski IE Sürümleri İçin): Bazı durumlarda, özellikle eski Internet Explorer sürümlerine özel koşullu yorumlar kullanılabilirdi. Bu, belirli bir tarayıcı sürümüne özel CSS veya JavaScript dosyalarını yüklemek için bir yöntemdi. Ancak modern web geliştirme pratiklerinde bu artık nadiren görülür ve genellikle tavsiye edilmez. softmush.com Önemli Notlar ve İpuçları İç İçe Yorumlar: HTML yorumları iç içe kullanılamaz. Yani bir yorum bloğu içinde başka bir yorum bloğu açıp kapatmak beklenen davranışı göstermez ve genellikle hataya yol açar. Örneğin, --> yapısı geçersizdir. Güvenlik: HTML yorumları tarayıcıda görünmese de, sayfanın kaynak kodunda bulunurlar ve herkes tarafından incelenebilirler. Bu nedenle, hassas bilgileri (API anahtarları, parolalar vb.) asla HTML yorumlarında saklamayın. Dosya Boyutu: Aşırıya kaçan veya gereksiz yorumlar, HTML dosyasının boyutunu artırabilir. Genellikle, kodu yeterince açıklayıcı kılan ve gereksiz tekrarı önleyen dengeli bir yaklaşım benimsenmelidir. Kod Temizliği: Üretim ortamına canlıya alınacak kodlarda, geliştirme aşamasındaki geçici yorumları temizlemek iyi bir pratik olabilir. Çoğu otomatik kod küçültme (minifier) aracı, dosya boyutunu azaltmak için yorumları kaldırır. Tarayıcı Desteği: HTML yorum sözdizimi, tüm modern web tarayıcıları tarafından tam olarak desteklenir ve herhangi bir uyumluluk sorunu yaratmaz.
avatar
Emin
11
0
PHP Makaleleri
php-dilinde-isim-alanlari-namespaces-kullanimi
PHP Dilinde İsim Alanları (Namespaces) Kullanımı
PHP'de isim alanları (namespaces), kod organizasyonunu ve çakışmaları önlemeyi sağlayan güçlü bir özelliktir. Büyük ölçekli uygulamalarda veya üçüncü taraf kütüphanelerle çalışırken, aynı isimde sınıfların, arayüzlerin, fonksiyonların veya sabitlerin tanımlanması olası bir sorundur. İsim alanları, bu tür isim çakışmalarını (name collision) engellemek ve kodun daha modüler, okunabilir ve yönetilebilir olmasını sağlamak için bir kapsülleme katmanı sunar. Sözdizimi Bir PHP dosyasında isim alanı tanımlamak için namespace anahtar kelimesi kullanılır. softmush.com Detaylı Açıklama İsim alanı sözdiziminin temel bileşenleri şunlardır: namespace anahtar kelimesi: Bir dosya için isim alanı bildirimini başlatır. Bu bildirim, dosyadaki tüm sınıflar, arayüzler, özellikler (traits), fonksiyonlar ve sabitler için geçerlidir. Vendor\Project\Module: Bu kısım, tanımlanan isim alanının adını temsil eder. Genellikle ters eğik çizgi (\) ile ayrılmış hiyerarşik bir yapı kullanılır. PHP topluluğu arasında kabul gören PSR-4 autoloading standardı, genellikle isim alanı adlarının vendor (sağlayıcı), project (proje) ve module/sub-module (modül/alt modül) yapısını takip etmesini önerir. İsim alanı bildirimi, dosyanın en üstünde, declare anahtar kelimesinden sonra ve PHP kodundan önce yapılmalıdır. Tek bir dosyada birden fazla isim alanı bildirimine izin verilmez. Global isim alanı: Herhangi bir namespace bildirimi olmayan tüm kodlar global isim alanı içinde kabul edilir. Bir isim alanı içinde global isim alanındaki bir sınıfa veya fonksiyona erişmek için \ öneki kullanılır (örneğin, \DateTime). Örnekler Aşağıdaki örnekler, isim alanlarının farklı senaryolarda nasıl kullanıldığını göstermektedir. Örnek 1: Temel İsim Alanı Tanımı ve Kullanımı İki farklı isim alanında aynı isimde sınıfların nasıl tanımlandığını ve kullanıldığını gösterir. softmush.com softmush.com softmush.com Çıktı: Veritabanı bağlantısı oluşturuldu (App\Database). API bağlantısı oluşturuldu (App\Api).softmush.com Örnek 2: use Anahtar Kelimesi ile İsim Alanı İçe Aktarma use anahtar kelimesi, tam nitelikli isimleri (FQN) kısaltmak ve kodu daha okunabilir hale getirmek için kullanılır. softmush.com softmush.com
avatar
Emin
14
0
Python Makaleleri
python-dilinde-python-strings-kullanimi
Python Dilinde Python Strings Kullanımı
Python programlama dilinde string (dize) veri tipi, metinsel verileri temsil etmek için kullanılan temel bir veri yapısıdır. Karakter dizilerinden oluşan stringler, isimlerden cümlelere, dosya yollarından web içeriklerine kadar çok çeşitli verilerin depolanması ve işlenmesi için vazgeçilmezdir. Bu makale, Python'da stringlerin nasıl tanımlandığını, temel sözdizimini ve çeşitli kullanım senaryolarını detaylı bir şekilde açıklamaktadır. Temel Sözdizimi Python'da bir string oluşturmak için metni tek tırnak ('), çift tırnak (") veya üçlü tırnak (''' ya da """) arasına almanız yeterlidir. String değerleri bir değişkene atanabilir veya doğrudan kullanılabilir. # Tek tırnak kullanarak string tanımlama tek_tirnakli_string = 'Merhaba, Dünya!' # Çift tırnak kullanarak string tanımlama cift_tirnakli_string = "Python çok güçlüdür." # Üçlü tırnak kullanarak çok satırlı string tanımlama cok_satirli_string = '''Bu, birden fazla satıra yayılmış bir stringdir.''' softmush.com Detaylı Açıklama Python stringlerinin tanımlanmasında kullanılan farklı tırnak türleri ve özel karakterler, çeşitli senaryolarda esneklik sağlar: Tek Tırnak (') ve Çift Tırnak ("): Bu iki yöntem, tek satırlık stringler için tamamen eşdeğerdir. Hangi yöntemin kullanılacağı genellikle kişisel tercihe veya stringin içinde diğer tırnak türlerinden birini barındırıp barındırmamasına bağlıdır. Örneğin, stringinizde tek tırnak varsa, dışı çift tırnakla tanımlamak karışıklığı önler ve kaçış karakteri kullanma ihtiyacını ortadan kaldırır. Üçlü Tırnak (''' veya """): Üçlü tırnaklar, birden fazla satıra yayılan stringleri tanımlamak için kullanılır. Bu sayede her satır sonuna manuel olarak \n (yeni satır) kaçış karakteri eklemenize gerek kalmaz. Ayrıca, üçlü tırnaklar genellikle fonksiyonlar ve modüller için belgeleme stringleri (docstrings) yazmak için tercih edilir. Kaçış Karakterleri (Escape Characters): Bazı özel karakterleri (örneğin, yeni satır, tab, veya string içinde kullanılan tırnak işareti) string içine eklemek için \ (ters eğik çizgi) ile başlayan kaçış dizileri kullanılır. En yaygın olanları \n (yeni satır), \t (tab), \' (tek tırnak), \" (çift tırnak) ve \\ (ters eğik çizgi) şeklindedir. Ham Dizeler (Raw Strings): Bir string içindeki kaçış karakterlerinin özel anlamlarını kaybetmesini istiyorsanız, stringin başına r veya R harfini ekleyerek ham bir string oluşturabilirsiniz. Bu, özellikle dosya yolları gibi ters eğik çizgi içeren stringlerde kullanışlıdır, çünkü her ters eğik çizgiyi çiftleme ihtiyacını ortadan kaldırır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, Python'da string tanımlamanın ve kullanmanın farklı yollarını göstermektedir. # Örnek 1: Temel String Tanımlama mesaj1 = "Merhaba Python!" mesaj2 = 'Geliştiriciler için güçlü bir araç.' print(mesaj1) print(mesaj2) # Çıktı: # Merhaba Python! # Geliştiriciler için güçlü bir araç. softmush.com # Örnek 2: Tırnak İşaretleri İçeren Stringler # String içinde tek tırnak kullanmak için dışarıda çift tırnak kullanılır. cift_tirnak_ici = "Bu, 'tek tırnak' içeren bir string." print(cift_tirnak_ici) # String içinde çift tırnak kullanmak için dışarıda tek tırnak kullanılır. tek_tirnak_ici = 'Bu, "çift tırnak" içeren bir string.' print(tek_tirnak_ici) # Kaçış karakteri ile aynı tırnak türünü kullanma kacis_karakterli = "Bu, \"çift tırnak\" içeren bir string." print(kacis_karakterli) # Çıktı: # Bu, 'tek tırnak' içeren bir string. # Bu, "çift tırnak" içeren bir string. # Bu, "çift tırnak" içeren bir string. softmush.com # Örnek 3: Çok Satırlı Stringler cok_satirli_mesaj = """ Bu bir çok satırlı mesajdır. """ print(cok_satirli_mesaj) # Çıktı: # # Bu bir # çok satırlı # mesajdır. # softmush.com # Örnek 4: Kaçış Karakterlerinin Kullanımı yeni_satir = "İlk satır.\nİkinci satır." tab_boslugu = "Ad\tSoyad" ters_egik_cizgi = "C:\\Users\\Kullanici" # Ters eğik çizgi için iki tane kullanmalıyız print(yeni_satir) print(tab_boslugu) print(ters_egik_cizgi) # Çıktı: # İlk satır. # İkinci satır. # Ad Soyad # C:\Users\Kullanici softmush.com # Örnek 5: Ham Dizeler (Raw Strings) # Ham string kullanarak kaçış karakterlerini devre dışı bırakma ham_dize = r"C:\Users\Kullanici\belgeler\yeni_dosya.txt" print(ham_dize) # Çıktı: # C:\Users\Kullanici\belgeler\yeni_dosya.txt softmush.com Önemli Notlar Değiştirilemezlik (Immutability): Python'daki stringler değiştirilemez (immutable) veri tipleridir. Bu, bir string oluşturulduktan sonra içeriğinin doğrudan değiştirilemeyeceği anlamına gelir. String üzerinde bir işlem yaptığınızda (örneğin, birleştirme veya değiştirme), aslında yeni bir string nesnesi oluşturulur. Dize Birleştirme: Birden fazla stringi birleştirmek için + operatörünü veya .join() metodunu kullanabilirsiniz. Büyük sayıda stringi birleştirmek için .join() metodu genellikle daha performanslıdır. Dize Metotları: Python stringleri, metin manipülasyonu için zengin bir dizi yerleşik metoda sahiptir (örneğin, .upper(), .lower(), .strip(), .replace(), .split()). Bu metotlar, string nesneleri üzerinde çağrılarak yeni stringler döndürür. F-stringler (Biçimlendirilmiş Dize Literalleri): Python 3.6 ve sonraki sürümlerinde tanıtılan f-stringler, stringleri değişken değerleriyle biçimlendirmenin son derece okunabilir ve etkili bir yoludur. Stringin başına f veya F koyularak tanımlanır ve süslü parantezler içinde değişken isimleri veya ifadeler doğrudan kullanılabilir.
avatar
Emin
12
0
SQL Makaleleri
sql-dilinde-yorum-satiri-kullanimi-kodunuzu-anlasilir-kilin
SQL Dilinde Yorum Satırı Kullanımı: Kodunuzu Anlaşılır Kılın
SQL (Structured Query Language), veritabanlarını yönetmek ve sorgulamak için kullanılan güçlü bir dildir. Ancak, karmaşık sorgular veya uzun betikler yazarken, kodun anlaşılabilirliğini ve sürdürülebilirliğini sağlamak kritik önem taşır. İşte bu noktada yorum satırları devreye girer. Yorumlar, SQL kodunuzun belirli bölümlerini açıklamak, geçici olarak devre dışı bırakmak veya gelecekteki referanslar için notlar eklemek amacıyla kullanılır. Bu kılavuz, SQL dilinde yorum satırlarının nasıl kullanılacağını, temel sözdiziminden pratik örneklere kadar adım adım açıklamaktadır. Temel Sözdizimi SQL, iki ana yorum satırı türünü destekler: Tek Satırlık Yorumlar: Bir satırın geri kalanını yorum olarak işaretler. Çok Satırlık Yorumlar: Birden fazla satırı veya bir satırın belirli bir bölümünü yorum olarak işaretler. Detaylı Açıklama Her bir yorum türünün kendine özgü kullanım şekli ve avantajları bulunmaktadır. Doğru bağlamda doğru yorum türünü kullanmak, kodunuzun netliğini önemli ölçüde artırır. Tek Satırlık Yorumlar: -- Tek satırlık yorumlar, iki kısa çizgi (`--`) ile başlar ve o satırın sonuna kadar devam eder. Bu yorumlar, genellikle belirli bir sorgu satırını veya bir ifadenin amacını açıklamak için kullanılır. Kodun sonuna eklenebileceği gibi, ayrı bir satırda da yer alabilir. Çok Satırlık Yorumlar: /* ... */ Çok satırlık yorumlar, bir eğik çizgi ve bir yıldız işareti (`/*`) ile başlar ve bir yıldız işareti ve bir eğik çizgi (`*/`) ile sona erer. Bu yorumlar, başlangıç ve bitiş işaretleri arasındaki tüm metni, kaç satıra yayılırsa yayılsın, yorum olarak kabul eder. Çok satırlık yorumlar, karmaşık sorgu bloklarını açıklamak, yazar bilgilerini belirtmek veya büyük kod bölümlerini geçici olarak devre dışı bırakmak için idealdir. SQL standartlarına göre, çok satırlık yorumlar birbirini kapsayacak şekilde (iç içe) kullanılamaz. Pratik Kullanım Örnekleri Aşağıdaki örnekler, SQL yorum satırlarının farklı senaryolarda nasıl kullanılabileceğini göstermektedir. Örnek 1: Tek Satırlık Yorum Kullanımı Bu örnek, bir SELECT sorgusundaki her bir sütunun veya koşulun ne anlama geldiğini açıklamak için tek satırlık yorumların nasıl kullanılabileceğini gösterir. SELECT CalisanID, -- Çalışanın benzersiz kimliği Ad, -- Çalışanın adı Soyad, -- Çalışanın soyadı Maas -- Çalışanın mevcut maaşı FROM Calisanlar WHERE DepartmanID = 10; -- Yalnızca 'Satış' departmanındaki çalışanları getirsoftmush.com Yukarıdaki sorguda, her sütunun yanında veya WHERE koşulunun sonunda yer alan yorumlar, kodun ne yaptığını hızlıca anlamaya yardımcı olur. Örnek 2: Çok Satırlık Yorum Kullanımı Bu örnek, bir sorgunun genel amacını açıklamak veya bir fonksiyonun nasıl çalıştığına dair kapsamlı bilgi sağlamak için çok satırlık yorumların nasıl kullanılabileceğini gösterir. /* Bu sorgu, 'Musteriler' tablosundaki tüm müşterileri listeler. Sorgu aşağıdaki bilgileri içerir: - Müşteri Adı - Müşteri Soyadı - Kayıt Tarihi (YYYY-MM-DD formatında) Bu sorgu, raporlama ve analiz amaçlı kullanılmaktadır. */ SELECT MusteriAd, MusteriSoyad, FORMAT(KayitTarihi, 'yyyy-MM-dd') AS KayitTarihiFormatted FROM Musteriler WHERE KayitTarihi >= '2023-01-01' ORDER BY MusteriSoyad;softmush.com Burada, sorgunun başında yer alan çok satırlık yorum, sorgunun genel işlevini ve içerdiği bilgileri detaylı bir şekilde açıklar. Örnek 3: Kod Bloğunu Devre Dışı Bırakma Çok satırlık yorumlar, test veya hata ayıklama sırasında bir kod bloğunu geçici olarak devre dışı bırakmak için de kullanılabilir. SELECT UrunID, UrunAd, Fiyat FROM Urunler /* WHERE Kategori = 'Elektronik' AND Fiyat > 500; */ ORDER BY UrunAd;softmush.com Bu örnekte, WHERE koşulu çok satırlık bir yorum içine alınarak geçici olarak devre dışı bırakılmıştır. Bu sayede, koşulun etkisini test etmek veya sorguyu koşulsuz çalıştırmak kolaylaşır. İpuçları ve Önemli Notlar Okunabilirlik Önceliği: Yorumları, kodun amacını ve karmaşık mantığını açıklamak için kullanın. Açık ve kendini açıklayan kod bölümlerini aşırı yorumlamaktan kaçının. Nedenini Açıklayın, Ne Yaptığını Değil: Kodun ne yaptığını açıklamak yerine (çünkü kod zaten bunu gösterir), neden belirli bir şekilde yazıldığını, hangi iş gereksinimini karşıladığını veya potansiyel tuzakları belirtmek için yorumları kullanın. Geçici Kod Devre Dışı Bırakma: Hata ayıklama veya kodun belirli bölümlerini test etme amacıyla kod bloklarını geçici olarak devre dışı bırakmak için çok satırlık yorumları etkili bir şekilde kullanabilirsiniz. Sürdürülebilirlik: Yorumlar, kodunuzu gelecekteki geliştiriciler (veya kendiniz) için daha anlaşılır hale getirerek bakım maliyetlerini düşürür. Performans Etkisi: Yorumlar, SQL sorgularının performansını etkilemez. Veritabanı motoru, sorguları çalıştırmadan önce yorumları ayrıştırır ve yok sayar. Tutarlılık: Ekibinizle bir yorumlama standardı belirleyin ve buna uyun. Bu, kod tabanının genel okunabilirliğini artırır.
avatar
Emin
9
0
HTML Makaleleri
html-dilinde-html-quotations-kullanimi
HTML Dilinde HTML Quotations Kullanımı
HTML, içeriği yapılandırmak ve anlamlandırmak için çeşitli etiketler sunar. Bu etiketlerden bazıları, alıntıları, kısaltmaları ve iletişim bilgilerini belirtmek için kullanılır. Bu makalede, , , , ve etiketlerinin doğru ve semantik olarak nasıl kullanılacağını teknik detaylarıyla inceleyeceğiz. Bu etiketler, belgenin okunabilirliğini artırmanın yanı sıra, arama motorları ve yardımcı teknolojiler için içeriğin anlamını zenginleştirir. Sözdizimi HTML'de alıntı ve ilgili içerikler için kullanılan ana etiketlerin temel sözdizimi aşağıdaki gibidir. Bu, uzun bir alıntıdır. Kısa bir alıntı: Bu kısa bir alıntıdır. Bir eserin başlığı: Eserin Adı Bir kısaltma: Kısaltma Yazar Adı İletişim Bilgisi softmush.com Her bir etiket, belirli bir semantik amaca hizmet eder ve doğru kullanımı, web içeriğinin erişilebilirliğini ve arama motoru optimizasyonunu (SEO) önemli ölçüde etkiler. : Bu etiket, genellikle başka bir kaynaktan alınan ve birden fazla satır veya paragraf içerebilecek uzun alıntılar için kullanılır. Tarayıcılar genellikle bu içeriği diğer metinlerden girintili olarak gösterir. cite özniteliği, alıntının yapıldığı orijinal kaynağın URL'sini belirtmek için kullanılabilir. : Bu etiket, metin içinde yer alan kısa, satır içi alıntılar için kullanılır. Tarayıcılar, bu etiketin içeriğini otomatik olarak tırnak işaretleri içine alır. cite özniteliği, etiketinde olduğu gibi, alıntının kaynağını belirtir. : Bu etiket, bir eserin (kitap, makale, şarkı, film, heykel vb.) başlığını belirtmek için kullanılır. Yazarın adı için kullanılmamalıdır. Genellikle italik olarak görüntülenir. : Kısaltmalar ve akronimler için kullanılır. title özniteliği, kısaltmanın veya akronimin tam açılımını içerir. Bu, kullanıcıların kısaltmanın ne anlama geldiğini anlamalarına yardımcı olur ve erişilebilirlik açısından önemlidir. : En yakın veya öğesinin iletişim bilgilerini (yazarın adı, e-posta adresi, fiziksel adres, URL vb.) belirtmek için kullanılır. Genellikle italik olarak görüntülenir ve tarayıcılar tarafından paragraf sonu gibi ek boşluklarla ayrılabilir. Örnekler Aşağıdaki örnekler, yukarıda açıklanan etiketlerin gerçek dünya senaryolarında nasıl kullanılacağını göstermektedir. Uzun Bir Alıntı () "Hayal gücü bilgiden daha önemlidir. Bilgi sınırlıdır. Hayal gücü ise tüm dünyayı kapsar." — Albert Einstein softmush.com Kısa Bir Alıntı () Steve Jobs bir keresinde Bugün, Apple telefonu yeniden icat ediyor. demişti. softmush.com Eser Başlığı () En sevdiğim kitaplardan biri Sefillerdir. softmush.com Kısaltma () HTML, HTML kısaltmasıyla bilinir. softmush.com İletişim Bilgileri () Yazar: Jane Doe E-posta: jane.doe@example.com Web Sitesi: example.com softmush.com Önemli Notlar Semantik Doğruluk: Bu etiketlerin temel amacı, içeriğe doğru anlamsal anlam kazandırmaktır. Sadece görsel stil için kullanılmamalıdırlar. Örneğin, girintili bir metin için kullanmak yerine CSS ile stil vermek daha uygundur, ancak metin gerçekten bir alıntıysa kullanılmalıdır. cite Özniteliği: Hem hem de etiketlerindeki cite özniteliği, alıntının kaynağını belirten bir URL içermelidir. Bu özniteliğin değeri görsel olarak tarayıcıda görüntülenmez, ancak arama motorları ve yardımcı teknolojiler tarafından okunabilir. ve Tırnak İşaretleri: etiketi kullanıldığında, tarayıcılar içeriği otomatik olarak uygun tırnak işaretleriyle çevreler. Bu nedenle, metne manuel olarak tırnak işaretleri eklemekten kaçınılmalıdır. ve Yazar: etiketi yalnızca eserin başlığı için kullanılır, yazarın adı için değil. Yazarın adını belirtmek için genellikle normal paragraf etiketleri veya içinde metin kullanılır. Kapsamı: etiketi, genellikle en yakın makalenin () yazarının veya belgenin () sahibinin iletişim bilgilerini belirtir. Genel bir posta adresi veya şirket adresi için kullanılmamalıdır. Erişilebilirlik ve SEO: Bu etiketlerin doğru kullanımı, web içeriğinin ekran okuyucular gibi yardımcı teknolojiler için daha erişilebilir olmasını sağlar. Ayrıca, arama motorlarının içeriği daha iyi anlamasına ve dizine eklemesine yardımcı olarak SEO performansını artırabilir.
avatar
Emin
11
0
Python Makaleleri
python-dilinde-python-casting-kullanimi
Python Dilinde Python Casting Kullanımı
Python programlamada, verilerin farklı tipler arasında dönüştürülmesi sıkça karşılaşılan bir gereksinimdir. Bu süreç, casting olarak adlandırılır ve bir veri tipini başka bir veri tipine çevirmemizi sağlar. Python, bu dönüşümleri gerçekleştirmek için int(), float() ve str() gibi yerleşik fonksiyonlar sunar. Bu mekanizma, özellikle kullanıcı girdilerini işlerken, matematiksel hesaplamalar yaparken veya veriyi belirli bir formatta sunarken büyük önem taşır. Sözdizimi Python'da casting işlemleri, dönüştürülmek istenen yeni veri tipinin adını bir fonksiyon gibi kullanarak gerçekleştirilir. Genel sözdizimi aşağıdaki gibidir: yeni_veri_tipi(dönüştürülecek_değer)softmush.com Burada yeni_veri_tipi, dönüştürme yapılacak hedef veri tipini (örneğin, int, float, str) temsil ederken, dönüştürülecek_değer ise üzerinde işlem yapılacak olan değişken veya değeri ifade eder. Detaylı Açıklama int() Fonksiyonu: Bu fonksiyon, bir değeri tam sayıya dönüştürmek için kullanılır. Kayan noktalı sayıları tam sayıya dönüştürürken ondalık kısmını keser (yuvarlama yapmaz). String değerleri dönüştürürken, stringin yalnızca geçerli bir sayısal tam sayı temsili olması gerekir, aksi takdirde bir ValueError hatası yükseltir. float() Fonksiyonu: Bir değeri kayan noktalı sayıya dönüştürür. Tam sayıları ondalık kısım ekleyerek kayan noktalı sayıya çevirir (örn: 5 -> 5.0). String değerler için, stringin geçerli bir sayısal kayan noktalı sayı temsili olması gerekir, aksi takdirde ValueError hatası verir. str() Fonksiyonu: Herhangi bir veri tipini string (metin) temsiline dönüştürür. Bu fonksiyon, sayıları, listeleri, sözlükleri ve diğer tüm veri tiplerini hatasız bir şekilde stringe çevirebilir. Çoğu zaman en güvenli casting işlemidir. bool() Fonksiyonu: Bir değeri Boole (True veya False) tipine dönüştürür. Python'da belirli değerler "yanlış" (falsy) kabul edilir: 0, 0.0, boş string (""), boş liste ([]), boş tuple (()), boş sözlük ({}), boş küme (set()) ve None. Diğer tüm değerler "doğru" (truthy) kabul edilir. Pratik Kullanım Örnekleri Örnek 1: String'den Sayıya Dönüşüm Bir string ifadeyi tam sayıya ve kayan noktalı sayıya dönüştürme: sayi_string = "123" ondalik_string = "123.45" # String'i int'e dönüştürme int_sayi = int(sayi_string) print(f"'{sayi_string}' (string) -> {int_sayi} (int)") # String'i float'a dönüştürme float_sayi = float(ondalik_string) print(f"'{ondalik_string}' (string) -> {float_sayi} (float)") # Hatalı string dönüşümü (ValueError) # int("hello") # Bu satır bir hata yükseltir # float("123a") # Bu satır bir hata yükseltirsoftmush.com Çıktı: '123' (string) -> 123 (int) '123.45' (string) -> 123.45 (float)softmush.com Örnek 2: Sayılardan String'e Dönüşüm Tam sayı ve kayan noktalı sayıları stringe dönüştürme: tam_sayi = 42 ondalik_sayi = 3.14 # int'i string'e dönüştürme string_tam_sayi = str(tam_sayi) print(f"{tam_sayi} (int) -> '{string_tam_sayi}' (string)") print(f"Dönüşüm sonrası tip: {type(string_tam_sayi)}") # float'ı string'e dönüştürme string_ondalik_sayi = str(ondalik_sayi) print(f"{ondalik_sayi} (float) -> '{string_ondalik_sayi}' (string)") print(f"Dönüşüm sonrası tip: {type(string_ondalik_sayi)}")softmush.com Çıktı: 42 (int) -> '42' (string) Dönüşüm sonrası tip: 3.14 (float) -> '3.14' (string) Dönüşüm sonrası tip: softmush.com Örnek 3: Float'tan Int'e Dönüşüm ve Veri Kaybı Kayan noktalı sayıları tam sayıya dönüştürürken ondalık kısmın nasıl kaybedildiğini gösterir: pi_degeri = 3.14159 buyuk_ondalik = 9.99 # float'ı int'e dönüştürme (ondalık kısım kesilir) int_pi = int(pi_degeri) print(f"{pi_degeri} (float) -> {int_pi} (int)") int_buyuk_ondalik = int(buyuk_ondalik) print(f"{buyuk_ondalik} (float) -> {int_buyuk_ondalik} (int)")softmush.com Çıktı: 3.14159 (float) -> 3 (int) 9.99 (float) -> 9 (int)softmush.com Örnek 4: Boole Dönüşümleri Farklı değerlerin Boole karşılıkları: print(f"bool(10) -> {bool(10)}") print(f"bool(0) -> {bool(0)}") print(f"bool(3.14) -> {bool(3.14)}") print(f"bool('') -> {bool('')}") print(f"bool('Merhaba') -> {bool('Merhaba')}") print(f"bool([]) -> {bool([])}") print(f"bool([1, 2]) -> {bool([1, 2])}") print(f"bool(None) -> {bool(None)}")softmush.com Çıktı: bool(10) -> True bool(0) -> False bool(3.14) -> True bool('') -> False bool('Merhaba') -> True bool([]) -> False bool([1, 2]) -> True bool(None) -> Falsesoftmush.com Önemli Notlar Veri Kaybı Riski: Kayan noktalı bir sayıyı (float) tam sayıya (int) dönüştürürken, ondalık kısım kesilir. Bu, önemli bir veri kaybına yol açabilir. Örneğin, int(3.99) sonucu 3 olacaktır. ValueError Hataları: String ifadeleri sayısal tiplere (int veya float) dönüştürürken, stringin içeriği hedef tip için geçerli bir sayısal formatı temsil etmelidir. Geçersiz bir string (örneğin, "abc" veya "123a") dönüştürülmeye çalışıldığında Python bir ValueError hatası yükseltecektir. Bu tür durumları try-except blokları ile ele almak iyi bir pratik olabilir. Yeni Nesne Oluşturma: Casting işlemi, orijinal değişkenin tipini doğrudan değiştirmez; bunun yerine, dönüştürülmüş değeri içeren yeni bir nesne oluşturur. Orijinal değişkenin tipi aynı kalır. str()'nin Güvenilirliği: str() fonksiyonu, Python'daki hemen hemen her veri tipini bir string temsiline dönüştürebilir. Bu, çoğu zaman en güvenli ve hatasız casting işlemidir. Açık Casting Önemi: Python dinamik tipli bir dil olmasına rağmen, bazı durumlarda açıkça casting yapmak, kodun okunabilirliğini artırır, beklenmeyen davranışları önler ve veri tiplerinin doğru bir şekilde işlendiğinden emin olmanızı sağlar.
avatar
Emin
9
0
SQL Makaleleri
sql-dilinde-or-operatorunun-detayli-kullanimi
SQL Dilinde `OR` Operatörünün Detaylı Kullanımı
Veritabanı sorgularında, belirli kriterlere uyan verileri çekmek genellikle tek bir koşuldan daha fazlasını gerektirir. SQL'deki mantıksal operatörler, bu tür karmaşık filtreleme ihtiyaçlarını karşılamak için güçlü araçlar sunar. Bu operatörlerden biri olan OR operatörü, birden fazla koşuldan en az birinin doğru olması durumunda bir kaydın sonuç kümesine dahil edilmesini sağlar. Bu makale, OR operatörünün sözdizimini, detaylı açıklamasını ve çeşitli pratik kullanım örneklerini ele alarak, veritabanı sorgularınızda çoklu koşulları etkin bir şekilde nasıl birleştireceğinizi göstermeyi amaçlamaktadır. Sözdizimi OR operatörü, genellikle WHERE yan tümcesi içinde, iki veya daha fazla koşulu birleştirmek için kullanılır. Genel sözdizimi aşağıdaki gibidir: SELECT kolon1, kolon2, ... FROM tablo_adı WHERE koşul1 OR koşul2 OR koşul3 ...;softmush.com Burada, koşul1, koşul2, koşul3 vb. birbirine OR operatörü ile bağlanan boolean ifadelerdir. Detaylı Açıklama SELECT kolon1, kolon2, ...: Sorgu sonucunda görüntülenmesini istediğiniz sütunları belirtir. FROM tablo_adı: Verilerin çekileceği veritabanı tablosunun adını belirtir. WHERE: Sorgu sonucunu filtrelemek için kullanılan bir yan tümcedir. Sadece belirtilen koşul veya koşulları karşılayan satırlar sonuç kümesine dahil edilir. koşul1, koşul2, koşul3: Bunlar, değerlendirilecek boolean ifadelerdir. Her koşul, bir sütun adı, bir operatör (=, >, =, 100 OR StokAdedi < 50) AND Kategori = 'Elektronik';softmush.com Bu sorguda parantezler, önce (Fiyat > 100 OR StokAdedi < 50) koşulunun değerlendirilmesini sağlar, ardından bu sonucun Kategori = 'Elektronik' koşuluyla AND operatörü ile birleştirilmesini sağlar. Önemli Notlar Koşulun Doğruluğu: OR operatörü ile birleştirilen koşullardan herhangi biri doğru olduğunda, tüm ifade doğru kabul edilir ve ilgili satır sorgu sonucuna dahil edilir. Performans Etkisi: Çok sayıda OR koşulu kullanmak veya indekslenmemiş sütunlar üzerinde OR uygulamak, sorgu performansını olumsuz etkileyebilir. Özellikle büyük veri kümelerinde bu duruma dikkat edilmelidir. Parantez Kullanımı: AND ve OR operatörlerini aynı WHERE yan tümcesinde kullanırken, işlem önceliğini açıkça belirtmek ve mantıksal hataları önlemek için parantez () kullanmak hayati öneme sahiptir. IN Operatörü Alternatifi: Bir sütunun birden fazla belirli değere eşit olup olmadığını kontrol etmek için OR operatörü yerine IN operatörünü kullanmak daha okunabilir ve genellikle daha performanslı bir alternatiftir. Örneğin, WHERE Sehir = 'Ankara' OR Sehir = 'İzmir' OR Sehir = 'Bursa' yerine WHERE Sehir IN ('Ankara', 'İzmir', 'Bursa') kullanımı tercih edilebilir.
avatar
Emin
16
0
JavaScript Makaleleri
javascript-dilinde-fonksiyon-kullanimi-kapsamli-bir-rehber
JavaScript Dilinde Fonksiyon Kullanımı: Kapsamlı Bir Rehber
JavaScript, web uygulamalarının etkileşimli ve dinamik olmasını sağlayan temel bir programlama dilidir. Bu dilin en güçlü ve esnek yapılarından biri de fonksiyonlardır. Fonksiyonlar, belirli bir görevi yerine getiren yeniden kullanılabilir kod bloklarıdır. Bu yapılar, kodunuzu daha modüler, okunabilir ve bakımı kolay hale getirir. Bu makale, JavaScript fonksiyonlarının temel kullanımını, sözdizimini ve pratik uygulamalarını detaylı bir şekilde ele almaktadır. Sözdizimi JavaScript'te bir fonksiyon tanımlamanın çeşitli yolları vardır. En yaygın olanı, function anahtar kelimesini kullanarak bir fonksiyon bildirimi (function declaration) yapmaktır: function fonksiyonAdi(parametre1, parametre2) { // Fonksiyonun çalıştıracağı kod bloğu // return deger; (İsteğe bağlı: bir değer döndürür) }softmush.com Bu temel yapı, çoğu fonksiyonel ihtiyacınızı karşılayacaktır. Fonksiyonlar ayrıca bir değişkene atanan ifadeler (function expressions) veya modern JavaScript'in getirdiği ok fonksiyonları (arrow functions) olarak da tanımlanabilir. Detaylı Açıklama Yukarıdaki sözdiziminde yer alan her bir bileşen, fonksiyonun çalışma şeklini belirler: function: Bu anahtar kelime, bir fonksiyon tanımladığınızı belirtir. fonksiyonAdi: Fonksiyonunuzu tanımlayan benzersiz bir isimdir. Bu isim aracılığıyla fonksiyona çağrı yaparsınız. Fonksiyon isimleri genellikle camelCase formatında yazılır (örn: hesaplaToplam). (parametre1, parametre2, ...): Parantezler içinde, fonksiyona dışarıdan gönderilebilecek giriş değerlerini temsil eden virgülle ayrılmış parametreler bulunur. Bu parametreler isteğe bağlıdır; bir fonksiyon hiç parametre almayabilir. Fonksiyon çağrıldığında gönderilen değerlere argümanlar denir. { ... }: Küme parantezleri, fonksiyonun çalıştıracağı kod bloğunu içerir. Fonksiyon çağrıldığında bu blok içindeki tüm ifadeler sırayla yürütülür. return deger;: return ifadesi, fonksiyonun çalışmasını durdurur ve belirtilen değeri fonksiyonun çağrıldığı yere geri döndürür. Eğer bir return ifadesi belirtilmezse veya boş bırakılırsa, fonksiyon varsayılan olarak undefined döndürür. Pratik Kullanım Örnekleri Fonksiyonların nasıl çalıştığını daha iyi anlamak için çeşitli kullanım senaryolarını inceleyelim: Örnek 1: Parametresiz Basit Bir Fonksiyon function selamVer() { console.log("Merhaba, JavaScript!"); } // Fonksiyonu çağırma selamVer(); // Konsola "Merhaba, JavaScript!" yazdırırsoftmush.com Bu örnekte, selamVer adında parametre almayan bir fonksiyon tanımlanmış ve çağrılmıştır. Fonksiyon çağrıldığında, içindeki console.log ifadesi çalışır. Örnek 2: Parametre Alan ve Değer Döndüren Fonksiyon function toplamaYap(sayi1, sayi2) { const toplam = sayi1 + sayi2; return toplam; } // Fonksiyonu argümanlarla çağırma ve değeri kullanma let sonuc = toplamaYap(5, 3); console.log("Toplam: " + sonuc); // Konsola "Toplam: 8" yazdırır let baskaSonuc = toplamaYap(10, 20); console.log("Başka Toplam: " + baskaSonuc); // Konsola "Başka Toplam: 30" yazdırırsoftmush.com toplamaYap fonksiyonu iki sayısal parametre alır, bu sayıları toplar ve sonucu return ifadesiyle geri döndürür. Döndürülen değer bir değişkene atanabilir veya doğrudan kullanılabilir. Örnek 3: Fonksiyon İfadeleri (Function Expressions) const carpmaYap = function(a, b) { return a * b; }; // Fonksiyon ifadesini çağırma let carpimSonucu = carpmaYap(4, 6); console.log("Çarpım: " + carpimSonucu); // Konsola "Çarpım: 24" yazdırırsoftmush.com Bu örnekte, bir fonksiyon bir değişkene atanmıştır. Fonksiyon ifadeleri, özellikle bir fonksiyona başka bir argüman olarak geçirilmesi gereken durumlarda (callback fonksiyonları gibi) kullanışlıdır. Örnek 4: Ok Fonksiyonları (Arrow Functions) const kareAl = (sayi) => { return sayi * sayi; }; // Tek parametreli ve tek satırlık fonksiyonlar için daha kısa yazım const kareAlKisa = sayi => sayi * sayi; // Ok fonksiyonlarını çağırma console.log("5'in karesi: " + kareAl(5)); // Konsola "5'in karesi: 25" yazdırır console.log("7'nin karesi (kısa): " + kareAlKisa(7)); // Konsola "7'nin karesi (kısa): 49" yazdırırsoftmush.com ES6 ile tanıtılan ok fonksiyonları, daha kısa ve daha okunaklı fonksiyon tanımlamaları sağlar. Özellikle tek ifadeli fonksiyonlar için return anahtar kelimesi ve küme parantezleri atlanabilir. Ok fonksiyonlarının this anahtar kelimesini ele alış biçimleri de geleneksel fonksiyonlardan farklıdır. Önemli Notlar Fonksiyon Bildirimlerinin Hoisting'i: Fonksiyon bildirimleri (function fonksiyonAdi() { ... } şeklinde tanımlananlar) JavaScript'te hoisting özelliğine sahiptir. Bu, fonksiyonun kod içinde tanımlandığı yerden önce çağrılabileceği anlamına gelir. Ancak, fonksiyon ifadeleri ve ok fonksiyonları hoisting'e tabi değildir; yalnızca tanımlandıkları yerden sonra çağrılabilirler. Parametre Sayısı ve Argümanlar: Bir fonksiyon tanımlarken belirtilen parametre sayısı ile çağrılırken gönderilen argüman sayısı eşleşmek zorunda değildir. Fazla argümanlar göz ardı edilirken, eksik argümanlar undefined değeri alır. Modern JavaScript'te varsayılan parametre değerleri tanımlayarak bu durumu yönetmek mümkündür. return İfadesinin Önemi: return ifadesi, fonksiyonun bir değer üretmesini ve bu değeri dış dünyaya aktarmasını sağlar. Bir fonksiyonun içinde return ifadesine ulaşıldığında, fonksiyonun yürütülmesi anında durur ve kontrolü çağrı yapan koda geri verir. Kapsam (Scope): Fonksiyonlar kendi içlerinde ayrı bir yerel kapsam (local scope) oluşturur. Bir fonksiyon içinde tanımlanan değişkenler (let veya const ile), yalnızca o fonksiyon içinde erişilebilir. Bu, değişken çakışmalarını önlemeye yardımcı olur ve kodun izolasyonunu artırır. Yan Etkilerden Kaçının: Özellikle büyük uygulamalarda, fonksiyonların mümkün olduğunca saf (pure) olmasına özen gösterin. Saf fonksiyonlar, aynı argümanlarla her zaman aynı çıktıyı verir ve dış dünyayı (global değişkenler, DOM vb.) değiştirmez. Bu, kodun test edilebilirliğini ve öngörülebilirliğini artırır.
avatar
Emin
8
0
Python Makaleleri
python-dilinde-konsola-cikti-vermek-print-fonksiyonunun-kapsamli-rehberi
Python Dilinde Konsola Çıktı Vermek: `print()` Fonksiyonunun Kapsamlı Rehberi
Python programlama dilinde, geliştiricilerin kodlarının ilerleyişini izlemeleri, kullanıcıya bilgi sağlamaları veya hata ayıklama süreçlerini yönetmeleri için çıktılar üretmek temel bir gerekliliktir. Bu çıktılar genellikle standart çıktı akımına, yani konsola yönlendirilir. Python'ın yerleşik print() fonksiyonu, bu tür çıktı işlemlerini kolay ve etkili bir şekilde gerçekleştirmek için tasarlanmıştır. Bu makale, print() fonksiyonunun detaylı kullanımını, sözdizimini ve çeşitli senaryolardaki pratik uygulamalarını kapsamlı bir şekilde ele alacaktır. Sözdizimi Python'da print() fonksiyonunun genel sözdizimi aşağıdaki gibidir: print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)softmush.com Bu sözdizimi, fonksiyonun alabileceği tüm parametreleri ve varsayılan değerlerini göstermektedir. Her bir parametrenin özel bir amacı vardır ve çıktının nasıl biçimlendirileceğini veya nereye yönlendirileceğini kontrol etmek için kullanılabilir. Detaylı Açıklama *objects: Fonksiyona virgülle ayrılmış olarak geçirilen sıfır veya daha fazla nesneyi temsil eder. Bu nesneler sayısal değerler, dizeler (string), listeler veya diğer Python veri yapıları olabilir. print() fonksiyonu, bu nesnelerin her birini string'e dönüştürür ve belirlenen sıra ile çıktı verir. sep=' ' (separator): Çıktı verilecek nesneler arasına yerleştirilecek ayırıcı dizeyi belirtir. Varsayılan olarak, nesneler arasında tek bir boşluk karakteri kullanılır. Bu parametre, nesneler arasına farklı bir karakter veya karakter dizisi eklemek için değiştirilebilir. end='\n' (end): Çıktı tamamlandıktan sonra eklenecek dizeyi belirtir. Varsayılan olarak, çıktının sonuna bir yeni satır karakteri (\n) eklenir, bu da sonraki print() çağrısının çıktısının yeni bir satırdan başlamasına neden olur. Bu parametre, çıktının aynı satırda devam etmesini sağlamak veya farklı bir son karakter eklemek için kullanılabilir. file=sys.stdout: Çıktının yazılacağı dosya benzeri nesneyi belirtir. Varsayılan değer sys.stdout'dur, bu da çıktının standart konsola gönderildiği anlamına gelir. Bu parametreyi değiştirerek çıktıyı bir metin dosyasına veya başka bir akışa yönlendirmek mümkündür. flush=False: Bu parametre, tamponlanmış çıktının anında temizlenip temizlenmeyeceğini kontrol eder. Varsayılan olarak False'tur, bu da çıktının dahili bir tamponda biriktirildiği ve belirli aralıklarla veya tampon dolduğunda yazıldığı anlamına gelir. True olarak ayarlandığında, çıktı anında tampondan boşaltılır ve hedef cihaza (örneğin konsola) yazılır. Bu, özellikle gerçek zamanlı izleme veya belirli durumlarda çıktıların hemen görünmesi gerektiğinde faydalıdır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, print() fonksiyonunun farklı senaryolarda nasıl kullanılabileceğini göstermektedir. 1. Temel Çıktı print("Merhaba Dünya!") print(123) print(3.14) print(True)softmush.com Çıktı: Merhaba Dünya! 123 3.14 Truesoftmush.com 2. Birden Fazla Nesne ile Çıktı ad = "Ayşe" yas = 30 print("Ad:", ad, "Yaş:", yas)softmush.com Çıktı: Ad: Ayşe Yaş: 30softmush.com 3. sep Parametresi Kullanımı print("elma", "armut", "kiraz", sep="-") print("www", "softmush", "com", sep=".")softmush.com Çıktı: elma-armut-kiraz www.softmush.comsoftmush.com 4. end Parametresi Kullanımı print("Bu birinci satır.", end=" ") print("Bu ise aynı satırda devam ediyor.") print("Bu da yeni bir satır.")softmush.com Çıktı: Bu birinci satır. Bu ise aynı satırda devam ediyor. Bu da yeni bir satır.softmush.com 5. Dosyaya Çıktı Yazma (file Parametresi) Bu örnek için önce bir dosya nesnesi oluşturulması gerekir. import sys # Dosyayı yazma modunda aç with open("log.txt", "w") as f: print("Bu metin dosyaya yazılacak.", file=f) print("Bu da ikinci satır.", file=f) # Konsola yazma (varsayılan) print("Bu metin konsola yazılacak.")softmush.com Çıktı (log.txt dosyasında): Bu metin dosyaya yazılacak. Bu da ikinci satır.softmush.com Çıktı (Konsolda): Bu metin konsola yazılacak.softmush.com 6. String Formatlama ile Çıktı print() fonksiyonu genellikle f-string'ler (biçimlendirilmiş dize değişmezleri) veya str.format() metodu ile birlikte kullanılır, bu da çıktıların daha okunabilir ve düzenli olmasını sağlar. isim = "Can" yas = 25 # f-string kullanımı (Python 3.6+) print(f"Merhaba, benim adım {isim} ve {yas} yaşındayım.") # str.format() metodu kullanımı print("Merhaba, benim adım {} ve {} yaşındayım.".format(isim, yas)) # Eski stil % formatlama print("Merhaba, benim adım %s ve %d yaşındayım." % (isim, yas))softmush.com Çıktı: Merhaba, benim adım Can ve 25 yaşındayım. Merhaba, benim adım Can ve 25 yaşındayım. Merhaba, benim adım Can ve 25 yaşındayım.softmush.com Önemli Notlar Fonksiyon Olarak Kullanım: Python 3 ve sonraki sürümlerinde print, bir fonksiyondur ve parantezlerle çağrılmalıdır (örneğin print("...")). Python 2'de ise bir ifadeydi (statement) ve parantez kullanmak zorunlu değildi (örneğin print "..."). Hata Ayıklamada Önemi: print() fonksiyonu, bir programın farklı noktalarındaki değişken değerlerini veya program akışını gözlemlemek için hızlı ve etkili bir hata ayıklama aracıdır. Performans Etkileri: Özellikle büyük döngüler içinde veya yüksek performans gerektiren uygulamalarda aşırı print() kullanımı programın performansını olumsuz etkileyebilir, çünkü her çıktı işlemi I/O (Giriş/Çıkış) maliyeti taşır. sys.stdout ve sys.stderr: Standart çıktı (sys.stdout) genellikle normal program mesajları için kullanılırken, hata mesajları ve uyarılar için standart hata akımı (sys.stderr) kullanılması iyi bir pratiktir. print() fonksiyonunu file=sys.stderr ile kullanarak hata mesajlarını ayrı bir akıma yönlendirebilirsiniz. flush=True Kullanımı: Ağ iletişimi, interaktif uygulamalar veya uzun süreli işlemler gibi durumlarda, çıktının anında görünmesi kritik olabilir. Bu tür senaryolarda flush=True parametresi, tampondaki verilerin hemen gönderilmesini sağlar.
avatar
Emin
8
0
SQL Makaleleri
sql-dilinde-and-operatorunun-kullanimi
SQL Dilinde `AND` Operatörünün Kullanımı
SQL (Yapılandırılmış Sorgu Dili), veritabanlarından veri almak ve manipüle etmek için kullanılan standart dildir. Veri sorgularken, belirli kriterlere uyan kayıtları filtrelemek sıkça karşılaşılan bir gereksinimdir. Bu filtreleme işlemlerinde, birden fazla koşulu aynı anda değerlendirmek için mantıksal operatörler kullanılır. AND operatörü, bu mantıksal operatörlerden biridir ve WHERE cümleciği içinde iki veya daha fazla koşulun tümünün doğru olması durumunda kayıtları döndürmek için elzemdir. Bu makalede, SQL AND operatörünün detaylı kullanımını, sözdizimini ve pratik örneklerini inceleyeceğiz. Sözdizimi AND operatörünün temel sözdizimi, bir SELECT ifadesi içindeki WHERE cümleciğinde aşağıdaki gibi yapılandırılır: SELECT kolon1, kolon2, ... FROM tablo_adi WHERE kosul1 AND kosul2 AND kosul3 ...;softmush.com Detaylı Açıklama SELECT kolon1, kolon2, ...: Bu kısım, sorgu sonucunda görmek istediğiniz sütunları belirtir. Tüm sütunları seçmek için * karakterini kullanabilirsiniz. FROM tablo_adi: Veri çekmek istediğiniz tabloyu belirtir. WHERE kosul1 AND kosul2 AND kosul3 ...: Bu kısım, AND operatörünün kalbidir. WHERE cümleciği, belirtilen koşulların doğru olduğu satırları filtreler. AND operatörü, kendisinden önce ve sonra gelen koşulların (kosul1, kosul2, kosul3 vb.) tümünün aynı anda doğru (TRUE) olması durumunda o satırı sonuç kümesine dahil eder. Eğer koşullardan herhangi biri yanlış (FALSE) ise, o satır sonuç kümesine dahil edilmez. Birden fazla AND operatörü kullanarak istediğiniz kadar koşulu birleştirebilirsiniz. Her kosul, karşılaştırma operatörleri (=, , =, veya !=) veya diğer mantıksal operatörler (LIKE, IN, BETWEEN vb.) ile oluşturulabilir. Pratik Kullanım Örnekleri Aşağıdaki örnekler, bir Personel tablosu üzerinden AND operatörünün farklı senaryolarda nasıl kullanıldığını göstermektedir. Personel tablosunun PersonelID, Ad, Soyad, Departman, Maas ve DogumTarihi sütunlarına sahip olduğunu varsayalım. Örnek 1: İki Basit Koşulu Birleştirme Departmanı 'Satış' olan ve maaşı 5000'den yüksek olan tüm personelin adını ve soyadını listeleyelim. SELECT Ad, Soyad FROM Personel WHERE Departman = 'Satış' AND Maas > 5000;softmush.com Açıklama: Bu sorgu, Departman sütununun değeri 'Satış' olan VE Maas sütununun değeri 5000'den büyük olan satırları getirir. Her iki koşul da aynı anda sağlanmalıdır. Örnek 2: Üç Koşulu Birleştirme Departmanı 'Muhasebe' olan, maaşı 6000 ile 8000 arasında olan ve 1990 yılından sonra doğmuş personeli listeleyelim. SELECT Ad, Soyad, Maas, DogumTarihi FROM Personel WHERE Departman = 'Muhasebe' AND Maas BETWEEN 6000 AND 8000 AND DogumTarihi > '1990-01-01';softmush.com Açıklama: Burada üç koşul AND ile birleştirilmiştir: Departman 'Muhasebe' olacak, Maas 6000 ile 8000 (dahil) arasında olacak VE DogumTarihi 1990'ın ilk gününden sonra olacak. Tüm bu koşullar doğru olduğunda satır sonuç kümesine dahil edilir. Örnek 3: `AND` ve `OR` Operatörlerini Birlikte Kullanma Parantez kullanımı, mantıksal operatörlerin değerlendirme sırasını belirlemek için kritik öneme sahiptir. Departmanı 'İnsan Kaynakları' olan VE (maaşı 7000'den az VEYA 1985'ten önce doğmuş) personeli listeleyelim. SELECT Ad, Soyad, Departman, Maas, DogumTarihi FROM Personel WHERE Departman = 'İnsan Kaynakları' AND (Maas < 7000 OR DogumTarihi < '1985-01-01');softmush.com Açıklama: Bu sorguda, parantezler içindeki OR koşulu önce değerlendirilir. Yani, departman 'İnsan Kaynakları' olacak VE (maaş 7000'den az olacak VEYA doğum tarihi 1985'ten önce olacak) koşulu sağlanacak. Parantezler olmasaydı, AND operatörü OR operatöründen daha yüksek önceliğe sahip olduğu için sorgu farklı bir sonuç verebilirdi. Önemli Notlar Mantıksal Öncelik: SQL'de mantıksal operatörlerin belirli bir öncelik sırası vardır. NOT en yüksek önceliğe sahipken, onu AND ve ardından OR takip eder. Bu, AND operatörlerinin OR operatörlerinden önce değerlendirileceği anlamına gelir. Karmaşık koşullarda beklenen sonucu almak için parantez () kullanmak her zaman iyi bir uygulamadır. Performans: WHERE cümleciğindeki koşulların sırası, bazı veritabanı sistemlerinde sorgu performansını etkileyebilir. Genellikle, en kısıtlayıcı koşulu (en az sayıda satırı eleyecek koşulu) ilk sıraya koymak veya dizinli (indexlenmiş) sütunlar üzerindeki koşulları öne almak performansı artırabilir. Ancak modern veritabanı optimizatörleri bu tür durumları genellikle iyi yönetir. Boş Değerler (NULL): NULL değerleri ile karşılaştırma yaparken dikkatli olun. NULL AND TRUE veya NULL AND FALSE ifadelerinin sonucu NULL olur. WHERE cümleciği yalnızca TRUE sonuçlarını döndürdüğü için, NULL sonuçlar elenir. NULL değerleri kontrol etmek için IS NULL veya IS NOT NULL operatörlerini kullanmalısınız. Okunabilirlik: Birden fazla AND koşulu kullanırken, sorgunuzu satırlara ayırarak ve girinti kullanarak daha okunaklı hale getirin.
avatar
Emin
13
0
JavaScript Makaleleri
javascript-dilinde-js-numbers-kullanimi
JavaScript Dilinde JS Numbers Kullanımı
JavaScript, web geliştirmenin temelini oluşturan dinamik bir programlama dilidir. Bu dilin en temel ve sıkça kullanılan veri tiplerinden biri de sayılardır (Numbers). JavaScript'teki sayılar, hem tam sayıları (integer) hem de ondalıklı sayıları (floating-point) temsil edebilir ve esnek yapısıyla matematiksel işlemler için güçlü bir temel sunar. Sözdizimi JavaScript'te sayıları tanımlamak son derece basittir. Değişkenlere doğrudan sayısal değerler atayarak veya Number objesini kullanarak sayıları oluşturabilirsiniz. const tamSayi = 42; const ondalikliSayi = 3.14; const negatifSayi = -5; const bilimselSayi = 1.23e5; // 123000 const hexadecimalSayi = 0xFF; // 255 const octalSayi = 0o377; // 255 (modern JS'te 0o öneki ile) const binarySayi = 0b11111111; // 255 const numberObjesi = new Number(100); // Nesne olarak sayı oluşturma (nadiren kullanılır) softmush.com Yukarıdaki örnekler, JavaScript'te sayıların nasıl farklı şekillerde tanımlanabileceğini göstermektedir. Çoğu durumda, doğrudan sayısal değer ataması tercih edilir. JavaScript'teki sayılar, 64-bit çift duyarlıklı kayan nokta sayıları (double-precision floating-point numbers) olarak IEEE 754 standardına göre saklanır. Bu, hem tam sayıları hem de ondalıklı sayıları temsil edebildikleri anlamına gelir. Belirli sınırlar dahilinde, tam sayı değerleri de bu kayan nokta formatında hassasiyet kaybı olmadan saklanabilir. Sayılar, decimal (onluk), hexadecimal (onaltılık, 0x öneki), octal (sekizlik, 0o öneki) ve binary (ikilik, 0b öneki) formatlarında ifade edilebilir. Ayrıca, çok büyük veya çok küçük sayıları bilimsel gösterim (örneğin, 1.23e-5) kullanarak da tanımlamak mümkündür. JavaScript'in sayıları ayrıca bazı özel değerlere sahiptir: NaN (Not-a-Number), geçersiz veya tanımsız matematiksel işlemlerin sonucunu temsil eder. Infinity ve -Infinity ise sıfıra bölme veya sayısal limitlerin aşılması gibi durumlarda ortaya çıkan sonsuz pozitif ve negatif değerlerdir. Pratik Kullanım Örnekleri Sayı tanımlamaları ve aritmetik işlemler, JavaScript'te sıkça karşılaşılan senaryolardır. // Örnek 1: Temel Sayı Tanımlamaları ve İşlemler const sayi1 = 10; const sayi2 = 5; console.log(sayi1 + sayi2); // Çıktı: 15 console.log(sayi1 - sayi2); // Çıktı: 5 console.log(sayi1 * sayi2); // Çıktı: 50 console.log(sayi1 / sayi2); // Çıktı: 2 console.log(sayi1 % sayi2); // Çıktı: 0 (Modül operatörü) softmush.com Kayan noktalı sayılarla çalışırken hassasiyetin önemli olduğu durumlar olabilir. // Örnek 2: Kayan Noktalı Sayılar ve Hassasiyet const fiyat1 = 0.1; const fiyat2 = 0.2; console.log(fiyat1 + fiyat2); // Çıktı: 0.30000000000000004 (Kayan nokta hassasiyeti) // Hassasiyet sorununu aşmak için bir yöntem (örneğin, tam sayılarla çalışıp sonra bölme) console.log((fiyat1 * 10 + fiyat2 * 10) / 10); // Çıktı: 0.3 softmush.com Özel sayı değerleri olan NaN ve Infinity, belirli durumlarda matematiksel işlemlerin sonucunu belirtmek için kullanılır. // Örnek 3: Özel Sayı Değerleri (NaN, Infinity) console.log(0 / 0); // Çıktı: NaN (Tanımsız işlem) console.log(10 / 0); // Çıktı: Infinity (Pozitif sonsuz) console.log(-10 / 0); // Çıktı: -Infinity (Negatif sonsuz) console.log(isNaN(0 / 0)); // Çıktı: true (Bir değerin NaN olup olmadığını kontrol eder) console.log(isFinite(10 / 0)); // Çıktı: false (Bir değerin sonlu olup olmadığını kontrol eder) softmush.com Farklı sayı tabanlarında değer tanımlama ve bilimsel gösterim, özel durumlar için kullanışlıdır. // Örnek 4: Sayı Tabanları ve Bilimsel Gösterim const hexValue = 0xA; // Onaltılık 10 const binValue = 0b1010; // İkilik 10 const sciValue = 2.5e3; // 2.5 * 10^3 = 2500 console.log(hexValue); // Çıktı: 10 console.log(binValue); // Çıktı: 10 console.log(sciValue); // Çıktı: 2500 softmush.com Önemli Notlar JavaScript'teki tüm sayılar 64-bit kayan nokta (double-precision floating-point) formatında saklanır. Bu, tam sayılar için bile geçerlidir ve belirli büyük tam sayılarda hassasiyet kaybına yol açabilir (Number.MAX_SAFE_INTEGER ve Number.MIN_SAFE_INTEGER dışındaki değerler için). Kayan nokta aritmetiği nedeniyle, bazı ondalıklı sayı işlemleri beklenen kesin sonucu vermeyebilir (örneğin, 0.1 + 0.2). Finansal hesaplamalar gibi hassasiyet gerektiren durumlarda bu durum göz önünde bulundurulmalıdır. NaN (Not-a-Number), kendisiyle bile eşit değildir (NaN === NaN ifadesi false döner). Bir değerin NaN olup olmadığını kontrol etmek için Number.isNaN() veya global isNaN() fonksiyonlarını kullanın. BigInt veri tipi, JavaScript'in standart Number tipinin ötesindeki çok büyük tam sayıları güvenli bir şekilde temsil etmek için kullanılır. Eğer Number.MAX_SAFE_INTEGER'dan büyük tam sayılarla çalışmanız gerekiyorsa BigInt düşünülmelidir. Sayıları string'e dönüştürmek için String() fonksiyonu, .toString() metodu veya şablon değişmezleri (template literals) kullanılabilir. String'leri sayıya dönüştürmek için ise Number(), parseInt() veya parseFloat() fonksiyonları mevcuttur.
avatar
Emin
8
0
CSS Makaleleri
css-dilinde-css-backgrounds-kullanimi
CSS Dilinde CSS Backgrounds Kullanımı
CSS (Basamaklı Stil Sayfaları), web sayfalarının görsel sunumunu kontrol eden temel bir dildir. Bir HTML öğesinin arka planını tanımlamak, genel kullanıcı deneyimini ve estetiği büyük ölçüde etkileyen kritik bir tasarım öğesidir. Bu kılavuz, CSS'in arka plan özelliklerinin kapsamlı kullanımını, sözdizimini, detaylı açıklamalarını ve pratik örneklerini adım adım sunarak, web geliştiricilerinin bu güçlü aracı etkili bir şekilde kullanmalarını sağlamayı amaçlamaktadır. Temel Sözdizimi CSS arka plan özellikleri, bireysel olarak veya birleşik bir background kısaltma özelliği aracılığıyla tanımlanabilir. Kısaltma özelliği, birden fazla arka plan özelliğini tek bir bildirimde birleştirerek kodun daha okunabilir ve yönetilebilir olmasını sağlar. .element { background: / ; } softmush.com Detaylı Açıklama background kısaltma özelliği, aşağıdaki alt özelliklerin bir kombinasyonunu alabilir: background-color: Bir öğenin arka plan rengini ayarlar. Geçerli değerler arasında renk anahtar kelimeleri (red), onaltılık kodlar (#FF0000), RGB/RGBA (rgb(255,0,0)) veya HSL/HSLA (hsl(0, 100%, 50%)) bulunur. background-image: Bir öğenin arka plan görselini ayarlar. Genellikle url() fonksiyonu ile bir görselin yolunu belirtir veya linear-gradient(), radial-gradient() gibi CSS gradyan fonksiyonlarını kullanır. background-repeat: Arka plan görselinin nasıl tekrar edeceğini belirler. Yaygın değerler repeat (varsayılan), repeat-x, repeat-y, no-repeat, space ve round'dur. background-position: Arka plan görselinin başlangıç konumunu ayarlar. Anahtar kelimeler (top, center, bottom, left, right), yüzdeler (50% 50%) veya uzunluk birimleri (10px 20px) ile belirtilebilir. background-size: Arka plan görselinin boyutunu ayarlar. Anahtar kelimeler (auto, cover, contain), yüzdeler veya uzunluk birimleri ile belirtilir. background-position özelliğinden sonra bir eğik çizgi (/) ile ayrılır. background-attachment: Arka plan görselinin belge kaydırıldığında nasıl davranacağını belirler. scroll (varsayılan, öğe ile birlikte kayar), fixed (pencereye sabit kalır) ve local (öğe içeriği ile birlikte kayar) değerlerini alır. background-origin: Arka plan görselinin konumlandırma alanını belirler. padding-box (varsayılan), border-box ve content-box değerlerini alır. Genellikle background-position ve background-repeat ile etkileşime girer. background-clip: Arka planın (rengi veya görseli) nerede kırpılacağını belirler. border-box (varsayılan), padding-box, content-box ve text değerlerini alır. text değeri, arka planı metnin içine kırparak ilgi çekici görsel efektler oluşturabilir. Pratik Kullanım Örnekleri Aşağıdaki örnekler, farklı arka plan özelliklerinin nasıl kullanılabileceğini göstermektedir. Örnek 1: Basit Arka Plan Rengi ve Görseli Bir öğeye düz bir arka plan rengi ve tekrarlamayan bir görsel atama. .container-1 { background-color: #f0f0f0; background-image: url('images/pattern.png'); background-repeat: no-repeat; background-position: center center; padding: 20px; border: 1px solid #ccc; height: 150px; } softmush.com Örnek 2: Kısaltma Özelliği ve Görsel Boyutlandırma background kısaltma özelliğini kullanarak bir görseli tüm alanı kaplayacak şekilde ayarlama. .container-2 { background: url('images/hero.jpg') no-repeat center center / cover; height: 300px; color: white; text-align: center; display: flex; align-items: center; justify-content: center; } softmush.com Örnek 3: Gradyan Arka Plan CSS linear-gradient() fonksiyonunu kullanarak bir gradyan arka plan oluşturma. .container-3 { background: linear-gradient(to right, #4CAF50, #8BC34A); height: 100px; padding: 15px; color: white; text-align: center; } softmush.com Örnek 4: Çoklu Arka Planlar Birden fazla arka plan görselini üst üste kullanma. .container-4 { background: url('images/overlay.png') no-repeat top left, /* En üstteki görsel */ url('images/background-texture.jpg') repeat; /* Alttaki görsel */ background-size: 50% auto, auto; height: 250px; padding: 20px; color: #333; } softmush.com Örnek 5: Sabit Arka Plan (Paralaks Etkisi) background-attachment: fixed; kullanarak kaydırmada sabit kalan bir arka plan oluşturma. .container-5 { background-image: url('images/parallax.jpg'); background-attachment: fixed; background-position: center; background-repeat: no-repeat; background-size: cover; height: 400px; display: flex; align-items: center; justify-content: center; color: white; font-size: 2em; text-shadow: 2px 2px 4px rgba(0,0,0,0.5); } softmush.com Önemli Notlar Kısaltma Sırası: background kısaltma özelliği kullanılırken, özelliklerin sırası genellikle esnektir. Ancak, background-position ve background-size birlikte kullanıldığında, position önce gelir ve / ile size'dan ayrılır (örn: center / cover). Çoklu Arka Planlar: Birden fazla background-image kullanırken, ilk belirtilen görsel en üstte, son belirtilen görsel ise en altta katmanlanır. Bu sıralamayı tasarıma göre ayarlamak önemlidir. Performans: Büyük boyutlu veya çok sayıda arka plan görseli kullanmak sayfa yükleme sürelerini olumsuz etkileyebilir. Görselleri optimize etmek (sıkıştırma, doğru format kullanma) her zaman önerilir. Erişilebilirlik: Arka plan görselleri veya renkleri üzerine metin yerleştirirken, yeterli kontrast olduğundan emin olun. Metnin okunabilirliğini sağlamak için color özelliği ile metin rengini doğru ayarlamak kritik öneme sahiptir. background-clip: text: Bu özellik, arka planı yalnızca metnin kapladığı alana kırparak metnin içini bir görsel veya gradyanla doldurmanızı sağlar. Genellikle -webkit-background-clip: text; ve -webkit-text-fill-color: transparent; ile birlikte kullanılır.
avatar
Emin
15
0
PHP Makaleleri
php-dilinde-denetim-yapilari-kullanimi
PHP Dilinde Denetim Yapıları Kullanımı
PHP, sunucu taraflı betik dili olarak, program akışını yönetmek için çeşitli denetim yapıları sunar. Bu yapılar, belirli koşullara bağlı olarak kod bloklarının yürütülmesini veya belirli işlemlerin tekrar tekrar gerçekleştirilmesini sağlar. Denetim yapıları, herhangi bir programlama dilinin temelini oluşturur ve uygulamanızın mantıksal akışını şekillendirmenize olanak tanır. Bu makale, PHP'deki temel denetim yapılarının nasıl kullanılacağını, sözdiziminden pratik örneklere kadar adım adım açıklayacaktır. Temel Sözdizimi PHP'de yaygın olarak kullanılan denetim yapılarının temel sözdizimi aşağıda listelenmiştir: // If-Else If-Else Yapısı if (koşul_1) { // koşul_1 doğru ise çalışacak kod bloğu } elseif (koşul_2) { // koşul_1 yanlış ve koşul_2 doğru ise çalışacak kod bloğu } else { // tüm koşullar yanlış ise çalışacak kod bloğu } // Switch Yapısı switch (ifade) { case değer_1: // ifade, değer_1'e eşit ise çalışacak kod bloğu break; case değer_2: // ifade, değer_2'ye eşit ise çalışacak kod bloğu break; default: // hiçbir case ile eşleşmezse çalışacak kod bloğu break; } // While Döngüsü while (koşul) { // koşul doğru olduğu sürece çalışacak kod bloğu } // Do-While Döngüsü do { // kod bloğu en az bir kez çalışır, sonra koşul kontrol edilir } while (koşul); // For Döngüsü for (başlangıç; koşul; artırma/azaltma) { // koşul doğru olduğu sürece ve her döngüde artırma/azaltma ile çalışacak kod bloğu } // Foreach Döngüsü foreach ($dizi as $değer) { // her dizi elemanı için çalışacak kod bloğu } // Foreach Döngüsü (Anahtar ve Değer ile) foreach ($dizi as $anahtar => $değer) { // her dizi elemanı için anahtar ve değer ile çalışacak kod bloğu } // Döngü Kontrol Anahtar Kelimeleri // break: mevcut döngüyü tamamen sonlandırır // continue: mevcut iterasyonu atlar ve bir sonraki iterasyona geçer softmush.com Detaylı Açıklama Her bir denetim yapısı, belirli bir amaca hizmet eder ve programınızın mantıksal akışını farklı şekillerde yönetir: if, else if, else: Bu yapılar, belirli bir koşulun doğruluğuna göre farklı kod bloklarını çalıştırmak için kullanılır. if ifadesi, ana koşulu kontrol eder. Eğer bu koşul yanlışsa, isteğe bağlı olarak bir veya daha fazla else if ifadesi ek koşulları kontrol eder. Hiçbir koşul doğru olmazsa, isteğe bağlı else bloğu yürütülür. switch: Tek bir ifadenin farklı olası değerlerine göre farklı kod bloklarını yürütmek için kullanılır. Her bir case bloğu, ifadenin belirli bir değerle eşleşip eşleşmediğini kontrol eder. break anahtar kelimesi, eşleşen bir case bulunduğunda switch bloğundan çıkılmasını sağlar. default bloğu, hiçbir case ile eşleşme olmadığında çalışır. while: Belirtilen bir koşul doğru olduğu sürece bir kod bloğunu tekrarlamak için kullanılır. Koşul, döngü bloğu yürütülmeden önce kontrol edilir. Eğer koşul başlangıçta yanlışsa, döngü bloğu hiç çalışmayabilir. do-while: while döngüsüne benzer, ancak kod bloğu en az bir kez yürütülür, ardından koşul kontrol edilir. Bu, kod bloğunun her zaman en az bir kez çalışmasını garanti eder. for: Belirli sayıda tekrar yapılması gereken durumlarda kullanılır. Üç bölümden oluşur: başlangıç ifadesi (döngü başlamadan önce bir kez çalışır), koşul ifadesi (her iterasyon öncesi kontrol edilir) ve artırma/azaltma ifadesi (her iterasyon sonrası çalışır). foreach: Özellikle diziler ve nesneler üzerinde kolayca yineleme yapmak için tasarlanmıştır. Dizinin her elemanı için bir kez döngü yapar, elemanın değerini (ve isteğe bağlı olarak anahtarını) bir değişkene atar. break: İçinde bulunduğu döngüyü (for, while, do-while, foreach) veya switch ifadesini anında sonlandırır ve kontrolü döngüden veya switch bloğundan sonraki ifadeye aktarır. continue: İçinde bulunduğu döngünün mevcut iterasyonunu atlar ve döngünün bir sonraki iterasyonuna geçer. Koşul kontrolü veya artırma/azaltma işlemi normal şekilde devam eder. Pratik Kullanım Örnekleri Aşağıdaki örnekler, PHP denetim yapılarının gerçek senaryolarda nasıl kullanılabileceğini göstermektedir: Örnek 1: Notlandırma Sistemi (if-else if-else) softmush.com Örnek 2: Haftanın Günü Kontrolü (switch) softmush.com Örnek 3: Sayı Sayma (for Döngüsü) softmush.com Önemli Notlar break Kullanımı: switch yapısında her case bloğunun sonunda break kullanmak önemlidir. Aksi takdirde, eşleşen case'den sonraki case'ler de koşulsuz olarak çalışmaya devam eder (fall-through davranışı). Sonsuz Döngülerden Kaçınma: while ve for döngülerinde, koşulun bir noktada yanlış olmasını sağlayacak bir mekanizma (örneğin, bir sayacın artırılması/azaltılması) bulunduğundan emin olun. Aksi takdirde, programınız sonsuz bir döngüye girer ve kaynakları tüketir. Üçlü Operatör (Ternary Operator): Basit if-else ifadeleri için PHP'nin üçlü operatörü (koşul ? doğru_ise_değer : yanlış_ise_değer) kullanılabilir. Bu, kodu daha kısa ve okunabilir hale getirebilir. Doğru Yapıyı Seçmek: Hangi denetim yapısının kullanılacağına karar verirken, ihtiyacınız olan işlevselliği göz önünde bulundurun. Örneğin, belirli sayıda tekrar için for, koşul doğru olduğu sürece tekrar için while, dizi veya nesne yinelemesi için foreach daha uygundur. Kod Girintileme: Denetim yapılarının içindeki kod bloklarını düzenli bir şekilde girintilemek, kodunuzun okunabilirliğini ve anlaşılırlığını önemli ölçüde artırır.
avatar
Emin
10
0
Python Makaleleri
python-dilinde-sayilar-numbers-kullanimi
Python Dilinde Sayılar (Numbers) Kullanımı
Python programlamanın temel yapı taşlarından biri olan sayılar (numbers), verileri niceliksel olarak ifade etmemizi sağlar. Bu veri tipleri, değişkenlerin değerlerini depolamak, matematiksel işlemler gerçekleştirmek ve algoritmik çözümler üretmek için vazgeçilmezdir. Python, tam sayılar, ondalıklı sayılar ve karmaşık sayılar olmak üzere üç ana sayı türünü destekler. Bu kılavuz, Python'da sayıların nasıl tanımlandığını, kullanıldığını ve yönetildiğini ayrıntılı olarak ele alacaktır. Temel Sözdizimi Python'da bir sayı tanımlamak oldukça basittir. Değişkenlere doğrudan sayısal değerler atayarak bu işlemi gerçekleştirebilirsiniz. Python'ın dinamik tipleme yapısı sayesinde, bir sayının türünü açıkça belirtmenize gerek yoktur; yorumlayıcı atanan değere göre türü otomatik olarak belirler. Aşağıdaki örnekler, farklı sayı türlerinin temel atama sözdizimini göstermektedir: # Tam sayı (Integer) ataması tam_sayi = 100 # Ondalıklı sayı (Float) ataması ondalikli_sayi = 3.14 # Karmaşık sayı (Complex) ataması karma_sayi = 2 + 3j softmush.com Detaylı Açıklama Python, üç temel sayı türü sunar: Tam Sayılar (int): Pozitif veya negatif, tam sayı değerlerini temsil ederler. Python 3'te tam sayıların boyutu yalnızca sistemin belleğiyle sınırlıdır, yani istediğiniz kadar büyük tam sayılarla çalışabilirsiniz. Örnekler: 5, -100, 12345678901234567890. Tam sayılar ayrıca ikili (0b), sekizli (0o) ve onaltılı (0x) tabanlarda da temsil edilebilir. Ondalıklı Sayılar (float): Ondalık noktası içeren veya bilimsel gösterimle ifade edilen gerçek sayıları temsil ederler. Çift duyarlıklı (double-precision) kayan noktalı sayılar olarak uygulanırlar ve genellikle 64-bit IEEE 754 standardına uygundurlar. Örnekler: 3.14, -0.001, 2.5e-3 (yani 2.5 * 10^-3). Karmaşık Sayılar (complex): Gerçel ve sanal kısımları olan sayıları temsil ederler. Sanal kısım, bir sayının sonuna j veya J eklenerek belirtilir. Örnekler: 1 + 2j, -5j, 3.14 + 2.71j. Gerçel kısma .real, sanal kısma ise .imag nitelikleri ile erişilebilir. Her bir sayı türü, belirli matematiksel ve mantıksal işlemler için optimize edilmiştir. Örneğin, tam sayılar genellikle kesin sayımlar için kullanılırken, ondalıklı sayılar ölçümler ve bilimsel hesaplamalar için tercih edilir. Pratik Kullanım Örnekleri Aşağıdaki örnekler, Python'da farklı sayı türlerinin tanımlanmasını, türlerinin kontrol edilmesini ve temel aritmetik işlemlerin yapılmasını göstermektedir. Örnek 1: Temel Sayı Atamaları ve Tür Kontrolü # Tam sayı ataması sayi1 = 42 print(f"sayi1 değeri: {sayi1}, Türü: {type(sayi1)}") print("") # Çıktıda boş satır için # Ondalıklı sayı ataması sayi2 = 3.14159 print(f"sayi2 değeri: {sayi2}, Türü: {type(sayi2)}") print("") # Çıktıda boş satır için # Karmaşık sayı ataması sayi3 = -1 + 2.5j print(f"sayi3 değeri: {sayi3}, Türü: {type(sayi3)}") print(f"sayi3'ün gerçek kısmı: {sayi3.real}") print(f"sayi3'ün sanal kısmı: {sayi3.imag}") softmush.com Örnek 2: Aritmetik İşlemler a = 15 b = 4 # Toplama toplam = a + b print(f"{a} + {b} = {toplam}") print("") # Çıkarma fark = a - b print(f"{a} - {b} = {fark}") print("") # Çarpma carpim = a * b print(f"{a} * {b} = {carpim}") print("") # Bölme (Sonuç her zaman float döner) bolum = a / b print(f"{a} / {b} = {bolum}") print("") # Tam Bölme (Sonuç tam sayı döner, ondalık kısım atılır) tam_bolum = a // b print(f"{a} // {b} = {tam_bolum}") print("") # Modulo (Kalanı verir) kalan = a % b print(f"{a} % {b} = {kalan}") print("") # Üs alma us_alma = a ** b print(f"{a} ** {b} = {us_alma}") softmush.com Örnek 3: Tür Dönüşümleri (Type Casting) x = 7.89 y = 10 z = "25" # Float'tan int'e dönüşüm (ondalık kısım atılır) int_x = int(x) print(f"{x} (float) -> {int_x} (int), Türü: {type(int_x)}") print("") # Int'ten float'a dönüşüm float_y = float(y) print(f"{y} (int) -> {float_y} (float), Türü: {type(float_y)}") print("") # String'ten int'e dönüşüm int_z = int(z) print(f"'{z}' (str) -> {int_z} (int), Türü: {type(int_z)}") print("") # String'ten float'a dönüşüm float_z = float(z) print(f"'{z}' (str) -> {float_z} (float), Türü: {type(float_z)}") softmush.com Önemli Notlar Ondalıklı Sayı Hassasiyeti: Ondalıklı sayılar (float), ikili (binary) tabanda tam olarak temsil edilemeyebilir. Bu durum, beklenenden farklı sonuçlara yol açabilen hassasiyet sorunlarına neden olabilir. Finansal veya yüksek hassasiyet gerektiren hesaplamalar için decimal modülünü kullanmak daha doğru bir yaklaşım olabilir. Tam Sayı Boyutu: Python'da tam sayıların boyutu sınırsızdır. Bu, diğer bazı programlama dillerinde olduğu gibi taşma (overflow) sorunları yaşanmadığı anlamına gelir. Tür Dönüşümleri: Bir sayı türünü başka bir türe dönüştürürken (örneğin, float'tan int'e), veri kaybı yaşanabileceğini unutmayın. Örneğin, int(3.9) sonucu 3 olacaktır. Bölme Operatörleri: Tek eğik çizgi (/) operatörü her zaman bir float sonuç döndürürken, çift eğik çizgi (//) operatörü tam bölme yapar ve sonuç int (her iki işlenen de int ise) veya float (işlenenlerden biri float ise) olarak döner. Karmaşık Sayı Kullanımı: Karmaşık sayılar daha çok bilimsel ve mühendislik uygulamalarında kullanılır. Normal iş uygulamalarında nadiren karşılaşılırlar. Operatör Önceliği: Matematiksel işlemlerde standart operatör önceliği (parantez, üs, çarpma/bölme, toplama/çıkarma) geçerlidir. İşlem sırasını açıkça belirtmek için parantezler kullanın.
avatar
Emin
9
0
SQL Makaleleri
sql-dilinde-sql-order-by-kullanimi
SQL Dilinde SQL ORDER BY Kullanımı
SQL (Yapısal Sorgu Dili), veritabanlarından veri almak ve manipüle etmek için kullanılan temel bir dildir. Veri kümelerini belirli bir düzene göre sıralamak, analiz ve raporlama süreçlerinde kritik öneme sahiptir. SQL'deki ORDER BY yan tümcesi, bir SELECT ifadesinden dönen sonuç kümesini bir veya daha fazla sütuna göre artan veya azalan sırada sıralamak için kullanılır. Bu kılavuz, ORDER BY ifadesinin sözdizimini, detaylı açıklamalarını ve pratik kullanım örneklerini adım adım ele alacaktır. Sözdizimi Aşağıdaki yapı, ORDER BY ifadesinin genel kullanım şeklini göstermektedir: SELECT column1, column2, ... FROM table_name WHERE condition ORDER BY column1 [ASC|DESC] [, column2 [ASC|DESC], ...];softmush.com Detaylı Açıklama ORDER BY ifadesinin her bir bileşeni, sorgu sonuçlarının nasıl sıralanacağını belirler: SELECT column1, column2, ...: Sorgu tarafından döndürülecek sütunları belirtir. FROM table_name: Verilerin çekileceği tabloyu belirtir. WHERE condition: İsteğe bağlıdır. Sonuç kümesini filtrelemek için kullanılır. ORDER BY: Sonuç kümesinin sıralanacağı sütunları veya ifadeleri belirtmek için kullanılan anahtar kelimedir. column1, column2, ...: Sıralama işleminin uygulanacağı bir veya daha fazla sütunun adıdır. Birden fazla sütun belirtilirse, sıralama ilk sütuna göre yapılır, ardından aynı değerlere sahip satırlar için ikinci sütuna göre sıralama devam eder ve bu böylece devam eder. [ASC|DESC]: Sıralama yönünü belirten isteğe bağlı bir anahtar kelimedir: ASC: Artan sıralama (ascending) için kullanılır. Varsayılan sıralama yönüdür, belirtilmese bile uygulanır. DESC: Azalan sıralama (descending) için kullanılır. NULLS FIRST|NULLS LAST: (Bazı veritabanı sistemlerine özeldir, örneğin Oracle, PostgreSQL) NULL değerlerinin sıralamada nerede yer alacağını belirler: NULLS FIRST: NULL değerlerini en başa yerleştirir. NULLS LAST: NULL değerlerini en sona yerleştirir. Çoğu veritabanı sisteminde, ASC ile NULL'lar sona, DESC ile başa gelir. Bu anahtar kelimeler, bu davranışı açıkça kontrol etme imkanı sunar. Örnekler Aşağıdaki örnekler, bir Personel tablosu üzerinden ORDER BY ifadesinin farklı kullanım senaryolarını göstermektedir: Örnek 1: Tek Bir Sütuna Göre Artan Sıralama Bu örnek, Personel tablosundaki tüm personeli Ad sütununa göre alfabetik olarak artan sırada (ASC) sıralar. ASC varsayılan olduğu için açıkça belirtilmesine gerek yoktur. SELECT PersonelID, Ad, Soyad, Maas FROM Personel ORDER BY Ad ASC;softmush.com Örnek 2: Tek Bir Sütuna Göre Azalan Sıralama Bu örnek, personeli Maas sütununa göre en yüksek maaştan en düşüğe doğru azalan sırada (DESC) sıralar. SELECT PersonelID, Ad, Soyad, Maas FROM Personel ORDER BY Maas DESC;softmush.com Örnek 3: Birden Fazla Sütuna Göre Sıralama Bu örnek, personeli önce Soyad'a göre artan sırada, ardından aynı soyada sahip olanları Ad'a göre artan sırada sıralar. SELECT PersonelID, Ad, Soyad, Maas FROM Personel ORDER BY Soyad ASC, Ad ASC;softmush.com Örnek 4: Farklı Yönlerde Birden Fazla Sütuna Göre Sıralama Bu örnek, personeli önce Maas'a göre azalan sırada, ardından aynı maaşa sahip olanları Soyad'a göre artan sırada sıralar. SELECT PersonelID, Ad, Soyad, Maas FROM Personel ORDER BY Maas DESC, Soyad ASC;softmush.com Örnek 5: NULL Değerlerini Yönetme (PostgreSQL/Oracle Örneği) Varsayalım ki Personel tablosunda DepartmanID sütunu NULL değerler içerebilir. Bu örnek, DepartmanID'si NULL olanları en başa getirirken diğerlerini DepartmanID'ye göre artan sırada sıralar. SELECT PersonelID, Ad, Soyad, DepartmanID FROM Personel ORDER BY DepartmanID NULLS FIRST, Ad ASC;softmush.com Örnek 6: İfadeye Göre Sıralama Sıralama için bir sütun adı yerine bir ifade de kullanabilirsiniz. Bu örnek, Maas ve Prim sütunlarının toplamına göre azalan sırada sıralar. SELECT PersonelID, Ad, Soyad, Maas, Prim, (Maas + Prim) AS ToplamKazanc FROM Personel ORDER BY (Maas + Prim) DESC;softmush.com Önemli Notlar Sıralama Yönü Varsayılanı: ORDER BY ifadesinde sıralama yönü belirtilmezse, varsayılan olarak ASC (artan) kullanılır. Performans: Büyük veri kümelerinde sıralama işlemi maliyetli olabilir. Sıkça sıralama yapılan sütunlara indeks eklemek, sorgu performansını önemli ölçüde artırabilir. NULL Değerlerinin Konumu: Çoğu veritabanı sisteminde, NULL değerler ASC sıralamasında en sona, DESC sıralamasında ise en başa yerleştirilir. Ancak Oracle ve PostgreSQL gibi bazı sistemler, NULLS FIRST veya NULLS LAST anahtar kelimeleriyle bu davranışı açıkça kontrol etme imkanı sunar. Sütun Numaralarıyla Sıralama: Bazı SQL standartları ve veritabanı sistemleri (örneğin MySQL), ORDER BY ifadesinde SELECT listesindeki sütunların sırasını belirten sayısal indeksleri kullanmaya izin verir (örneğin, ORDER BY 2 DESC ikinci sütuna göre sıralar). Ancak bu kullanım, sorgu okunabilirliğini azalttığı ve sütun sırası değiştiğinde hataya açık olduğu için genellikle önerilmez. Yerleşim: ORDER BY yan tümcesi, bir SQL sorgusunda genellikle en sona yerleştirilir. Yalnızca LIMIT veya FETCH NEXT gibi yan tümceler ORDER BY'dan sonra gelebilir. İfadelere Göre Sıralama: Yalnızca sütun adları değil, aritmetik işlemler, fonksiyon çağrıları veya diğer ifadeler de ORDER BY ifadesi içinde kullanılabilir. Bu, sonuç kümesini daha karmaşık kriterlere göre sıralama esnekliği sağlar.
avatar
Emin
12
0
CSS Makaleleri
css-dilinde-renk-colors-kullanimi
CSS Dilinde Renk (Colors) Kullanımı
Cascading Style Sheets (CSS), web sayfalarının görsel sunumunu kontrol eden bir stil sayfası dilidir. Bu sunumun temel bileşenlerinden biri de renklerdir. CSS, öğelere metin rengi, arka plan rengi, kenarlık rengi gibi çeşitli görsel özellikler atamak için kapsamlı bir dizi renk değeri ve yöntemi sunar. Bu kılavuz, CSS dilinde renklerin nasıl tanımlanacağını ve etkin bir şekilde nasıl kullanılacağını teknik ayrıntılarla açıklamaktadır. Temel Sözdizimi CSS'te bir öğenin rengini belirlemek için genel sözdizimi aşağıdaki gibidir. Burada , rengin uygulanacağı CSS özelliğini (örneğin, color, background-color, border-color) temsil ederken, ise rengi tanımlayan spesifik değeri ifade eder. selector { : ; } softmush.com Detaylı Açıklama , CSS'te bir rengi tanımlamak için kullanılabilecek çeşitli formatlara sahiptir. Bu formatlar, geliştiricilere esneklik ve hassasiyet sağlar. Başlıca renk tanımlama yöntemleri şunlardır: İsimlendirilmiş Renkler (Named Colors): CSS, belirli anahtar kelimelerle tanımlanmış standart renk isimleri sunar. Örneğin, red, blue, green, black, white gibi isimler doğrudan kullanılabilir. Toplamda 140'tan fazla standart renk adı bulunmaktadır. Hexadecimal Renkler (Hex Colors): Bu format, bir rengi altı haneli onaltılık bir değerle (#RRGGBB) tanımlar. İlk iki hane kırmızı (Red), sonraki iki hane yeşil (Green) ve son iki hane mavi (Blue) bileşenini temsil eder. Her bir bileşen 00 (en az yoğunluk) ile FF (en yüksek yoğunluk) arasında değer alır. Kısa gösterim olarak #RGB de kullanılabilir (örneğin, #FFF, #FFFFFF ile aynıdır). RGB Fonksiyonu (Red, Green, Blue): rgb(R, G, B) formatı, rengi kırmızı, yeşil ve mavi bileşenlerinin desimal değerleri (0-255 arası) ile tanımlar. Örneğin, rgb(255, 0, 0) kırmızı rengi temsil eder. RGBA Fonksiyonu (Red, Green, Blue, Alpha): rgba(R, G, B, A) formatı, RGB'ye ek olarak bir alfa (Alpha) kanalı ekler. Alfa değeri, rengin şeffaflık seviyesini (opaklığını) 0.0 (tamamen şeffaf) ile 1.0 (tamamen opak) arasında bir ondalık sayı ile belirler. HSL Fonksiyonu (Hue, Saturation, Lightness): hsl(H, S, L) formatı, rengi ton (Hue), doygunluk (Saturation) ve açıklık (Lightness) değerleriyle tanımlar. Hue (Ton): Renk çarkındaki açıyı (0-360 derece) temsil eder. 0 veya 360 kırmızı, 120 yeşil, 240 mavidir. Saturation (Doygunluk): Rengin canlılığını veya yoğunluğunu yüzde olarak (0% ile 100% arası) belirler. 0% gri ton, 100% ise tam renktir. Lightness (Açıklık): Rengin açıklığını veya koyuluğunu yüzde olarak (0% ile 100% arası) belirler. 0% siyah, 100% beyaz, 50% normal renktir. HSLA Fonksiyonu (Hue, Saturation, Lightness, Alpha): hsla(H, S, L, A) formatı, HSL'ye ek olarak bir alfa (Alpha) kanalı ekler. Alfa değeri, rengin şeffaflığını 0.0 (tamamen şeffaf) ile 1.0 (tamamen opak) arasında bir ondalık sayı ile belirler. Pratik Kullanım Örnekleri Aşağıdaki örnekler, farklı renk tanımlama yöntemlerinin CSS kurallarında nasıl kullanıldığını göstermektedir. /* İsimlendirilmiş Renk Kullanımı */ .header { background-color: navy; color: white; } /* Hexadecimal Renk Kullanımı */ .main-content { background-color: #F0F8FF; /* AliceBlue */ border-color: #333; /* Koyu gri */ color: #0A0A0A; /* Çok koyu gri */ } /* RGB Fonksiyonu Kullanımı */ .success-message { background-color: rgb(212, 237, 218); /* Açık yeşil */ color: rgb(60, 118, 61); /* Koyu yeşil */ } /* RGBA Fonksiyonu Kullanımı (yarı şeffaf arka plan) */ .overlay { background-color: rgba(0, 0, 0, 0.7); /* %70 opak siyah */ color: white; } /* HSL Fonksiyonu Kullanımı */ .accent-button { background-color: hsl(200, 70%, 50%); /* Orta mavi ton */ color: hsl(0, 0%, 100%); /* Beyaz */ } /* HSLA Fonksiyonu Kullanımı (yarı şeffaf kenarlık) */ .card { border: 2px solid hsla(240, 100%, 50%, 0.5); /* Yarı şeffaf mavi kenarlık */ background-color: white; padding: 15px; } softmush.com Bu örnekler, farklı renk değerlerinin farklı CSS özelliklerine nasıl atandığını ve belirli görsel efektlerin nasıl elde edilebileceğini göstermektedir. Önemli Notlar CSS'te renklerle çalışırken dikkate alınması gereken bazı önemli noktalar şunlardır: Erişilebilirlik (Accessibility): Metin ve arka plan renkleri arasında yeterli kontrast oranının sağlanması, görme engelli veya renk körü kullanıcılar için içeriğin okunabilirliğini artırır. Web Content Accessibility Guidelines (WCAG) bu konuda standartlar belirler. Tarayıcı Desteği: Modern tarayıcılar tüm belirtilen renk formatlarını destekler. Ancak, eski tarayıcılar için uyumluluk endişesi varsa, yaygın formatlar (hex veya RGB) tercih edilebilir. Tutarlılık: Bir projede belirli bir renk paleti kullanıldığında, bu renklerin değişkenler (CSS Custom Properties) aracılığıyla tanımlanması, kodun daha yönetilebilir ve tutarlı olmasını sağlar. Örneğin: --primary-color: #007bff;. Şeffaflık Kullanımı: rgba() ve hsla() fonksiyonlarındaki alfa kanalı, katmanlı tasarımlarda veya arka plan resimleri üzerinde renk tonlamaları oluşturmak için oldukça faydalıdır. Gelecek Renk Modelleri: CSS'in yeni sürümleri, lch(), lab() gibi daha gelişmiş renk modellerini ve color-mix() gibi renk manipülasyon fonksiyonlarını tanıtmaktadır. Bu özellikler daha geniş bir renk gamı ve daha hassas kontrol imkanı sunar.
avatar
Emin
11
0
PHP Makaleleri
php-dilinde-operatorler-kullanimi
PHP Dilinde Operatörler Kullanımı
PHP, programlama dillerinin temel yapı taşlarından biri olan operatörler aracılığıyla değişkenler ve değerler üzerinde çeşitli işlemler yapmayı sağlar. Operatörler, matematiksel hesaplamalardan mantıksal karşılaştırmalara, değer atamalarından veri manipülasyonlarına kadar geniş bir yelpazede görev alarak kodun işlevselliğini ve dinamizmini artırır. Bu kılavuz, PHP dilindeki farklı operatör türlerini, bunların sözdizimini ve pratik kullanım örneklerini adım adım açıklamaktadır. Sözdizimi PHP'deki operatörlerin sözdizimi, operatörün türüne ve aldığı işlenen (operand) sayısına göre değişiklik gösterir. Genellikle bir operatör, bir veya daha fazla değer (işlenen) üzerinde belirli bir işlemi gerçekleştirir ve bir sonuç üretir. Genel yapı aşağıdaki gibidir: Tekli (Unary) Operatörler: Tek bir işlenen üzerinde işlem yaparlar. Örnek: `$a++` (arttırma), `!$b` (mantıksal değil). İkili (Binary) Operatörler: İki işlenen üzerinde işlem yaparlar. Örnek: `$a + $b` (toplama), `$x == $y` (eşitlik karşılaştırması). Üçlü (Ternary) Operatörler: Üç işlenen üzerinde işlem yaparlar. PHP'de koşullu operatör (ternary operator) bu kategoriye girer. Örnek: `$koşul ? $değer1 : $değer2`. Operatörler, işlenenlerin arasına veya bir işlenenin önüne/arkasına yerleştirilerek kullanılır. Detaylı Açıklama PHP, çeşitli işlem türleri için farklı operatör kategorileri sunar: Aritmetik Operatörler Matematiksel işlemler için kullanılırlar. + (Toplama): İki sayıyı toplar. Örnek: `$a + $b`. - (Çıkarma): Bir sayıdan diğerini çıkarır. Örnek: `$a - $b`. * (Çarpma): İki sayıyı çarpar. Örnek: `$a * $b`. / (Bölme): Bir sayıyı diğerine böler. Örnek: `$a / $b`. % (Modülüs): Bölme işleminden kalanı verir. Örnek: `$a % $b`. ** (Üs Alma): Bir sayının kuvvetini hesaplar. Örnek: `$a ** $b` ($a üzeri $b). Atama Operatörleri Sağdaki işlenenin değerini soldaki işlenene atamak için kullanılırlar. = (Atama): Sağdaki değeri soldaki değişkene atar. Örnek: `$a = 10;`. += (Topla ve Ata): `$a = $a + $b;` ile aynıdır. Örnek: `$a += $b;`. -= (Çıkar ve Ata): `$a = $a - $b;` ile aynıdır. Örnek: `$a -= $b;`. *= (Çarp ve Ata): `$a = $a * $b;` ile aynıdır. Örnek: `$a *= $b;`. /= (Böl ve Ata): `$a = $a / $b;` ile aynıdır. Örnek: `$a /= $b;`. %= (Modülüs ve Ata): `$a = $a % $b;` ile aynıdır. Örnek: `$a %= $b;`. **= (Üs Al ve Ata): `$a = $a ** $b;` ile aynıdır. Örnek: `$a **= $b;`. .= (Birleştir ve Ata - Stringler için): `$a = $a . $b;` ile aynıdır. Örnek: `$a .= $b;`. Karşılaştırma Operatörleri İki değeri karşılaştırır ve true veya false döndürürler. == (Eşitlik): İki değerin eşit olup olmadığını kontrol eder (veri türüne bakılmaksızın). Örnek: `$a == $b`. === (Özdeşlik): İki değerin eşit ve aynı veri türünde olup olmadığını kontrol eder. Örnek: `$a === $b`. != veya (Eşit Değil): İki değerin eşit olup olmadığını kontrol eder. Örnek: `$a != $b`. !== (Özdeş Değil): İki değerin eşit veya aynı veri türünde olmadığını kontrol eder. Örnek: `$a !== $b`. (Büyüktür): Soldaki değerin sağdaki değerden büyük olup olmadığını kontrol eder. Örnek: `$a > $b`. = $b`. (Spaceship Operatörü): PHP 7'den itibaren mevcuttur. İki ifadeyi karşılaştırır. Soldaki değer küçükse -1, eşitse 0, büyükse 1 döndürür. Örnek: `$a $b`. Mantıksal Operatörler Koşulları birleştirmek veya tersine çevirmek için kullanılırlar. && veya and (VE): Her iki koşul da doğruysa true döndürür. Örnek: `$a > 0 && $b < 10`. || veya or (VEYA): Koşullardan en az biri doğruysa true döndürür. Örnek: `$a == 5 || $b == 7`. ! (DEĞİL): Koşulun tersini döndürür. Örnek: `!$koşul`. xor (Özel VEYA): Koşullardan sadece biri doğruysa true döndürür. Her ikisi de doğru veya her ikisi de yanlış ise false döndürür. Arttırma/Azaltma Operatörleri Sayısal değişkenlerin değerini bir artırmak veya bir azaltmak için kullanılırlar. ++$a (Ön Arttırma): Değeri bir artırır, sonra değişkenin yeni değerini döndürür. $a++ (Son Arttırma): Değişkenin orijinal değerini döndürür, sonra değeri bir artırır. --$a (Ön Azaltma): Değeri bir azaltır, sonra değişkenin yeni değerini döndürür. $a-- (Son Azaltma): Değişkenin orijinal değerini döndürür, sonra değeri bir azaltır. String Operatörleri Stringleri birleştirmek için kullanılırlar. . (Birleştirme): İki stringi birleştirir. Örnek: `"Merhaba" . " Dünya"`. .= (Birleştir ve Ata): Bir stringi diğerine ekler ve sonucu değişkene atar. Örnek: `$metin .= " yeni parça";`. Dizi Operatörleri Dizileri karşılaştırmak veya birleştirmek için kullanılırlar. + (Birleşim): Sağdaki diziyi soldaki diziye ekler. Aynı anahtarlar varsa soldaki dizinin değeri korunur. Örnek: `$dizi1 + $dizi2`. == (Eşitlik): Anahtar/değer çiftleri aynıysa true döndürür. === (Özdeşlik): Anahtar/değer çiftleri aynıysa ve aynı sırada ve aynı veri türündeyse true döndürür. Koşullu (Ternary) Operatör Basit bir if-else yapısını tek bir satırda ifade etmenin kısa yoludur. (koşul) ? (doğru ise) : (yanlış ise): Koşul doğruysa ilk ifadeyi, yanlışsa ikinci ifadeyi döndürür. Örnek: `$durum = ($yas >= 18) ? "Yetişkin" : "Çocuk";`. Null Coalescing Operatörü PHP 7'den itibaren mevcuttur. Bir değişkenin tanımlı ve null olmayan bir değere sahip olup olmadığını kontrol etmek için kullanılır. ??: Sol taraftaki işlenen varsa ve NULL değilse onu döndürür; aksi takdirde sağ taraftaki işleneni döndürür. Örnek: `$kullaniciAdi = $_GET['kullanici'] ?? 'Misafir';`. Örnekler Aşağıdaki örnekler, farklı operatör türlerinin PHP içindeki pratik uygulamalarını göstermektedir. softmush.com Önemli Notlar Operatör Önceliği: Farklı operatörlerin farklı öncelik seviyeleri vardır. Matematikteki işlem sırası gibi, PHP de belirli operatörleri diğerlerinden önce yürütür (örn. çarpma ve bölme toplamadan önce). Karmaşık ifadelerde belirsizliği önlemek için parantez () kullanmak iyi bir uygulamadır. Veri Tipi Juggling: PHP, zayıf tipli bir dil olduğu için karşılaştırma veya aritmetik işlemlerde farklı veri tiplerini otomatik olarak dönüştürmeye çalışabilir. Bu, bazen beklenmedik sonuçlara yol açabilir. Kesin tip karşılaştırması için === (özdeşlik) ve !== (özdeş değil) operatörlerini tercih edin. Kısa Devre Değerlendirme (Short-Circuit Evaluation): Mantıksal operatörler (&&, ||) kısa devre değerlendirme yapar. Örneğin, $koşul1 && $koşul2 ifadesinde, $koşul1 yanlışsa, $koşul2 asla değerlendirilmez çünkü sonuç zaten false olacaktır. Bu durum, performans ve hata önleme açısından önemlidir. Aynı Anda Hem Okuma Hem Yazma: Arttırma/azaltma operatörlerini (++, --) kullanırken, özellikle karmaşık ifadelerde veya bir değişkene aynı anda hem atama hem de işlem yaparken dikkatli olun. Ön ve son arttırma/azaltma arasındaki farkı anlamak önemlidir. Bölme Sıfıra: Bir sayıyı sıfıra bölmek ($a / 0) bir uyarıya (Warning) neden olur ve sonuç olarak INF (sonsuz) veya NAN (sayı değil) döndürebilir. Uygulamalarınızda sıfıra bölme durumlarını kontrol etmeniz önerilir.
avatar
Emin
11
0
Python Makaleleri
python-dilinde-veri-tipleri-data-types-kullanimi
Python Dilinde Veri Tipleri (Data Types) Kullanımı
Python programlama dili, verileri depolamak ve işlemek için çeşitli yerleşik veri tipleri sunar. Her veri tipi, belirli bir türdeki bilgiyi temsil etmek üzere tasarlanmıştır ve bu, Python'ın esnek ve güçlü yapısının temelini oluşturur. Değişkenler aracılığıyla atanan değerlerin tiplerini anlamak, etkili ve hatasız kod yazmak için kritik öneme sahiptir. Bu makalede, Python'daki temel veri tipleri detaylı bir şekilde incelenecek ve pratik kullanım örnekleriyle pekiştirilecektir. Sözdizimi Python, dinamik tipli bir dildir; bu, bir değişkenin veri tipini açıkça belirtmenize gerek olmadığı anlamına gelir. Değişkene bir değer atandığında, Python yorumlayıcısı değeri analiz eder ve otomatik olarak uygun veri tipini belirler. Bir değişkenin tipini öğrenmek için yerleşik type() fonksiyonu kullanılır. # Genel atama sözdizimi degisken_adi = deger # Tip kontrolü print(type(degisken_adi))softmush.com Python'daki temel veri tipleri aşağıdaki kategorilere ayrılabilir: Sayısal Tipler: int (tam sayı), float (ondalıklı sayı), complex (karmaşık sayı). Metin Tipi: str (string). Dizi Tipleri (Sequence Types): list (liste), tuple (demet), range (aralık). Eşleme Tipi (Mapping Type): dict (sözlük). Küme Tipleri (Set Types): set (küme), frozenset (dondurulmuş küme). Mantıksal Tip (Boolean Type): bool (boolean). Bu tiplerin her biri, farklı kullanım senaryolarına uygun özelliklere sahiptir: Sayısal Tipler: Sayısal değerleri depolamak için kullanılırlar. int: Tam sayıları temsil eder (örn. 10, -5, 1000000). float: Ondalıklı sayıları temsil eder (örn. 3.14, -0.5, 2.0). complex: Karmaşık sayıları temsil eder (örn. 1+2j). Metin Tipi: Karakter dizilerini depolamak için kullanılır. str: Tek veya çift tırnak arasına yazılan karakter dizileridir (örn. "Merhaba Dünya", 'Python'). Metinler değiştirilemez (immutable) yapıdadır. Dizi Tipleri: Birden fazla değeri sıralı bir şekilde depolamak için kullanılırlar. list: Köşeli parantezler içine alınan, sıralı, değiştirilebilir (mutable) ve farklı veri tiplerinden elemanlar içerebilen bir koleksiyondur (örn. [1, "elma", 3.14]). tuple: Parantez içine alınan, sıralı, değiştirilemez (immutable) ve farklı veri tiplerinden elemanlar içerebilen bir koleksiyondur (örn. (1, "armut", 2.71)). Eşleme Tipi: Anahtar-değer çiftlerini depolamak için kullanılır. dict: Süslü parantezler içine alınan, anahtar-değer çiftlerinden oluşan, sırasız (Python 3.7+ sürümlerinde ekleme sırasını korur) ve değiştirilebilir bir koleksiyondur. Anahtarlar benzersiz olmalıdır (örn. {'isim': 'Ali', 'yas': 30}). Küme Tipleri: Benzersiz elemanlardan oluşan koleksiyonları depolamak için kullanılır. set: Süslü parantezler içine alınan (veya set() fonksiyonu ile oluşturulan), sırasız, benzersiz elemanlar içeren ve değiştirilebilir bir koleksiyondur (örn. {1, 2, 3}). Mantıksal Tip: Doğruluk değerlerini temsil eder. bool: İki değerden birini alabilir: True (doğru) veya False (yanlış). Genellikle koşullu ifadelerde kullanılır. Örnekler Aşağıdaki örnekler, Python'daki temel veri tiplerinin nasıl tanımlandığını ve type() fonksiyonu ile nasıl kontrol edildiğini göstermektedir. # Sayısal Tipler sayi_tam = 10 sayi_ondalikli = 20.5 sayi_kompleks = 3 + 4j print(f"sayi_tam: {sayi_tam}, Tipi: {type(sayi_tam)}") print(f"sayi_ondalikli: {sayi_ondalikli}, Tipi: {type(sayi_ondalikli)}") print(f"sayi_kompleks: {sayi_kompleks}, Tipi: {type(sayi_kompleks)}") # Metin Tipi metin = "Python Programlama" print(f"metin: '{metin}', Tipi: {type(metin)}") # Dizi Tipleri liste_ornek = [1, "iki", 3.0, True] demet_ornek = (10, "yirmi", False) print(f"liste_ornek: {liste_ornek}, Tipi: {type(liste_ornek)}") print(f"demet_ornek: {demet_ornek}, Tipi: {type(demet_ornek)}") # Eşleme Tipi sozluk_ornek = {"ad": "Mehmet", "yas": 25, "sehir": "Ankara"} print(f"sozluk_ornek: {sozluk_ornek}, Tipi: {type(sozluk_ornek)}") # Küme Tipi kume_ornek = {1, 2, 3, 2} # Tekrar eden '2' otomatik olarak kaldırılır print(f"kume_ornek: {kume_ornek}, Tipi: {type(kume_ornek)}") # Mantıksal Tip dogru_deger = True yanlis_deger = False print(f"dogru_deger: {dogru_deger}, Tipi: {type(dogru_deger)}") print(f"yanlis_deger: {yanlis_deger}, Tipi: {type(yanlis_deger)}")softmush.com Çıktı: sayi_tam: 10, Tipi: sayi_ondalikli: 20.5, Tipi: sayi_kompleks: (3+4j), Tipi: metin: 'Python Programlama', Tipi: liste_ornek: [1, 'iki', 3.0, True], Tipi: demet_ornek: (10, 'yirmi', False), Tipi: sozluk_ornek: {'ad': 'Mehmet', 'yas': 25, 'sehir': 'Ankara'}, Tipi: kume_ornek: {1, 2, 3}, Tipi: dogru_deger: True, Tipi: yanlis_deger: False, Tipi: softmush.com Listelerin değiştirilebilirliği ve demetlerin değiştirilemezliği: # Liste örneği - Değiştirilebilir my_list = [1, 2, 3] my_list[0] = 100 # İlk elemanı değiştir print(f"Değiştirilmiş liste: {my_list}") # Demet örneği - Değiştirilemez my_tuple = (1, 2, 3) # my_tuple[0] = 100 # Bu satır hata verir: TypeError: 'tuple' object does not support item assignment print(f"Demet: {my_tuple}")softmush.com Çıktı (demet satırı yorum satırı yapıldığında): Değiştirilmiş liste: [100, 2, 3] Demet: (1, 2, 3)softmush.com Önemli Notlar Dinamik Tiplendirme: Python, değişkenlerin veri tipini atama anında belirler. Bu, tip deklarasyonu yapma zorunluluğunu ortadan kaldırır ancak değişkenin o anki tipini takip etmeyi gerektirir. Değiştirilebilir (Mutable) ve Değiştirilemez (Immutable) Tipler: Veri tipleri bellekteki değerlerinin değiştirilip değiştirilemeyeceğine göre ikiye ayrılır. int, float, str, tuple, frozenset değiştirilemezken; list, dict, set değiştirilebilir tiplerdir. Bu ayrım, performans ve programlama mantığı açısından önemlidir. Tip Dönüşümü (Casting): Bir veri tipini başka bir tipe dönüştürmek için int(), float(), str(), list() gibi fonksiyonlar kullanılabilir. Ancak, dönüşüm her zaman mümkün veya anlamlı olmayabilir (örn. "abc" stringini int'e dönüştürmek). None Tipi: Python'da özel bir değer olan None, bir değerin yokluğunu veya boş olduğunu belirtmek için kullanılır. None'un tipi NoneType'tır. type() Fonksiyonu: Geliştirme ve hata ayıklama süreçlerinde bir değişkenin mevcut veri tipini doğrulamak için sıkça kullanılan bir araçtır.
avatar
Emin
10
0
SQL Makaleleri
sql-dilinde-where-kullanimi-detayli-rehber
SQL Dilinde WHERE Kullanımı: Detaylı Rehber
SQL'de WHERE yan tümcesi, bir veri kümesinden belirli kriterlere uyan kayıtları seçmek, güncellemek veya silmek için kullanılan temel bir bileşendir. Bu yan tümce, sorgularınıza güçlü bir filtreleme yeteneği kazandırarak, büyük veri tabanlarından yalnızca ihtiyacınız olan bilgileri verimli bir şekilde almanızı sağlar. Doğru kullanımı, veritabanı yönetiminde performansı ve doğruluğu doğrudan etkiler. Sözdizimi WHERE yan tümcesinin SELECT deyimiyle genel kullanım yapısı aşağıdaki gibidir: SELECT kolon1, kolon2, ... FROM tablo_adı WHERE koşul;softmush.com Detaylı Açıklama SELECT kolon1, kolon2, ...: Bu kısım, sonuç kümesinde görüntülenmesini istediğiniz sütunları belirtir. Tüm sütunları seçmek için * karakteri kullanılabilir. FROM tablo_adı: Verilerin çekileceği tablonun adını belirtir. WHERE koşul: Bu, WHERE yan tümcesinin çekirdeğidir. Belirtilen koşul doğru (TRUE) olan her satır sonuç kümesine dahil edilir. koşul bir veya daha fazla karşılaştırma operatörü (=, , >, =, , 100;softmush.com Açıklama: Bu sorgu, Siparisler tablosundan ToplamTutar sütunu 100'den büyük olan tüm siparişleri getirir. 3. AND Operatörü: Birden fazla koşulun aynı anda doğru olmasını gerektirir. SELECT MusteriAdi, Sehir, Yas FROM Musteriler WHERE Sehir = 'Ankara' AND Yas > 30;softmush.com Açıklama: Bu sorgu, Musteriler tablosundan Sehir sütunu 'Ankara' olan VE Yas sütunu 30'dan büyük olan müşterileri getirir. 4. OR Operatörü: Belirtilen koşullardan en az birinin doğru olmasını gerektirir. SELECT CalisanAdi, Departman FROM Calisanlar WHERE Departman = 'IT' OR Departman = 'IK';softmush.com Açıklama: Bu sorgu, Calisanlar tablosundan Departman sütunu 'IT' VEYA 'IK' olan çalışanları getirir. 5. LIKE Operatörü: Belirli bir desene uyan string değerlerini aramak için kullanılır. % joker karakteri herhangi bir sayıda karakteri, _ joker karakteri ise tek bir karakteri temsil eder. SELECT UrunAdi FROM Urunler WHERE UrunAdi LIKE 'Bilgisayar%';softmush.com Açıklama: Bu sorgu, Urunler tablosundan UrunAdi sütunu 'Bilgisayar' ile başlayan tüm ürünleri getirir. 6. IN Operatörü: Bir sütunun belirtilen değerler listesi içinde olup olmadığını kontrol eder. SELECT MusteriAdi, Sehir FROM Musteriler WHERE Sehir IN ('İstanbul', 'İzmir', 'Bursa');softmush.com Açıklama: Bu sorgu, Musteriler tablosundan Sehir sütunu 'İstanbul', 'İzmir' veya 'Bursa' olan müşterileri getirir. 7. BETWEEN Operatörü: Bir değerin belirli bir aralıkta (dahil) olup olmadığını kontrol eder. SELECT UrunAdi, Fiyat FROM Urunler WHERE Fiyat BETWEEN 50 AND 150;softmush.com Açıklama: Bu sorgu, Urunler tablosundan Fiyat sütunu 50 ile 150 arasında olan (50 ve 150 dahil) tüm ürünleri getirir. 8. IS NULL / IS NOT NULL: Bir sütunun NULL değer içerip içermediğini kontrol eder. SELECT CalisanAdi FROM Calisanlar WHERE Telefon IS NULL;softmush.com Açıklama: Bu sorgu, Calisanlar tablosundan Telefon numarası boş (NULL) olan çalışanları getirir. Önemli Notlar Veritabanı sistemine bağlı olarak, string karşılaştırmaları büyük/küçük harf duyarlı olabilir. Hassas aramalarda LOWER() veya UPPER() fonksiyonlarını kullanmayı düşünebilirsiniz. WHERE yan tümcesinde kullanılan sütunlara indeks eklemek, sorgu performansını önemli ölçüde artırabilir. Özellikle büyük tablolar üzerinde sıkça filtrelenen sütunlar için indeksleme kritik öneme sahiptir. NULL değerler özel bir durumdur ve eşitlik operatörü (=) ile karşılaştırılamaz. Bunun yerine IS NULL veya IS NOT NULL kullanılmalıdır. Örneğin, WHERE kolon = NULL beklenen sonucu vermeyecektir. Karmaşık koşulları gruplamak için parantezler () kullanılabilir. Bu, mantıksal operatörlerin (AND, OR) işlem önceliğini açıkça belirtmenize yardımcı olur ve sorgunun okunabilirliğini artırır. WHERE yan tümcesi yalnızca SELECT değil, aynı zamanda UPDATE ve DELETE deyimleriyle de kullanılarak belirli kayıtların güncellenmesini veya silinmesini sağlar.
avatar
Emin
14
0
JavaScript Makaleleri
javascript-dilinde-js-loops-kullanimi
JavaScript Dilinde JS Loops Kullanımı
JavaScript'te döngüler (loops), belirli bir kod bloğunu tekrarlayan görevleri otomatikleştirmek için kullanılan temel programlama yapılarıdır. Bu yapılar, diziler, nesneler veya diğer yinelenebilir veri türleri üzerinde işlem yaparken veya belirli bir koşul karşılanana kadar bir işlemi tekrarlarken büyük önem taşır. JavaScript, programcılara farklı senaryolara uygun çeşitli döngü türleri sunar. Sözdizimi JavaScript'teki ana döngü türleri ve bunların genel sözdizimleri aşağıda belirtilmiştir: 1. for Döngüsü for (başlangıç; koşul; artırma/azaltma) { // Çalıştırılacak kod bloğu }softmush.com 2. while Döngüsü while (koşul) { // Çalıştırılacak kod bloğu }softmush.com 3. do...while Döngüsü do { // Çalıştırılacak kod bloğu } while (koşul);softmush.com 4. for...in Döngüsü for (değişken in nesne) { // Nesnenin numaralandırılabilir özelliklerine erişim }softmush.com 5. for...of Döngüsü for (değişken of yinelenebilir) { // Yinelenebilir nesnenin değerlerine erişim }softmush.com Detaylı Açıklama for Döngüsü: Belirli sayıda tekrar edilmesi gereken durumlar için idealdir. Üç ana bileşeni vardır: Başlangıç (Initialization): Döngü başlamadan önce bir kez yürütülen ifadedir. Genellikle bir sayıcı değişkeni burada tanımlanır ve başlatılır. Koşul (Condition): Her döngü tekrarından önce değerlendirilen ifadedir. Koşul true olduğu sürece döngü devam eder. false olduğunda döngü sonlanır. Artırma/Azaltma (Increment/Decrement): Her döngü tekrarından sonra yürütülen ifadedir. Genellikle sayıcı değişkenini günceller. while Döngüsü: Belirli bir koşul true olduğu sürece kod bloğunu yürütür. Koşul, döngü başlamadan önce ve her tekrarın başında kontrol edilir. Koşulun döngü içinde bir noktada false olmaması durumunda sonsuz döngüye yol açabilir. do...while Döngüsü: while döngüsüne benzer, ancak kod bloğunu koşul kontrol edilmeden önce en az bir kez yürütmeyi garanti eder. Koşul, kod bloğu yürütüldükten sonra kontrol edilir. for...in Döngüsü: Bir nesnenin numaralandırılabilir özellik adları (anahtarları) üzerinde döngü yapmak için kullanılır. Genellikle nesnelerin özelliklerini iterasyonla elde etmek için tercih edilir. Ancak, dizi elemanlarını yinelemek için kullanıldığında beklenmedik sonuçlar verebilir çünkü dizi anahtarlarını (indekslerini) string olarak döndürür ve prototip zincirindeki özellikleri de dahil edebilir. for...of Döngüsü: Yinelenebilir nesneler (diziler, stringler, Map'ler, Set'ler vb.) üzerinde döngü yapmak için kullanılır. Her yinelemede, yinelenebilir nesnenin bir sonraki değerini doğrudan döndürür. Bu, for...in döngüsünün aksine, dizilerin elemanlarına doğrudan erişmek için daha güvenli ve daha yaygın bir yöntemdir. Pratik Kullanım Örnekleri 1. for Döngüsü ile Sayı Sayma ve Dizi Elemanlarına Erişim Bu örnek, 0'dan 4'e kadar sayıları konsola yazdırır ve bir dizinin elemanlarını iterasyonla gösterir. // 0'dan 4'e kadar sayıları yazdırma for (let i = 0; i < 5; i++) { console.log("Sayı: " + i); } // Bir dizinin elemanlarını yazdırma const meyveler = ["Elma", "Armut", "Kiraz"]; for (let i = 0; i < meyveler.length; i++) { console.log("Meyve: " + meyveler[i]); }softmush.com 2. while Döngüsü ile Koşullu Tekrar Bu örnek, bir sayacın değeri 3'ten küçük olduğu sürece konsola mesaj yazdırır. let sayac = 0; while (sayac < 3) { console.log("While döngüsü çalışıyor, sayaç: " + sayac); sayac++; }softmush.com 3. do...while Döngüsü ile En Az Bir Kez Çalışma Garantisi Bu örnek, koşul başlangıçta false olsa bile kod bloğunu en az bir kez yürütür. let x = 5; do { console.log("Do...while döngüsü çalıştı, x: " + x); x++; } while (x < 5); // Koşul false, ancak döngü bir kez çalıştı.softmush.com 4. for...in Döngüsü ile Nesne Özelliklerini Yineleme Bu örnek, bir nesnenin anahtarları ve değerleri üzerinde döngü yapar. const kisi = { ad: "Ahmet", soyad: "Yılmaz", yas: 30 }; for (let anahtar in kisi) { console.log(anahtar + ": " + kisi[anahtar]); }softmush.com 5. for...of Döngüsü ile Dizi ve String Değerlerini Yineleme Bu örnek, bir dizinin elemanlarını ve bir stringin karakterlerini doğrudan değerleriyle birlikte iterasyonla gösterir. // Dizi elemanları üzerinde döngü const renkler = ["Kırmızı", "Mavi", "Yeşil"]; for (let renk of renkler) { console.log("Renk: " + renk); } // String karakterleri üzerinde döngü const metin = "Merhaba"; for (let karakter of metin) { console.log("Karakter: " + karakter); }softmush.com 6. break ve continue Kullanımı break anahtar kelimesi döngüyü tamamen sonlandırırken, continue anahtar kelimesi mevcut yinelemeyi atlar ve döngünün bir sonraki yinelemesine geçer. for (let i = 0; i < 10; i++) { if (i === 3) { continue; // 3'ü atla } if (i === 7) { break; // 7'ye gelince döngüyü durdur } console.log("Sayı (break/continue): " + i); } // Çıktı: 0, 1, 2, 4, 5, 6softmush.com Önemli Notlar Sonsuz Döngüler: while veya for döngülerinde koşulun hiçbir zaman false olmaması durumunda sonsuz döngüler oluşabilir. Bu durum, uygulamanın donmasına veya kilitlenmesine neden olabilir. Döngü koşullarını dikkatlice tanımlamak esastır. Doğru Döngü Türünü Seçme: Görevinizin doğasına göre en uygun döngü türünü seçmek önemlidir: Belirli sayıda tekrar için for döngüsü. Bir koşul true olduğu sürece devam etmek için while döngüsü. En az bir kez çalışması gereken durumlar için do...while döngüsü. Nesne özelliklerini yinelemek için for...in döngüsü. Yinelenebilir nesnelerin (diziler, stringler vb.) değerleri üzerinde döngü yapmak için for...of döngüsü. for...in vs. for...of: for...in nesne anahtarlarını/indekslerini döndürürken, for...of doğrudan değerleri döndürür. Dizilerle çalışırken genellikle for...of tercih edilir. break ve continue Anahtar Kelimeleri: Bu anahtar kelimeler, döngünün akışını kontrol etmek için kullanılır. break döngüyü tamamen sonlandırır, continue ise mevcut iterasyonu atlayıp bir sonraki iterasyona geçer. let ve const ile Değişken Tanımlama: Döngü içerisinde tanımlanan değişkenler için let veya const kullanmak, değişkenlerin kapsamını (scope) doğru bir şekilde yönetmenizi sağlar ve potansiyel hataları önler.
avatar
Emin
9
0
Bilim Makaleleri
komplo-teorilerinin-buyulu-cekim-gucu-neden-onlara-inanmayi-seviyoruz
Komplo Teorilerinin Büyülü Çekim Gücü: Neden Onlara İnanmayı Seviyoruz?
Karanlıkta fısıldanan sırlar, gölgelerin arkasına saklanmış güçlü figürler ve dünyayı sarsan olayların perde arkasındaki gizli planlar… Komplo teorileri, insanlık tarihi boyunca hep var oldu ve modern çağda, özellikle dijital dünyanın sunduğu sonsuz bağlantılarla birlikte, çok daha güçlü bir şekilde hayatımızın merkezine oturdu. Peki, neden bu kadar çok insan bu tür anlatılara inanmaya meyilli? Neden bilimsel gerçekler ve resmi açıklamalar yerine, çoğu zaman kanıtlardan yoksun, fantastik senaryolar bize daha çekici geliyor? Bir SEO yazarı ve gazeteci olarak, bu konuda yapılan araştırmaları ve insan psikolojisinin derinliklerini incelediğimde, komplo teorilerine olan düşkünlüğümüzün tek bir nedene bağlı olmadığını, aksine çok katmanlı psikolojik, sosyolojik ve bilişsel ihtiyaçlardan beslendiğini görüyorum. Gelin, bu karmaşık çekim gücünü adım adım irdeleyelim. Belirsizliği Giderme İsteği: Kaosun Anlamı Dünya karmaşık ve çoğu zaman öngörülemez bir yerdir. Büyük felaketler, ekonomik krizler, küresel salgınlar veya siyasi çalkantılar gibi olaylar karşısında kendimizi çaresiz ve belirsizlik içinde hissedebiliriz. İşte bu noktada komplo teorileri devreye girer. Karmaşık ve açıklanması güç olaylara basit, tutarlı ve çoğu zaman dramatik bir açıklama sunarlar. Korkunç bir olayın sadece "kötü şans" veya "doğal bir felaket" olması, insan zihni için kabul edilmesi zor olabilir. Birilerinin bu olayın arkasında olduğuna inanmak, kaotik bir dünyaya düzen getirme, en azından bir anlamlandırma çabasıdır. Her ne kadar bu açıklama korkutucu olsa da, belirsizliğin kendisinden daha az rahatsız edici olabilir. Çünkü bir düşman varsa, ona karşı bir şeyler yapılabilir; ama anlamsız bir kaos karşısında sadece beklemek zorunda kalırız. Kontrol Duygusu Arayışı: Bilmek ve Özel Olmak Hayatımızdaki kontrol eksikliği, komplo teorilerine olan ilgimizi artıran önemli bir faktördür. Büyük kurumlar, hükümetler veya küresel güçler karşısında kendimizi küçük ve etkisiz hissedebiliriz. Komplo teorileri ise bize, gizli bir bilginin taşıyıcısı olma ve "gerçeği" diğerlerinden önce görme fırsatı sunar. Bu, bireye bir tür güç ve kontrol duygusu verir. Sanki "perdenin arkasına" bakabilmiş, "uyuyan" kitlelerden farklı bir aydınlanma yaşamışız gibi hissederiz. Bu özel bilgiye sahip olmak, hem kendimizi daha akıllı ve dikkatli hissetmemizi sağlar hem de bize bir üstünlük hissi verir. Dünyanın nasıl işlediğine dair yeni bir çerçeve sunarak, pasif bir gözlemci olmaktan çıkıp, olayın içindeki bir aktör gibi hissetmemizi sağlar. Topluluk ve Aidiyet İhtiyacı: Ortak Bir Düşman İnsan sosyal bir varlıktır ve aidiyet duygusu temel ihtiyaçlarımızdan biridir. Komplo teorileri, bireyleri ortak bir inanç ve düşman etrafında birleştirerek güçlü topluluklar oluşturabilir. Bu gruplar içinde, dışarıdan gelen eleştirilere karşı bir "biz" ve "onlar" ayrımı oluşur. Ortak Kimlik: Komplo teorilerine inanan kişiler, genellikle kendilerini ana akım medyadan veya resmi açıklamalardan şüphe duyan, gerçeği arayan bir grup olarak tanımlarlar. Bu ortak kimlik, birbirlerine bağlanmalarını kolaylaştırır. Sosyal Destek: Bu gruplar içinde, inançlar pekiştirilir ve desteklenir. Dışarıdan gelen eleştiriler, grubun üyeleri tarafından "gerçeği bilmeyenlerin" veya "komplonun bir parçası olanların" sözleri olarak algılanır, bu da grubun iç bağlarını daha da güçlendirir. Anlam ve Amaç: Bir komployu ortaya çıkarma veya ona karşı savaşma misyonu, bireylere bir amaç ve anlam duygusu verebilir. Bu, özellikle hayatında boşluk hisseden kişiler için cazip olabilir. Otoriteye Güvensizlik: Tarihsel Deneyimler ve Medya Etkisi Devletler, büyük şirketler veya medya kuruluşları zaman zaman yanlış bilgi yaymış, gerçekleri çarpıtmış veya halkı yanıltmıştır. Watergate skandalı, MKUltra projesi gibi gerçek komplo örnekleri, insanların otoriteye olan güvenini sarsmıştır. Bu tür olaylar, haklı bir şüphecilik tohumu ekerek, gelecekteki komplo teorilerine zemin hazırlar. Günümüzde, ana akım medyaya olan güvenin azalması da komplo teorilerinin yükselişinde önemli bir rol oynamaktadır. İnsanlar, haber kaynaklarının taraflı olduğunu veya belirli bir gündemi olduğunu düşündüğünde, alternatif açıklamalara yönelme eğilimi gösterirler. Bu durum, özellikle sosyal medyada, her türlü bilginin hızla yayıldığı bir ortamda daha da belirginleşir. Bilişsel Yanılgılar ve İnsan Zihni: Kendi Tuzaklarımız İnsan zihni kusursuz değildir; belirli bilişsel yanılgılara (cognitive biases) eğilimlidir. Bu yanılgılar, komplo teorilerine inanma eğilimimizi güçlendirebilir: Onay Yanılgısı (Confirmation Bias): Zihnimiz, mevcut inançlarımızı destekleyen bilgileri aramaya ve yorumlamaya meyillidir. Bir komplo teorisine inanmaya başladığımızda, onu destekleyen her türlü kanıtı (ne kadar zayıf olursa olsun) daha kolay kabul ederiz ve çürüten kanıtları göz ardı ederiz. Ajan Tespiti (Agent Detection): İnsanlar olarak, olayların arkasında bir fail veya amaç arama eğilimindeyizdir. Rastgele olaylarda bile bir düzen veya kasıt aramak, evrimsel bir adaptasyonun yan etkisi olabilir. Bir felaketin arkasında "kötü adamlar" olması, anlamsız bir rastgelelikten daha anlaşılır gelir. Orantısallık Yanılgısı (Proportionality Bias): Büyük olayların büyük ve önemli nedenleri olması gerektiğine inanırız. Örneğin, bir devlet başkanının ölümü gibi büyük bir olayın basit bir kazadan ziyade, büyük bir komplo sonucu gerçekleştiğine inanmak daha "mantıklı" gelebilir. Yanlış Korelasyon (Illusory Correlation): İki olay arasında aslında hiçbir bağlantı olmamasına rağmen, bir ilişki olduğunu varsayma eğilimimiz vardır. Bu, komplo teorisyenlerinin farklı olayları birleştirerek "büyük resmi" görmelerine neden olabilir. Dijital Çağın Etkisi: Yankı Odaları ve Algoritmalar İnternet ve sosyal medya, komplo teorilerinin yayılma hızını ve etkinliğini inanılmaz derecede artırdı. Artık dünyanın dört bir yanındaki benzer inançlara sahip insanlarla anında bağlantı kurmak mümkün. Bu durum, "yankı odaları" ve "filtre baloncukları" oluşumuna yol açar. Sosyal medya algoritmaları, kullanıcıların ilgisini çeken içeriği daha fazla gösterme eğilimindedir. Eğer bir kişi komplo teorileriyle ilgili içeriklere tıklıyorsa, algoritma ona daha fazlasını sunar. Bu döngü, bireyin yalnızca kendi inançlarını doğrulayan bilgilerle karşılaşmasına neden olurken, farklı görüşlere veya bilimsel kanıtlara maruz kalmasını engeller. Yanlış bilginin doğrulanmamış bir şekilde hızla yayılması, artık bir e-posta zinciriyle değil, küresel bir ağ üzerinden saniyeler içinde gerçekleşiyor. Özetle, komplo teorilerine olan çekim gücümüz, insan doğasının derinliklerine kök salmış çok sayıda ihtiyacın bir yansımasıdır. Belirsizlikten kaçma, kontrol hissi arayışı, özel bilgiye sahip olma arzusu, bir topluluğa ait olma ihtiyacı ve otoriteye duyulan güvensizlik gibi faktörler, bilişsel yanılgılarımız ve dijital çağın sunduğu imkanlarla birleştiğinde, komplo teorilerinin neden bu kadar cazip ve yaygın olduğunu açıklıyor. Bu durum, eleştirel düşünme ve bilgi okuryazarlığının önemini her zamankinden daha fazla ortaya koymaktadır.
avatar
Emin
15
0
CSS Makaleleri
css-dilinde-hata-tespiti-ve-giderme
CSS Dilinde Hata Tespiti ve Giderme
Web tasarımının temelini oluşturan CSS (Basamaklı Stil Sayfaları), bir belgenin görsel sunumunu tanımlamak için güçlü bir araçtır. Ancak, her programlama dilinde olduğu gibi, CSS kodunda da hatalar meydana gelebilir. Bu hatalar, web sayfalarının beklenen şekilde görünmemesine, düzensiz render edilmesine veya tamamen stil kaybına neden olabilir. Bu makale, CSS dilinde karşılaşılabilecek yaygın hata türlerini, bu hataların nasıl tespit edileceğini ve düzeltileceğini teknik bir yaklaşımla ele alarak, sağlam ve bakımı kolay stil sayfaları oluşturmanıza yardımcı olmayı amaçlamaktadır. Temel Sözdizimi CSS kodunun temel yapı taşı, bir seçici ve bir bildirim bloğundan oluşan kural kümesidir. Bir seçici, HTML belgesindeki hangi öğelerin stilize edileceğini belirtirken, bildirim bloğu süslü parantezler { } içine alınmış bir veya daha fazla bildirim içerir. Her bildirim, bir özellik ve bir değerden oluşur ve iki nokta üst üste : ile ayrılır. Her bildirim noktalı virgül ; ile sonlandırılmalıdır. Örnek bir doğru CSS kural kümesi aşağıdaki gibidir: seçici { özellik: değer; özellik-iki: değer-iki; } softmush.com Bu yapıdan sapmalar, CSS hatalarına yol açar. Hataların çoğu, bu temel sözdizimi kurallarına uymamaktan kaynaklanır. Detaylı Açıklama CSS hataları genellikle üç ana kategoriye ayrılır: Sözdizimi Hataları (Syntax Errors): Bunlar, CSS kurallarının yazımında yapılan temel hatalardır. Eksik noktalı virgüller, kapanış süslü parantezlerin olmaması, yanlış yazılmış özellik adları, geçersiz değerler veya iki nokta üst üste işaretinin eksikliği gibi durumları içerir. Tarayıcılar, sözdizimi hatalarını genellikle tamamen göz ardı eder veya hatanın olduğu kuralı ve bazen sonraki kuralları işlemez. Mantıksal Hatalar (Logical Errors): Kodun sözdizimsel olarak doğru olmasına rağmen, beklenen görsel çıktıyı vermemesi durumudur. Bu tür hatalar genellikle seçici özgüllüğü (specificity), kaskat (cascade) sırası, kalıtım (inheritance) veya yanlış seçici kullanımı gibi CSS'in temel mekanizmalarının yanlış anlaşılmasından kaynaklanır. Örneğin, daha az özgül bir kuralın, daha özgül bir kuralı yanlışlıkla geçersiz kılması bir mantıksal hatadır. Tarayıcı Uyumluluk Hataları (Browser Compatibility Errors): Belirli CSS özellikleri veya değerlerinin farklı tarayıcılarda veya tarayıcı sürümlerinde farklı şekilde yorumlanması veya hiç desteklenmemesi durumudur. Bu hatalar genellikle deneysel özellikler, eski tarayıcılar için gerekli olan tedarikçi öneklerinin (vendor prefixes) eksikliği veya standartlaşmamış CSS kullanımlarından kaynaklanır. Pratik Kullanım Örnekleri Aşağıdaki örnekler, yaygın CSS hata türlerini ve bunların nasıl düzeltileceğini göstermektedir: Örnek 1: Sözdizimi Hatası (Eksik Noktalı Virgül) Bu örnekte, color özelliğinin sonunda noktalı virgül unutulmuştur. Bu durum, font-size özelliğinin de doğru şekilde uygulanmamasına neden olabilir. /* Hatalı Kod */ .hatali-div { color: red /* Noktalı virgül eksik */ font-size: 16px; } /* Doğru Kod */ .dogru-div { color: red; font-size: 16px; } softmush.com Örnek 2: Mantıksal Hata (Özgüllük Sorunu) Burada, p etiketi için iki farklı renk tanımlanmıştır. Beklentiniz p elementinin kırmızı olması olsa da, #ana-div p seçicisi daha yüksek bir özgüllüğe sahip olduğu için paragraf mavi renkte görünecektir. /* Hatalı Mantık - Özgüllük */ #ana-div p { color: blue; /* ID seçici daha yüksek özgüllüğe sahiptir */ } p { color: red; /* Bu kural geçersiz kılınır */ } /* HTML yapısı */ Bu paragraf mavi renkte görünecektir. softmush.com Örnek 3: Sözdizimi Hatası (Geçersiz Değer Birimi) width özelliği için geçersiz bir birim (pix yerine px) kullanılmıştır. Tarayıcı bu kuralı tamamen göz ardı edecektir. /* Hatalı Kod */ .gecersiz-deger { width: 100pix; /* 'pix' geçersiz bir birimdir */ } /* Doğru Kod */ .gecerli-deger { width: 100px; /* Doğru birim 'px' */ } softmush.com Örnek 4: Tarayıcı Uyumluluk Hatası (Tedarikçi Öneki Eksikliği) flexbox gibi modern CSS özelliklerini eski tarayıcılarda desteklemek için tedarikçi önekleri kullanmak gerekebilir. Öneklerin eksikliği, bazı tarayıcılarda stilin uygulanmamasına neden olur. /* Potansiyel Hata - Eski tarayıcılar için önekler eksik */ .flex-kapsayici { display: flex; /* Sadece modern tarayıcılarda çalışır */ } /* Doğru Kod - Çapraz tarayıcı uyumluluğu için önekler */ .flex-kapsayici { display: -webkit-box; /* Eski Safari ve Chrome */ display: -ms-flexbox; /* Internet Explorer 10 */ display: flex; /* Standart ve modern tarayıcılar */ } softmush.com Önemli Notlar Geliştirici Araçları Kullanımı: Modern web tarayıcılarında (Chrome DevTools, Firefox Developer Tools vb.) bulunan geliştirici araçları, CSS hatalarını tespit etmede en güçlü yardımcıdır. Eleman denetçisi (Elements panel) aracılığıyla bir öğeye uygulanan CSS kurallarını inceleyebilir, geçersiz kılınan veya uygulanmayan stilleri görebilirsiniz. Konsol (Console) panelinde bazı sözdizimi hataları raporlanabilir. CSS Doğrulayıcıları: W3C CSS Validator gibi çevrimiçi araçlar, CSS kodunuzdaki sözdizimi hatalarını otomatik olarak kontrol eder ve raporlar. Bu, özellikle büyük projelerde veya birden fazla geliştiricinin çalıştığı durumlarda faydalıdır. Cascade ve Özgüllük Anlayışı: CSS'in kaskat mekanizması ve özgüllük kuralları, mantıksal hataları önlemek için kritik öneme sahiptir. Hangi stilin ne zaman uygulanacağını anlamak, istenmeyen geçersiz kılmaları engeller. Genellikle daha az özgül seçicilerle başlayıp, gerektiğinde özgüllüğü artırmak iyi bir pratiktir. Çapraz Tarayıcı Testi: Uygulamanızı farklı tarayıcılarda ve cihazlarda test etmek, tarayıcı uyumluluk hatalarını erken aşamada tespit etmenize yardımcı olur. BrowserStack veya LambdaTest gibi araçlar bu süreci kolaylaştırabilir. Pre-processor Kullanımı: Sass, Less veya Stylus gibi CSS ön işlemcileri, değişkenler, iç içe kurallar ve mixin'ler gibi özellikler sunarak daha düzenli ve hataya daha az açık CSS kodu yazmanıza olanak tanır. Ayrıca, derleme sırasında bazı sözdizimi hatalarını yakalayabilirler.
avatar
Emin
15
0
PHP Makaleleri
php-dilinde-degiskenler-kullanimi-kapsamli-kilavuz
PHP Dilinde Değişkenler Kullanımı: Kapsamlı Kılavuz
Her programlama dilinin temel yapı taşlarından biri olan değişkenler, verileri depolamak ve yönetmek için kullanılır. PHP'de değişkenler, metin, sayılar, diziler veya nesneler gibi farklı türdeki bilgileri bellekte geçici olarak tutmanıza olanak tanır. Bu kılavuz, PHP dilinde değişkenlerin nasıl tanımlandığını, kullanıldığını ve bunlarla ilgili önemli kavramları adım adım açıklayacaktır. Sözdizimi PHP'de bir değişken tanımlamak için $ (dolar) işareti kullanılır, ardından değişkenin adı gelir. Değişkene bir değer atamak için atama operatörü (=) kullanılır. Genel sözdizimi aşağıdaki gibidir: $degiskenAdi = deger;softmush.com Detaylı Açıklama Yukarıdaki sözdizimindeki her bir bileşen, değişkenin doğru şekilde tanımlanması için kritik öneme sahiptir: $: PHP'de bir ifadenin değişken olduğunu belirtmek için kullanılan zorunlu bir önektir. Her değişken adı bu karakterle başlamalıdır. degiskenAdi: Değişkenin benzersiz adıdır. PHP'de değişken adları harfle veya alt çizgi (_) ile başlamalıdır. Rakamlarla başlayamaz. Harf, rakam ve alt çizgi içerebilir. Değişken adları büyük/küçük harf duyarlıdır (örneğin, $ad ve $Ad farklı değişkenlerdir). =: Atama operatörüdür. Sağındaki değeri solundaki değişkene atar. deger: Değişkene atanacak olan veri. Bu bir metin (string), sayı (integer, float), doğru/yanlış değeri (boolean), dizi (array), nesne (object), veya özel bir değer (NULL) olabilir. ;: Her PHP ifadesinin sonuna konulması gereken bir ifade sonlandırma karakteridir. Pratik Kullanım Örnekleri Aşağıdaki örnekler, farklı veri türlerindeki değişkenlerin nasıl tanımlandığını ve kullanıldığını göstermektedir: Örnek 1: Metin (String) Değişkeni softmush.com Örnek 2: Sayı (Integer ve Float) Değişkenleri softmush.com Örnek 3: Boolean (Mantıksal) Değişkeni softmush.com Örnek 4: Dizi (Array) Değişkeni softmush.com Önemli Notlar Değişken Adlandırma Kuralları: Değişken adları her zaman bir harf veya alt çizgi ile başlamalıdır. Rakamlarla başlayamaz. Boşluk veya özel karakterler ($, -, +, # vb.) içeremez. Büyük/Küçük Harf Duyarlılığı: PHP'de değişken adları büyük/küçük harf duyarlıdır. $isim ile $Isim iki farklı değişkendir. Veri Türleri: PHP, dinamik olarak tipleştirilmiş bir dildir, yani bir değişkenin veri türünü belirtmeniz gerekmez. PHP, atanana değere göre veri türünü otomatik olarak belirler. Bu, aynı değişkenin farklı zamanlarda farklı türde değerler barındırabileceği anlamına gelir. Değişken Kapsamı (Scope): Değişkenlerin nerede tanımlandığına bağlı olarak farklı kapsamlara sahip olabilirler (yerel, küresel, statik). Bu, değişkenlerin programın hangi bölümlerinden erişilebilir olduğunu belirler. Referans ile Atama: Normalde değişkenler değer kopyası ile atanır. Ancak, bir değişkeni referans ile atamak isterseniz, & operatörünü kullanmanız gerekir ($yeniDegisken = &$orjinalDegisken;). Bu durumda, iki değişken aynı bellek konumunu işaret eder.
avatar
Emin
11
0
Python Makaleleri
python-dilinde-aciklama-satirlari-comments-kullanimi
Python Dilinde Açıklama Satırları (Comments) Kullanımı
Python programlama dilinde, kodun okunabilirliğini artırmak ve işlevselliğini belgelemek amacıyla açıklama satırları (comments) kullanılır. Bu satırlar, programın çalışması sırasında Python yorumlayıcısı tarafından göz ardı edilir ve yalnızca geliştiricilere yönelik notlar, açıklamalar veya geçici olarak devre dışı bırakılan kod parçalarını içerir. Etkili yorum kullanımı, kodun anlaşılabilirliğini ve sürdürülebilirliğini önemli ölçüde artırır. Sözdizimi Python'da açıklama satırları iki ana şekilde tanımlanır: tek satırlık yorumlar ve çok satırlık yorumlar olarak da bilinen docstring'ler. # Bu tek satırlık bir yorumdur. print("Merhaba, Dünya!") # Bu da satır sonu yorumudur. """ Bu bir docstring'dir. Genellikle fonksiyon, sınıf veya modül tanımlarında açıklama yapmak için kullanılır. """ def topla(a, b): """ İki sayıyı toplayan bir fonksiyon. Argümanlar: a (int): İlk sayı. b (int): İkinci sayı. Dönüş: int: İki sayının toplamı. """ return a + b softmush.com Detaylı Açıklama Python'da açıklama satırları, kodun amacını ve işleyişini açıklamak için kritik öneme sahiptir. Tek Satırlık Yorumlar: Tek satırlık yorumlar, # karakteri ile başlar ve o satırın sonuna kadar devam eder. # karakterinden sonra yazılan her şey Python yorumlayıcısı tarafından yürütülmez. Bu tür yorumlar, belirli bir kod satırının ne yaptığını açıklamak, bir değişkenin amacını belirtmek veya geçici olarak bir kod parçasını devre dışı bırakmak için idealdir. Çok Satırlık Yorumlar (Docstring'ler): Python'da resmi olarak çok satırlık bir yorum sözdizimi bulunmamaktadır. Ancak, üçlü tırnak işaretleri (tek veya çift tırnak olabilir) arasına alınan metinler, bir değişkene atanmadığı sürece Python yorumlayıcısı tarafından göz ardı edilir. Bu yapıya genellikle docstring adı verilir ve fonksiyonların, sınıfların, modüllerin veya metotların hemen altına yerleştirilerek onların işlevselliğini belgelemek için kullanılır. Docstring'ler, kodun otomatik belgelendirme araçları tarafından okunabilir olması nedeniyle tek satırlık yorumlardan farklı bir amaca hizmet eder. Pratik Kullanım Örnekleri Aşağıdaki örnekler, açıklama satırlarının çeşitli kullanım senaryolarını göstermektedir. **Örnek 1: Temel Tek Satırlık Yorum Kullanımı** Bu örnek, bir kod satırının amacını açıklamak için tek satırlık bir yorumun nasıl kullanıldığını gösterir. # Kullanıcının adını saklayacak bir değişken tanımla kullanici_adi = "softmush" print(f"Hoş geldin, {kullanici_adi}!") # Kullanıcıya özel karşılama mesajı göster softmush.com **Örnek 2: Geçici Kod Devre Dışı Bırakma** Bir kod parçasını test amacıyla veya gelecekteki kullanım için geçici olarak devre dışı bırakmak için yorum satırları kullanılabilir. def hesaplama_yap(x, y): sonuc = x * y # print(f"Ara sonuç: {sonuc}") # Bu satır şu anda devre dışı return sonuc + 10 print(hesaplama_yap(5, 3)) softmush.com **Örnek 3: Docstring Kullanımı (Fonksiyon Belgelendirme)** Fonksiyonların ne iş yaptığını, aldığı argümanları ve döndürdüğü değeri açıklamak için docstring'ler yaygın olarak kullanılır. def daire_alani_hesapla(yaricap): """ Verilen yarıçap ile bir dairenin alanını hesaplar. Argümanlar: yaricap (float veya int): Dairenin yarıçapı. Dönüş: float: Hesaplanan daire alanı. """ PI = 3.14159 return PI * yaricap * yaricap print(daire_alani_hesapla(5)) softmush.com Önemli Notlar Aşırı Yorum Yapmaktan Kaçının: Açıkça anlaşılan veya kendi kendini açıklayan kod satırlarını yorumlamak gereksizdir. Yorumlar, kodun neden bu şekilde yazıldığına veya karmaşık mantığın açıklamasına odaklanmalıdır. Güncel Tutun: Kod değiştikçe yorumların da güncellenmesi esastır. Eski ve yanlış yorumlar, kodun anlaşılmasını zorlaştırabilir ve hatalara yol açabilir. Ne Yaptığını Değil, Neden Yaptığını Açıklayın: İyi yorumlar, kodun ne yaptığını (ki bu genellikle kodun kendisinden anlaşılır) değil, neden belirli bir yaklaşımın benimsendiğini veya belirli bir değeri ne amaçla kullandığınızı açıklar. Docstring Standartlarına Uyun: Özellikle projelerde çalışırken, PEP 257 gibi Python docstring standartlarına (örneğin Google, NumPy veya reStructuredText formatları) uymak, kodun belgelendirme sürecini kolaylaştırır ve tutarlılık sağlar. Geçici Devre Dışı Bırakma: Geliştirme aşamasında, test etmek veya sorun gidermek için kod satırlarını yorum satırı haline getirmek pratik bir yöntemdir. Ancak, temiz kodda kalıcı olarak yorumlanmış gereksiz kod bulundurmaktan kaçınılmalıdır.
avatar
Emin
8
0
SQL Makaleleri
sql-dilinde-select-distinct-kullanimi
SQL Dilinde `SELECT DISTINCT` Kullanımı
Veritabanı yönetim sistemlerinde, sorgulama işlemleri sırasında sonuç kümesindeki yinelenen (duplicate) satırları ortadan kaldırmak, veri analizi ve raporlama için kritik bir gerekliliktir. SQL'de bu ihtiyacı karşılamak için kullanılan temel anahtar kelimelerden biri DISTINCT'tir. Bu rehber, SELECT DISTINCT ifadesinin sözdizimini, işleyişini ve pratik kullanım senaryolarını adım adım açıklamaktadır. Amacımız, veritabanınızdan yalnızca benzersiz değerleri nasıl alacağınızı teknik ve anlaşılır bir dille sunmaktır. Sözdizimi SELECT DISTINCT ifadesinin genel sözdizimi aşağıdaki gibidir: SELECT DISTINCT sütun1, sütun2, ... FROM tablo_adı;softmush.com Alternatif olarak, tüm sütunlar için tekil kombinasyonları almak isterseniz, * karakterini de kullanabilirsiniz. Ancak bu kullanım, genellikle spesifik sütunlar için tekillik arandığında daha az tercih edilir. SELECT DISTINCT * FROM tablo_adı;softmush.com Detaylı Açıklama Sözdizimindeki her bir bileşen aşağıdaki anlamlara gelmektedir: SELECT: Veritabanından veri almak için kullanılan temel SQL komutudur. DISTINCT: SELECT komutundan sonra kullanılan bu anahtar kelime, sorgu sonucunda yinelenen satırların elenmesini sağlar. Yalnızca benzersiz satırlar sonuç kümesine dahil edilir. sütun1, sütun2, ...: Benzersiz değerlerini almak istediğiniz bir veya daha fazla sütunun adlarıdır. Eğer birden fazla sütun belirtilirse, DISTINCT bu sütunların tümünün kombinasyonuna bakar. Yani, belirtilen tüm sütunlardaki değerlerin aynı olduğu satırlar yinelenen kabul edilir. FROM tablo_adı: Verilerin çekileceği veritabanı tablosunun adını belirtir. Özetle, DISTINCT anahtar kelimesi, SELECT ifadesi tarafından döndürülen satırlar arasında, belirtilen sütunların veya tüm sütunların kombinasyonunda tamamen aynı olanları eleyerek, her bir benzersiz kombinasyondan yalnızca bir satır döndürür. Pratik Kullanım Örnekleri Aşağıdaki örneklerde, bir Calisanlar tablosunu kullanarak SELECT DISTINCT ifadesinin farklı senaryolarda nasıl kullanıldığını inceleyeceğiz. Calisanlar Tablosu Örneği: CalisanID | Ad | Soyad | Departman | Sehir ----------|--------|--------|--------------------|-------- 1 | Ali | Yılmaz | Muhasebe | İstanbul 2 | Ayşe | Demir | İnsan Kaynakları | Ankara 3 | Can | Kara | Muhasebe | İstanbul 4 | Elif | Can | Pazarlama | İzmir 5 | Burak | Akın | Pazarlama | Ankara 6 | Zeynep | Tekin | Muhasebe | Ankara 7 | Deniz | Güneş | İnsan Kaynakları | İstanbul 8 | Mert | Yıldız | Pazarlama | İzmirsoftmush.com Örnek 1: Tek Bir Sütundaki Tekil Değerler Bu örnek, Calisanlar tablosundaki tüm benzersiz departman isimlerini listeler. SELECT DISTINCT Departman FROM Calisanlar;softmush.com Sonuç: Departman -------------------- Muhasebe İnsan Kaynakları Pazarlamasoftmush.com Örnek 2: Birden Fazla Sütundaki Tekil Değerler Bu örnek, Calisanlar tablosundaki departman ve şehir kombinasyonlarının her birinin yalnızca bir kez görünmesini sağlar. Yani, hem departman hem de şehir aynı olduğunda bir satır yinelenen kabul edilir. SELECT DISTINCT Departman, Sehir FROM Calisanlar;softmush.com Sonuç: Departman | Sehir -------------------|-------- Muhasebe | İstanbul İnsan Kaynakları | Ankara Pazarlama | İzmir Muhasebe | Ankara İnsan Kaynakları | İstanbul Pazarlama | Ankarasoftmush.com Örnek 3: COUNT Fonksiyonu ile Birlikte Kullanım DISTINCT, genellikle COUNT() gibi bir toplama fonksiyonu içinde kullanılarak tekil değerlerin sayısını bulmak için de kullanılır. SELECT COUNT(DISTINCT Departman) AS ToplamTekilDepartman FROM Calisanlar;softmush.com Sonuç: ToplamTekilDepartman -------------------- 3softmush.com Önemli Notlar Tüm Sütunlara Uygulama: DISTINCT anahtar kelimesi, SELECT ifadesinde belirtilen tüm sütunlara uygulanır. Örneğin, SELECT DISTINCT SütunA, SütunB yazdığınızda, sonuç kümesinde hem SütunA hem de SütunB değerlerinin aynı olduğu satırlar tekilleştirilir. Sadece SütunA'nın tekil olması yeterli değildir. Performans Etkisi: Büyük veri kümelerinde DISTINCT kullanmak, veritabanının sonuçları sıralamasını ve karşılaştırmasını gerektirdiğinden sorgu performansını olumsuz etkileyebilir. Gereksiz kullanımdan kaçınılmalı veya indeksleme stratejileri ile desteklenmelidir. NULL Değerler: DISTINCT, NULL değerleri birbirine eşdeğer olarak kabul eder. Yani, bir sütunda birden fazla NULL değeri varsa, sonuç kümesinde yalnızca bir NULL değeri döner. ORDER BY ile Birlikte Kullanım: DISTINCT ile elde edilen sonuç kümesini sıralamak için ORDER BY ifadesi kullanılabilir. Ancak ORDER BY, DISTINCT işleminin kendisini etkilemez, yalnızca sonucun sunum sırasını belirler.
avatar
Emin
8
0
CSS Makaleleri
css-dilinde-yorum-comments-kullanimi
CSS Dilinde Yorum (Comments) Kullanımı
CSS (Cascading Style Sheets) kodlama pratiklerinde, kodun okunabilirliğini ve bakımını kolaylaştırmak amacıyla yorumlar (comments) kritik bir rol oynar. Yorumlar, geliştiricilerin kodun belirli bölümleri hakkında notlar almasına, açıklamalar eklemesine veya geçici olarak belirli CSS kurallarını devre dışı bırakmasına olanak tanır. Bu kılavuz, CSS yorumlarının temel sözdizimini, detaylı kullanımını ve pratik örneklerini sunarak, daha düzenli ve anlaşılır stil sayfaları oluşturmanıza yardımcı olmayı hedeflemektedir. Sözdizimi CSS dilinde yorumlar, /* karakter dizisi ile başlar ve */ karakter dizisi ile sona erer. Bu yapı, hem tek satırlık hem de çok satırlık yorumlar için kullanılır. /* Bu bir CSS yorumudur. */ /* Bu birden fazla satıra yayılmış bir CSS yorum bloğudur. */softmush.com Yukarıdaki örnekte görüldüğü gibi, yorumlar /* ile başlayıp */ ile biten bloklar halinde yazılır. Bu bloklar içine yazılan her şey, CSS derleyicisi ve tarayıcılar tarafından tamamen yok sayılır. Detaylı Açıklama CSS yorumlarının yapısı oldukça basittir ancak her bir bileşenin belirli bir anlamı vardır: /* (Yorum Başlangıcı): Bu karakter dizisi, bir yorum bloğunun başladığını belirtir. Tarayıcı, bu noktadan itibaren gelen tüm metni bir yorum olarak değerlendirmeye başlar. Yorum Metni: /* ve */ arasına yazılan tüm karakterler yorum metnini oluşturur. Bu metin, kod hakkında açıklamalar, notlar, uyarılar veya herhangi bir bilgi içerebilir. Geliştiricilerin kodu anlamasına ve sürdürmesine yardımcı olur. */ (Yorum Sonu): Bu karakter dizisi, bir yorum bloğunun sona erdiğini gösterir. Tarayıcı, bu noktadan sonra gelen metni tekrar CSS kodu olarak işlemeye başlar. Bu yapı sayesinde, CSS yorumları hem kısa, satır içi açıklamalar için hem de daha uzun, detaylı blok açıklamaları için esneklik sunar. Pratik Kullanım Örnekleri Aşağıdaki örnekler, CSS yorumlarının farklı senaryolarda nasıl kullanılabileceğini göstermektedir: 1. Basit Açıklama Ekleme Belirli bir CSS kuralının amacını veya işlevini açıklamak için yorumlar kullanılabilir. /* Ana başlık stili */ h1 { color: #333; /* Başlık rengi */ font-size: 2em; }softmush.com 2. Çok Satırlı Blok Yorumları Daha uzun açıklamalar veya bir kod bloğunun genel amacını belirtmek için çok satırlı yorumlar tercih edilebilir. /* -------------------------------------------------- Genel Sayfa Düzeni Stilleri Bu bölüm, sayfanın ana yapısı ve konteynerleri için temel stilleri içerir. -------------------------------------------------- */ body { font-family: Arial, sans-serif; line-height: 1.6; } .container { max-width: 960px; margin: 0 auto; padding: 20px; }softmush.com 3. Geçici Olarak Kod Devre Dışı Bırakma Hata ayıklama (debugging) sırasında veya belirli bir kuralı test etmek için, CSS kodunu yorum içine alarak geçici olarak devre dışı bırakabilirsiniz. .button { background-color: blue; color: white; /* border: 1px solid black; */ /* Geçici olarak devre dışı bırakıldı */ padding: 10px 15px; }softmush.com 4. CSS Bölümlerini Belirleme Büyük stil sayfalarında, farklı bölümleri belirlemek ve gezinmeyi kolaylaştırmak için yorumlar kullanılabilir. /* ===== NAVİGASYON BÖLÜMÜ ===== */ nav { /* ... */ } /* ===== İÇERİK BÖLÜMÜ ===== */ .content { /* ... */ } /* ===== ALT BİLGİ BÖLÜMÜ ===== */ footer { /* ... */ }softmush.com Önemli Notlar Tarayıcı Tarafından Yok Sayılma: CSS yorumları, tarayıcı tarafından okunmaz ve son kullanıcının web sayfasında görünmez. Yalnızca geliştiriciler içindir. Performans ve Üretim Ortamı: Üretim ortamına dağıtılacak CSS dosyaları genellikle "minify" (küçültme) işleminden geçirilir. Bu işlem sırasında, dosya boyutunu azaltmak ve yükleme süresini hızlandırmak amacıyla yorumlar genellikle kaldırılır. İç İçe Yorumlama: CSS'te iç içe yorum yapmak mümkün değildir. Yani, bir yorum bloğu içinde başka bir yorum bloğu başlatılamaz. İlk karşılaşılan */ karakteri, yorumu sonlandırır. Sass/SCSS Yorumları: Sass veya SCSS gibi CSS ön işlemcilerinde // ile başlayan tek satırlık yorumlar bulunsa da, bu yorumlar saf CSS'te geçerli değildir. // yorumları, derleme sırasında genellikle tamamen kaldırılırken, /* */ yorumları derlenmiş CSS çıktısında kalır (minify edilmediği sürece). `*` Kullanımı: Yorum karakterleri içinde * kullanmak sorun teşkil etmez, ancak */ karakter dizisinin yorumu sonlandıracağını unutmamak gerekir. Bu nedenle, yorum metninizde */ gibi bir dizilim kullanmaktan kaçınmalısınız.
avatar
Emin
10
0
Python Makaleleri
python-dilinde-temel-sozdizimi-syntax-kullanimi
Python Dilinde Temel Sözdizimi (Syntax) Kullanımı
Python, yüksek okunabilirliği ve basit sözdizimi sayesinde dünya genelinde en popüler programlama dillerinden biri haline gelmiştir. Yazılım geliştirmeden veri analizine, yapay zekadan web uygulamalarına kadar geniş bir yelpazede kullanılmaktadır. Python'ın bu kadar yaygın olmasının temel nedenlerinden biri, doğal dil benzeri yapısıyla öğrenmesinin ve uygulamasının kolay olmasıdır. Ancak, bir programlama dilini etkili bir şekilde kullanabilmek için onun temel sözdizimi kurallarını eksiksiz kavramak zorunludur. Bu makale, Python dilinde kullanılan temel sözdizimini (syntax) adım adım açıklayarak, sağlam bir programlama temeli oluşturmanıza yardımcı olmayı hedeflemektedir. Temel Sözdizimi Kuralları Python sözdizimi, kodun nasıl yazılması gerektiğini belirleyen kurallar bütünüdür. Bu kurallar, Python yorumlayıcısının yazdığınız kodu doğru bir şekilde anlamasını ve çalıştırmasını sağlar. Temel Python sözdizimi öğeleri şunlardır: Girintileme (Indentation): Python'ın en belirgin ve önemli sözdizimi özelliğidir. Diğer dillerde genellikle süslü parantezler veya anahtar kelimelerle belirtilen kod blokları, Python'da girintileme ile tanımlanır. Bir kod bloğunun (örneğin bir if ifadesi, bir for döngüsü veya bir fonksiyon tanımı) tüm satırları aynı seviyede girintili olmalıdır. Genellikle dört boşluk kullanılır. Yorum Satırları (Comments): Kodun okunabilirliğini artırmak ve işlevini açıklamak için kullanılır. Python, tek satırlık yorumlar için # karakterini, çok satırlık yorumlar (veya docstring'ler) için ise üçlü tırnak işaretlerini ("""...""" veya '''...''') kullanır. Yorumlar, yorumlayıcı tarafından göz ardı edilir. Değişkenler ve Atama: Değişkenler, veri depolamak için kullanılan adlandırılmış bellek konumlarıdır. Python'da değişken tanımlamak için belirli bir veri tipi belirtmeye gerek yoktur; tip atanan değere göre otomatik olarak belirlenir. Atama işlemi = operatörü ile yapılır. Operatörler: Değişkenler ve değerler üzerinde işlemler yapmak için kullanılır. Python'da aritmetik (+, -, *, /), karşılaştırma (==, !=, ), mantıksal (and, or, not) ve atama (=, +=, -=) gibi çeşitli operatörler bulunur. Anahtar Kelimeler (Keywords): Python dili tarafından özel anlamı olan ve değişken veya fonksiyon adı olarak kullanılamayan rezerv kelimelerdir (örn. if, else, for, while, def, class, import). Kolon (:) Kullanımı: Koşullu ifadeler (if), döngüler (for, while), fonksiyon tanımları (def) ve sınıf tanımları (class) gibi kod bloklarını başlatan satırların sonunda bir kolon (:) bulunur. Bu kolondan sonraki satırlar girintili olmalıdır. Detaylı Açıklama Her bir temel sözdizimi öğesini daha yakından inceleyelim: Girintileme: Python, kod bloklarını ayırmak için girintilemeyi kullanır. Bu, kodun okunabilirliğini artırsa da, yanlış girintileme IndentationError hatalarına yol açar. Bir if ifadesinin veya for döngüsünün kapsamındaki tüm satırlar aynı miktarda girintili olmalıdır. Yorum Satırları: # Bu tek satırlık bir yorumdur. print("Merhaba, Python!") # Bu da aynı satırdaki bir yorumdur. """ Bu, birden fazla satıra yayılan çok satırlı bir yorum örneğidir. Genellikle fonksiyonların veya sınıfların başında docstring olarak kullanılır. """ softmush.com Değişkenler ve Atama: Değişken adları harf veya alt çizgi ile başlamalıdır, sayılarla başlayamaz. Harf, sayı ve alt çizgi içerebilirler. Python büyük/küçük harfe duyarlıdır (sayi ve Sayi farklı değişkenlerdir). sayi = 10 # Integer (tam sayı) isim = "Alice" # String (metin) pi_degeri = 3.14 # Float (ondalıklı sayı) aktif_mi = True # Boolean (mantıksal değer) softmush.com Operatörler: Operatörler, değerler üzerinde çeşitli işlemler gerçekleştirmek için kullanılır. Aritmetik: + (toplama), - (çıkarma), * (çarpma), / (bölme), % (modülüs), ** (üs alma), // (tam sayı bölme). Karşılaştırma: == (eşit mi), != (eşit değil mi), (büyük mü), = (büyük veya eşit mi). Mantıksal: and (ve), or (veya), not (değil). Fonksiyon Tanımlama: Fonksiyonlar, belirli bir görevi yerine getiren kod bloklarıdır. def anahtar kelimesi ile tanımlanır ve bir veya daha fazla parametre alabilirler. Fonksiyon bloğu girintili olmalıdır. def selamlama(ad): print(f"Merhaba, {ad}!") softmush.com Kontrol Akışı: if, elif, else ifadeleri ile koşullu dallanma, for ve while döngüleri ile tekrarlı işlemler yapılır. Bu yapıların her biri kolon (:) ile biter ve sonraki kod blokları girintili olmalıdır. # if-elif-else örneği sayi = 15 if sayi > 0: print("Sayı pozitif.") elif sayi == 0: print("Sayı sıfır.") else: print("Sayı negatif.") # for döngüsü örneği for i in range(5): print(i) softmush.com Pratik Kullanım Örnekleri Aşağıdaki örnekler, yukarıda açıklanan sözdizimi kurallarının birleşimini göstermektedir. Örnek 1: Değişken Tanımlama ve Aritmetik İşlemler # İki sayı tanımlama sayi1 = 25 sayi2 = 7 # Aritmetik işlemler toplam = sayi1 + sayi2 fark = sayi1 - sayi2 carpim = sayi1 * sayi2 bolum = sayi1 / sayi2 # Float sonuç verir tam_bolum = sayi1 // sayi2 # Tam sayı sonuç verir modulus = sayi1 % sayi2 # Sonuçları yazdırma print(f"Sayı 1: {sayi1}") print(f"Sayı 2: {sayi2}") print(f"Toplam: {toplam}") print(f"Fark: {fark}") print(f"Çarpım: {carpim}") print(f"Bölüm: {bolum}") print(f"Tam Bölüm: {tam_bolum}") print(f"Modülüs: {modulus}") softmush.com Örnek 2: Koşullu İfadeler (if-elif-else) ve Karşılaştırma Operatörleri # Kullanıcıdan bir sayı girişi alma girilen_sayi = int(input("Bir sayı giriniz: ")) # Sayının pozitif, negatif veya sıfır olduğunu kontrol etme if girilen_sayi > 0: print("Girilen sayı pozitiftir.") elif girilen_sayi < 0: print("Girilen sayı negatiftir.") else: print("Girilen sayı sıfırdır.") softmush.com Örnek 3: Döngü Kullanımı (for) ve Liste İşlemleri # Bir meyve listesi tanımlama meyveler = ["elma", "muz", "çilek", "kiraz"] # Liste üzerinde döngü yapma ve her meyveyi yazdırma print("Meyveler:") for meyve in meyveler: print(meyve) # Liste uzunluğunu kontrol etme print(f"Listedeki meyve sayısı: {len(meyveler)}") softmush.com Örnek 4: Fonksiyon Tanımlama ve Kullanımı # İki sayının toplamını döndüren bir fonksiyon tanımlama def sayilari_topla(a, b): """ Bu fonksiyon, iki tam sayıyı alır ve toplamlarını döndürür. """ toplam = a + b return toplam # Fonksiyonu çağırma ve sonucu bir değişkene atama sonuc = sayilari_topla(10, 20) print(f"10 ve 20'nin toplamı: {sonuc}") # Başka değerlerle fonksiyonu çağırma sonuc2 = sayilari_topla(5, 8) print(f"5 ve 8'in toplamı: {sonuc2}") softmush.com Önemli Notlar ve İpuçları Girinti Tutarlılığı: Python'da girintiler çok önemlidir. Ya sadece boşluk (genellikle 4 boşluk) ya da sadece tab kullanın, ancak ikisini karıştırmaktan kaçının. Çoğu Python geliştirme ortamı (IDE) boşluk kullanımını otomatik olarak ayarlar. Büyük/Küçük Harf Duyarlılığı: Python, değişken adları, fonksiyon adları ve anahtar kelimeler konusunda büyük/küçük harfe duyarlıdır. Örneğin, Degisken ve degisken iki farklı değişkendir. Anlamlı Adlandırma: Değişkenlerinize, fonksiyonlarınıza ve sınıflarınıza amaçlarını açıkça belirten anlamlı adlar verin. Bu, kodunuzu daha okunabilir ve sürdürülebilir hale getirir. Yorumları Etkin Kullanın: Özellikle karmaşık mantık içeren bölümlerde kodunuzu açıklamak için yorumları kullanmaktan çekinmeyin. Bu, hem sizin hem de diğer geliştiricilerin kodu daha kolay anlamasına yardımcı olur. PEP 8 Kuralları: Python topluluğu tarafından kabul edilen resmi stil rehberi olan PEP 8'i takip etmeye çalışın. Bu, kodunuzun tutarlı, okunabilir ve standartlara uygun olmasını sağlar. PEP 8, değişken adlandırma kurallarından (örn. snake_case), satır uzunluklarına ve boşluk kullanımına kadar birçok kuralı içerir. Hata Mesajlarını Okuyun: Bir hata (özellikle SyntaxError veya IndentationError) aldığınızda, Python yorumlayıcısının verdiği hata mesajını dikkatlice okuyun. Bu mesajlar genellikle hatanın türü ve nerede oluştuğu hakkında değerli bilgiler içerir.
avatar
Emin
12
0
Kazanç Makaleleri
internetten-anket-doldurarak-para-kazanma-yollari-2025-ek-gelir-elde-etmenin-en-kolay-yolu-mu
İnternetten Anket Doldurarak Para Kazanma Yolları 2025: Ek Gelir Elde Etmenin En Kolay Yolu Mu?
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 Nedir ve Neden Para Öderler?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.Ne Kadar Kazanabilirsiniz? Gerçekçi Beklentiler Nelerdir?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.2025 Yılında Güvenilir ve Popüler Anket SiteleriPiyasada 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:Swagbucks: Sadece anket doldurarak değil, video izleyerek, oyun oynayarak, online alışveriş yaparak da puan kazanabileceğiniz çok yönlü bir platformdur. Kazandığınız puanları nakit (PayPal) veya hediye kartlarına çevirebilirsiniz. Minimum ödeme eşiği oldukça düşüktür.Toluna Influencers: Küresel çapta tanınan bir pazar araştırma şirketidir. Çeşitli konularda anketler sunar ve ödemeleri PayPal veya hediye kartları aracılığıyla yapar. Sık sık anket gönderir ve kullanıcı dostu bir arayüze sahiptir.Survey Junkie: Basit ve anlaşılır arayüzü sayesinde özellikle yeni başlayanlar için idealdir. Sadece anket odaklıdır ve puanlarınızı PayPal veya e-hediye kartlarına dönüştürme seçeneği sunar. Anket başına ortalama kazançları tatmin edicidir.LifePoints: Eski GlobalTestMarket ve MySurvey sitelerinin birleşmesiyle oluşmuştur. Geniş bir anket yelpazesi sunar ve puanlarınızı PayPal, hediye kartları veya bağış yoluyla kullanmanıza olanak tanır. Düzenli olarak anket davetleri gönderir.MyPoints: Swagbucks gibi, sadece anketlerle sınırlı kalmayan bir platformdur. Online alışveriş, video izleme, e-posta okuma gibi farklı yollarla da puan kazanabilirsiniz. Ödemeleri hediye kartları veya PayPal üzerinden yapar.PrizeRebel: Anket doldurmanın yanı sıra, küçük görevler yaparak, video izleyerek ve arkadaşlarını davet ederek puan kazanabileceğiniz popüler bir sitedir. Ödemeler hızlıdır ve PayPal, hediye kartları gibi seçenekler sunar.InboxDollars (veya Avrupa'da InboxPounds): Anketlerin yanı sıra, e-posta okuma, oyun oynama ve teklifleri tamamlama gibi görevlerle para kazandıran bir platformdur. Ödemeler nakit olarak yapılır ve minimum ödeme eşiği biraz daha yüksek olabilir.YouGov: Özellikle kamuoyu ve sosyal konular üzerine anketler sunan saygın bir platformdur. Anketleri genellikle daha bilgilendirici ve düşündürücüdür. Ödemeleri nakit (banka transferi veya PayPal) veya hediye kartları şeklinde yapar.Anket Doldurarak Kazancınızı En Üst Düzeye Çıkarma İpuçlarıSadece kaydolmak yeterli değil. İşte kazancınızı artırmak için uygulayabileceğiniz bazı stratejiler:Profilinizi Eksiksiz Doldurun: Kaydolduğunuzda profil anketlerini detaylı ve doğru bir şekilde doldurun. Bu, size uygun anketlerin gelme olasılığını artırır ve anketlerden elenme riskinizi azaltır. Demografik bilgileriniz, ilgi alanlarınız, alışveriş alışkanlıklarınız gibi bilgiler, doğru hedef kitleye ulaşmak isteyen şirketler için çok önemlidir.Birden Fazla Platforma Kaydolun: Tek bir siteye bağlı kalmak yerine, yukarıda belirtilen gibi birkaç güvenilir platforma birden kaydolun. Bu, size daha fazla anket daveti gelmesini sağlar ve kazanç potansiyelinizi artırır.E-postalarınızı Düzenli Kontrol Edin: Anket siteleri genellikle yeni anket davetlerini e-posta yoluyla gönderir. Fırsatları kaçırmamak için e-postalarınızı sık sık kontrol edin ve spam klasörünü de gözden geçirin. Anketler genellikle kota dolana kadar açık kalır, bu yüzden hızlı olmak önemlidir.Dürüst ve Tutarlı Olun: Anket sorularına her zaman dürüst ve tutarlı cevaplar verin. Pazar araştırma şirketleri, tutarsız cevapları kolayca tespit edebilir ve bu durum hesabınızın askıya alınmasına yol açabilir. Aceleci veya düşüncesiz cevaplardan kaçının.Minimum Ödeme Eşiğine Dikkat Edin: Her platformun bir minimum ödeme eşiği vardır (örn. 10$ veya 25$). Paranızı çekebilmek için bu eşiğe ulaşmanız gerekir. Bu eşiği düşük olan platformları tercih etmek, kazancınıza daha hızlı ulaşmanızı sağlar.Zaman Yönetimi Yapın: Anket doldurmayı günlük rutininize entegre edin. Sabah kahvenizi içerken, öğle molasında veya akşam televizyon izlerken birkaç anket doldurmak, zamanınızı verimli kullanmanıza yardımcı olur. Boş zamanlarınızı değerlendirmenin harika bir yoludur.Dolandırıcılık ve Sahte Sitelerden Sakının: Ne yazık ki, bu alanda da dolandırıcılar mevcut. Kaydolmadan önce her zaman sitenin güvenilirliğini araştırın. Şunlara dikkat edin: Asla sizden para talep eden bir siteye güvenmeyin. Aşırı yüksek kazanç vaat eden sitelerden uzak durun. Bilgilerinizi paylaşmadan önce sitenin SSL sertifikası (adres çubuğunda kilit simgesi) olup olmadığını kontrol edin.Anket Doldurarak Para Kazanmanın Artıları ve EksileriHer ek gelir yönteminde olduğu gibi, anket doldurmanın da kendine göre avantajları ve dezavantajları vardır:Artıları:Esneklik: İstediğiniz zaman, istediğiniz yerden çalışabilirsiniz. Sabit bir mesai saatiniz yoktur.Ek Gelir: Düzenli bir ek gelir elde etmenizi sağlar.Kolaylık: Özel bir yetenek veya deneyim gerektirmez, herkes yapabilir.Çeşitlilik: Farklı konular hakkında bilgi edinirken, yeni ürünler ve hizmetler hakkında fikir sahibi olursunuz.Etki Etme: Fikirlerinizle şirketlerin ürün ve hizmetlerini şekillendirmeye yardımcı olursunuz.Eksileri:Düşük Kazanç Potansiyeli: Tam zamanlı bir işin yerini tutmaz, sadece ek gelir için uygundur.Elenme Riski: Bazen anketin ortasında demografik veya ilgi alanı kriterlerine uymadığınız için elenebilirsiniz.Monotonluk: Uzun süre anket doldurmak bazıları için sıkıcı olabilir.Güvenilirlik Sorunları: Güvenilir olmayan sitelerle karşılaşma riski vardır.Peki, Anket Doldurarak Para Kazanmak Gerçekten Değer Mi?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!
avatar
Emin
9
0
SQL Makaleleri
sql-dilinde-temel-sozdizimi-kullanimi-kilavuzu
SQL Dilinde Temel Sözdizimi Kullanımı Kılavuzu
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. Temel SQL Sözdizimi 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];softmush.com 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. Sözdizimi Bileşenlerinin Detaylı Açıklaması 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. Pratik Kullanım Örnekleri 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;softmush.com Ö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;softmush.com Ö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;softmush.com Ö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;softmush.com Ö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;softmush.com Ö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;softmush.com Önemli Notlar ve İpuçları 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.
avatar
Emin
16
0
JavaScript Makaleleri
javascript-dilinde-degisken-variable-kullanimi
JavaScript Dilinde Değişken (Variable) Kullanımı
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. Değişken Nedir? 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. Temel Değişken Tanımlama Yöntemleri 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. Sözdizimi JavaScript'te bir değişken bildirmenin genel sözdizimi aşağıdaki gibidir: anahtar_kelime değişken_adı = değer;softmush.com 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 Kelimesi var 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ünyasoftmush.com let Anahtar Kelimesi let 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";softmush.com const Anahtar Kelimesi const 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();softmush.com Pratik Kullanım Örnekleri 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)softmush.com Önemli Notlar 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.
avatar
Emin
12
0
CSS Makaleleri
css-dilinde-css-secicilerin-kullanimi
CSS Dilinde CSS Seçicilerin Kullanımı
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. Temel Sözdizimi 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; }softmush.com 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. Detaylı Açıklama CSS seçicileri, elementleri farklı kriterlere göre hedeflemek için çeşitli türlerde mevcuttur: 1. Tip (Element) Seçiciler Belirli bir HTML element tipini seçer. Örneğin, tüm elementlerini hedeflemek için kullanılır. p { color: blue; }softmush.com 2. Kimlik (ID) Seçiciler 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; }softmush.com 3. Sınıf (Class) Seçiciler Birden fazla elemente uygulanabilen bir sınıfı hedefler. Seçici . karakteri ile başlar. .vurgulu-metin { font-weight: bold; }softmush.com 4. Evrensel (Universal) Seçici Sayfadaki tüm HTML elementlerini seçer. * karakteri ile temsil edilir. * { margin: 0; padding: 0; }softmush.com 5. Nitelik (Attribute) Seçiciler 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; }softmush.com 6. Pseudo-class Seçiciler 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; }softmush.com 7. Pseudo-element Seçiciler 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; }softmush.com 8. Kombinatörler (Combinators) İ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; }softmush.com Pratik Kullanım Örnekleri Aşağıdaki örnekler, farklı seçici türlerinin nasıl kullanıldığını göstermektedir: Örnek 1: Temel Seçicilerin Kullanımı HTML: Makale Başlığı Bu, makalenin giriş paragrafıdır. Bu ise normal bir paragraftır. Bu da bir span etiketi.softmush.com CSS: #ana-baslik { color: #333; text-align: center; } .giris-paragrafi { font-style: italic; color: #555; } p { line-height: 1.6; }softmush.com Örnek 2: Kombinatörler ve Pseudo-class HTML: Bu, container içindeki ilk paragraf. Öğe 1 Öğe 2 Öğe 3 Bu, container içindeki ikinci paragraf. Bu, container dışındaki bir paragraf.softmush.com 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; }softmush.com Önemli Notlar Ö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.
avatar
Emin
12
0
Python Makaleleri
pythona-giris-temel-kullanim-prensipleri
Python'a Giriş: Temel Kullanım Prensipleri
Python, sade ve okunabilir sözdizimi sayesinde programlamaya yeni başlayanlar için ideal bir dildir. Bu kılavuz, Python'ın temel yapı taşlarını ve ilk adımlarını anlamanıza yardımcı olacak, böylece dilin mantığını kavrayarak kendi programlarınızı yazmaya başlayabileceksiniz. Odak noktamız, Python ortamında temel komutların ve veri yapılarının nasıl kullanılacağıdır. Temel Sözdizimi Python'da temel işlemler genellikle fonksiyon çağrıları, değişken tanımlamaları ve operatör kullanımları etrafında döner. En yaygın başlangıç noktalarından biri, ekrana bilgi yazdırmak için kullanılan print() fonksiyonudur. Değişkenler, verileri depolamak için kullanılır ve bir değer atama operatörü (=) ile tanımlanır. Detaylı Açıklama print() Fonksiyonu: Bu fonksiyon, parantez içindeki argümanları standart çıktıya (genellikle konsola) yazdırır. Yazdırılacak metin genellikle çift tırnak (") veya tek tırnak (') içine alınır. Değişken Tanımlama: Bir değişkene değer atamak için değişken_adı = değer yapısı kullanılır. Python, değişkenin türünü otomatik olarak algılar (örneğin, tam sayı, ondalık sayı, metin). Değişken adları harf veya alt çizgi (_) ile başlamalı, sayı ile başlayamaz ve büyük/küçük harfe duyarlıdır. Operatörler: Aritmetik işlemler (+, -, *, /) gibi temel operatörler, sayılar ve değişkenler üzerinde matematiksel işlemler yapmak için kullanılır. Pratik Kullanım Örnekleri Bu bölüm, yukarıda açıklanan temel sözdizimi öğelerinin pratik uygulamalarını göstermektedir. Örnek 1: İlk Python Programı - Merhaba Dünya Bu örnek, print() fonksiyonunun basit bir dizeyi konsola yazdırmak için nasıl kullanıldığını gösterir. print("Merhaba, Dünya!")softmush.com Örnek 2: Değişken Tanımlama ve Kullanımı Bu örnek, bir değişkene değer atanmasını ve bu değişkenin print() fonksiyonu ile nasıl görüntülendiğini gösterir. Ayrıca, farklı türdeki değişkenlerin nasıl tanımlandığını da içerir. mesaj = "Python öğrenmek harika!" sayi = 100 pi_degeri = 3.14 print(mesaj) print("Sayı:", sayi) print("Pi değeri:", pi_degeri) softmush.com Örnek 3: Temel Aritmetik İşlemler Bu örnek, Python'da temel aritmetik operatörlerin nasıl kullanılacağını ve sonuçların nasıl yazdırılacağını gösterir. a = 15 b = 5 toplam = a + b fark = a - b carpim = a * b bolum = a / b print("Toplam:", toplam) print("Fark:", fark) print("Çarpım:", carpim) print("Bölüm:", bolum) softmush.com Örnek 4: Kullanıcıdan Giriş Alma input() fonksiyonu, kullanıcıdan veri almak için kullanılır. Bu örnek, kullanıcıdan adını alıp hoş geldiniz mesajı oluşturur. ad = input("Adınız nedir? ") print("Merhaba,", ad + "!") softmush.com Önemli Notlar Büyük/Küçük Harf Duyarlılığı: Python büyük/küçük harfe duyarlıdır. Yani, Degisken ve degisken farklı iki değişkendir. Yorumlar: Kodunuzu açıklamak için # karakteri ile başlayan yorumlar kullanın. Python bu satırları yok sayar. # Bu bir yorum satırıdır. print("Merhaba") # Bu da satır içi bir yorumdur. softmush.com Hata Mesajları: Python, kodunuzda bir hata olduğunda size hata mesajları (traceback) gösterir. Bu mesajları dikkatlice okuyarak sorunun nerede olduğunu anlamaya çalışın. Girintileme: Python, kod bloklarını (örneğin fonksiyonlar, döngüler, koşullu ifadeler) tanımlamak için girintileme (boşluk veya tab) kullanır. Yanlış girintileme IndentationError hatasına yol açar.
avatar
Emin
20
2
SQL Makaleleri
sql-dilinde-temel-komutlara-giris
SQL Dilinde Temel Komutlara Giriş
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. Temel Sözdizimi 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; softmush.com Detaylı Açıklama 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. Pratik Kullanım Örnekleri 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) ); softmush.com Ö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); softmush.com Ö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; softmush.com Ö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; softmush.com Ö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'; softmush.com Önemli Notlar 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.
avatar
Emin
9
0
JavaScript Makaleleri
javascript-dilinde-temel-sozdizimi-syntax-kullanimi
JavaScript Dilinde Temel Sözdizimi (Syntax) Kullanımı
JavaScript, web geliştirmenin temel taşlarından biridir ve bu dilin gücünü tam olarak kullanabilmek için temel sözdizimi kurallarını anlamak elzemdir. Sözdizimi (syntax), bir programlama dilinde kodun nasıl yazılması gerektiğini belirleyen kurallar bütünüdür. Doğru sözdizimi kullanımı, JavaScript motorunun yazdığınız talimatları doğru bir şekilde yorumlayıp çalıştırmasını sağlar. Bu kılavuz, JavaScript dilinde temel sözdizimi kullanımını adım adım ve teknik detaylarla açıklayacaktır. Temel Sözdizimi JavaScript sözdizimi, programlama ifadelerinin (statements) ve bu ifadeleri oluşturan anahtar kelimelerin, operatörlerin, değişkenlerin ve fonksiyonların belirli bir düzende kullanılmasını gerektirir. Her bir ifade, JavaScript motoruna belirli bir görevi yerine getirmesi için verilen bir talimattır. Genellikle, JavaScript ifadeleri noktalı virgül (;) ile sonlandırılır. Bu, birden fazla ifadenin aynı satırda yazılmasına olanak tanır ve kodun okunabilirliğini artırır. Aşağıdaki örnek, temel bir JavaScript ifadesini göstermektedir: let mesaj = "Merhaba, Dünya!"; console.log(mesaj); softmush.com Detaylı Açıklama İfadeler (Statements): JavaScript kodunun en küçük bağımsız birimidir. Bir değer atama, bir fonksiyon çağırma veya bir koşul kontrol etme gibi belirli bir eylemi gerçekleştirirler. Her ifade genellikle bir noktalı virgül (;) ile biter, ancak bazı durumlarda bu isteğe bağlıdır (JavaScript'in Otomatik Noktalı Virgül Ekleme - ASI mekanizması sayesinde). Değişkenler (Variables): Veri değerlerini depolamak için kullanılan adlandırılmış kapsayıcılardır. JavaScript'te değişkenler let, const veya eskiden kullanılan var anahtar kelimeleriyle bildirilir: let: Tekrar atanabilir, blok kapsamlı bir değişken bildirir. const: Sabit bir değer atanan, blok kapsamlı bir değişken bildirir. Bildirildikten sonra değeri değiştirilemez. var: Fonksiyon kapsamlı veya global kapsamlı, tekrar atanabilir bir değişken bildirir. Modern JavaScript'te let ve const tercih edilir. Veri Türleri (Data Types): JavaScript, farklı türde değerleri işleyebilir. Temel veri türleri şunlardır: Number (sayılar), String (metinler), Boolean (doğru/yanlış), Null (bilinçli boş değer), Undefined (atanmamış değer), Symbol ve BigInt. Ayrıca, Object (nesneler, diziler, fonksiyonlar) gibi karmaşık veri yapıları da bulunur. Operatörler (Operators): Değişkenler ve değerler üzerinde işlemler gerçekleştirmek için kullanılırlar. En yaygın operatör türleri şunlardır: Aritmetik Operatörler: Toplama (+), çıkarma (-), çarpma (*), bölme (/), modül (%). Atama Operatörleri: Değer atama (=), toplama ve atama (+=), çıkarma ve atama (-=). Karşılaştırma Operatörleri: Eşit mi (==), kesinlikle eşit mi (===), eşit değil mi (!=), kesinlikle eşit değil mi (!==), küçük mü (), küçük eşit mi (=). Mantıksal Operatörler: VE (&&), VEYA (||), DEĞİL (!). Fonksiyonlar (Functions): Belirli bir görevi yerine getiren, yeniden kullanılabilir kod bloklarıdır. Fonksiyonlar function anahtar kelimesiyle tanımlanır ve isteğe bağlı olarak parametreler alabilirler. Yorumlar (Comments): Kodun okunabilirliğini artırmak için kullanılan, JavaScript motoru tarafından yoksayılan metinlerdir. Tek satırlık yorumlar için //, çok satırlık yorumlar için /* ... */ kullanılır. Büyük/Küçük Harf Duyarlılığı (Case Sensitivity): JavaScript büyük/küçük harfe duyarlı bir dildir. Bu, myVariable ile myvariable'ın iki farklı değişken olarak kabul edildiği anlamına gelir. Bloklar (Blocks): Süslü parantezler ({}) ile tanımlanan kod blokları, bir veya daha fazla ifadeyi gruplamak için kullanılır. Fonksiyon tanımları, if/else koşullu ifadeler ve döngüler gibi yapılarda yaygın olarak kullanılırlar. Pratik Kullanım Örnekleri Aşağıdaki örnekler, yukarıda açıklanan temel sözdizimi kurallarının pratikte nasıl kullanıldığını göstermektedir. Örnek 1: Değişken Bildirimi ve Ataması // let ile tekrar atanabilir bir değişken bildirimi let kullaniciAdi = "Ali"; console.log(kullaniciAdi); // Çıktı: Ali kullaniciAdi = "Veli"; // Değerini değiştirebiliriz console.log(kullaniciAdi); // Çıktı: Veli // const ile sabit bir değişken bildirimi const PI = 3.14159; console.log(PI); // Çıktı: 3.14159 // PI = 3.14; // Hata verir: Assignment to constant variable. softmush.com Örnek 2: Aritmetik Operatör Kullanımı let sayi1 = 10; let sayi2 = 5; let toplam = sayi1 + sayi2; // Toplama let fark = sayi1 - sayi2; // Çıkarma let carpim = sayi1 * sayi2; // Çarpma let bolum = sayi1 / sayi2; // Bölme let kalan = sayi1 % sayi2; // Modül console.log("Toplam:", toplam); // Çıktı: Toplam: 15 console.log("Fark:", fark); // Çıktı: Fark: 5 console.log("Çarpım:", carpim); // Çıktı: Çarpım: 50 console.log("Bölüm:", bolum); // Çıktı: Bölüm: 2 console.log("Kalan:", kalan); // Çıktı: Kalan: 0 softmush.com Örnek 3: Koşullu İfade (if-else) ve Blok Kullanımı let yas = 20; if (yas >= 18) { console.log("Ehliyet alabilir."); } else { console.log("Ehliyet almak için yaşınız uygun değil."); } // Çıktı: Ehliyet alabilir. softmush.com Örnek 4: Fonksiyon Tanımlama ve Çağırma /* Bu fonksiyon, verilen iki sayıyı toplayarak sonucu döndürür. */ function topla(a, b) { return a + b; } let sonuc = topla(7, 3); console.log("Fonksiyon sonucu:", sonuc); // Çıktı: Fonksiyon sonucu: 10 softmush.com Önemli Notlar Noktalı Virgül Kullanımı: JavaScript, bazı durumlarda noktalı virgülleri otomatik olarak eklese de (Automatic Semicolon Insertion - ASI), kod tutarlılığı ve olası hataları önlemek adına her ifadenin sonuna manuel olarak noktalı virgül eklemek iyi bir pratik olarak kabul edilir. var, let ve const Arasındaki Farklar: Modern JavaScript projelerinde genellikle let ve const anahtar kelimeleri tercih edilir. var, hoisting (yukarı taşınma) ve fonksiyon kapsamlı olması nedeniyle beklenmedik davranışlara yol açabilir. let ve const blok kapsamlıdır ve bu, daha öngörülebilir bir kod akışı sağlar. Kod Okunabilirliği: Tutarlı girinti (indentation) ve boşluk kullanımı, kodunuzun başkaları (ve gelecekteki siz) tarafından daha kolay okunmasını ve anlaşılmasını sağlar. Popüler kod biçimlendiriciler (örneğin Prettier) bu konuda yardımcı olabilir. Büyük/Küçük Harf Duyarlılığına Dikkat: JavaScript'te anahtar kelimeler, değişken adları, fonksiyon adları ve diğer tanımlayıcılar büyük/küçük harfe duyarlıdır. Örneğin, Console.log yerine console.log yazmanız gerekir. Hata Ayıklama (Debugging): Sözdizimi hataları (syntax errors), kodunuzun çalışmasını engelleyen en yaygın sorunlardandır. Tarayıcıların geliştirici araçlarını veya Node.js ortamındaki hata mesajlarını dikkatlice inceleyerek bu hataları tespit edebilir ve düzeltebilirsiniz.
avatar
Emin
15
1
HTML Makaleleri
html-gelistirmede-html-editorlerinin-etkin-kullanimi
HTML Geliştirmede HTML Editörlerinin Etkin Kullanımı
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 Kod Yapısı ve Editör Desteği 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 softmush.com Detaylı Açıklama: Editör Özellikleri 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 etiketini otomatik olarak ekleyebilir. 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. Pratik Kullanım Örnekleri 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. softmush.com 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 $}softmush.com Editörde genişletildiğinde, aşağıdaki HTML çıktısını verecektir: Öğe 1 Öğe 2 Öğe 3 softmush.com 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. softmush.com Önemli Notlar ve İpuçları 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.
avatar
Emin
12
0
PHP Makaleleri
php-dilinde-ifadeler-kullanimi
PHP Dilinde İfadeler Kullanımı
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. Sözdizimi İ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. softmush.com Detaylı Açıklama 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. Pratik Kullanım Örnekleri Aşağıdaki örnekler, PHP dilinde ifadelerin çeşitli senaryolarda nasıl kullanıldığını göstermektedir. Örnek 1: Basit Aritmetik İfade softmush.com Örnek 2: Mantıksal İfadeler ve Koşullu Durum softmush.com Örnek 3: Fonksiyon Çağrısı ve String İfadeler
avatar
Emin
14
0
Bilim Makaleleri
tarihe-gecen-ilk-yuz-televizyona-cikan-ilk-insan-kimdi
Tarihe Geçen İlk Yüz: Televizyona Çıkan İlk İnsan Kimdi?
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. Bir Mucidin Hayali: John Logie Baird 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. Stooky Bill ve İlk Adımlar 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ı. Tarihi An: William Taynton 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ı. Teknolojinin Kalbi: Mekanik Televizyon 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ı. Sıradan Bir Yüz, Olağanüstü Bir Devrim 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ı. İlk Yayınların Zorlukları ve Gelişimi 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ı. Televizyonun Küresel Yükselişi 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. Mirası ve Geleceğe Etkisi 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.
avatar
Emin
26
0
Python Makaleleri
python-dilinde-degiskenlerin-kullanimi
Python Dilinde Değişkenlerin Kullanımı
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. Sözdizimi 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ğersoftmush.com Burada 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 = 10softmush.com Detaylı Açıklama Yukarı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. Örnekler Aşağıdaki örnekler, Python'da değişkenlerin çeşitli kullanım senaryolarını göstermektedir. Örnek 1: Sayısal Değer Atama 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}")softmush.com Örnek 2: Metin (String) Değer Atama 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}")softmush.com Örnek 3: Farklı Veri Tipleriyle Çalışma 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}")softmush.com Örnek 4: Değişken Değerini Güncelleme 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}")softmush.com Örnek 5: Çoklu Değişken Atama 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}")softmush.com Önemli Notlar İ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.
avatar
Emin
13
0
SQL Makaleleri
sql-dilinde-select-kullanimi-detayli-rehber
SQL Dilinde SELECT Kullanımı: Detaylı Rehber
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. Temel Sözdizimi 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ı];softmush.com Yukarıdaki sözdiziminde köşeli parantez [] içine alınmış maddeler isteğe bağlıdır. Detaylı Açıklama 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 (=, , >, =, 30;softmush.com Örnek 4: Benzersiz Değerleri Seçme (DISTINCT Kullanımı) Müşteriler tablosunda bulunan benzersiz şehirleri listeler. SELECT DISTINCT Şehir FROM Müşteriler;softmush.com Ö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;softmush.com Ö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;softmush.com Ö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;softmush.com Ö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;softmush.com İpuçları ve Önemli Notlar 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.
avatar
Emin
11
0
JavaScript Makaleleri
javascript-dilinde-kosullu-ifadeler-if-ve-else-yapilari
JavaScript Dilinde Koşullu İfadeler: `if` ve `else` Yapıları
JavaScript programlamada, belirli koşullara bağlı olarak kod bloklarının yürütülmesini sağlamak temel bir gerekliliktir. Bu kontrol mekanizması, `if`, `else if` ve `else` gibi koşullu ifadeler aracılığıyla gerçekleştirilir. Bu yapılar, uygulamanızın farklı senaryolara dinamik olarak tepki vermesini ve mantıksal akışı yönetmesini sağlar. Temel Sözdizimi JavaScript'teki koşullu ifadelerin temel sözdizimi aşağıdaki gibidir: // Temel if ifadesi if (koşul) { // Koşul doğru (true) ise çalışacak kod bloğu } // if...else ifadesi if (koşul) { // Koşul doğru ise çalışacak kod bloğu } else { // Koşul yanlış (false) ise çalışacak kod bloğu } // if...else if...else ifadesi if (koşul1) { // Koşul1 doğru ise çalışacak kod bloğu } else if (koşul2) { // Koşul1 yanlış VE Koşul2 doğru ise çalışacak kod bloğu } else { // Koşul1 ve Koşul2 yanlış ise çalışacak kod bloğu }softmush.com Detaylı Açıklama Koşullu ifadeler, programın belirli bir noktada hangi kod yolunu izleyeceğine karar vermesini sağlar. Her bir bileşenin işlevi şöyledir: • if: Belirtilen koşulun doğru (true) olup olmadığını kontrol eden anahtar kelimedir. Eğer koşul doğru ise, if bloğu içindeki kod yürütülür. • else: Bir if ifadesindeki koşulun yanlış (false) olması durumunda çalışacak alternatif kod bloğunu tanımlar. Yalnızca bir if veya else if bloğu çalışmadığında devreye girer. • else if: Birden fazla koşulu ardışık olarak kontrol etmek için kullanılır. İlk if koşulunun yanlış olması durumunda yeni bir koşulu değerlendirir. İstenildiği kadar else if bloğu eklenebilir. • Koşul (Condition): Herhangi bir değeri true veya false olarak değerlendirilebilen bir ifadedir. Karşılaştırma operatörleri (, ==, === vb.) veya mantıksal operatörler (&&, ||, !) ile oluşturulur. JavaScript'te bazı değerler "truthy" (doğru kabul edilen) veya "falsy" (yanlış kabul edilen) olarak değerlendirilir. Örneğin, 0, null, undefined, NaN, boş dize ("") ve false "falsy" değerlerdir. • Kod Bloğu: Süslü parantezler ({}) arasına yazılan ve koşul doğru olduğunda yürütülen bir veya daha fazla ifadeyi içeren bölümdür. Pratik Kullanım Örnekleri Aşağıdaki örnekler, if koşullu ifadelerinin farklı senaryolarda nasıl kullanıldığını göstermektedir. Örnek 1: Basit if ifadesi let puan = 85; if (puan > 70) { console.log("Tebrikler, sınavı geçtiniz!"); } // Çıktı: "Tebrikler, sınavı geçtiniz!"softmush.com Bu örnekte, puan değişkeninin değeri 70'ten büyük olduğu için if bloğu içindeki mesaj konsola yazdırılır. Örnek 2: if...else ifadesi let yaş = 16; if (yaş >= 18) { console.log("Ehliyet başvurusunda bulunabilirsiniz."); } else { console.log("Ehliyet başvurusu için yaşınız henüz uygun değil."); } // Çıktı: "Ehliyet başvurusu için yaşınız henüz uygun değil."softmush.com Burada, yaş 18'den küçük olduğu için if koşulu yanlış olur ve program else bloğuna geçer. Örnek 3: if...else if...else ifadesi let sıcaklık = 25; let havaDurumu; if (sıcaklık < 0) { havaDurumu = "Çok soğuk!"; } else if (sıcaklık < 15) { havaDurumu = "Soğuk."; } else if (sıcaklık < 25) { havaDurumu = "Ilık."; } else { havaDurumu = "Sıcak!"; } console.log("Hava durumu: " + havaDurumu); // Çıktı: "Hava durumu: Sıcak!"softmush.com Bu örnek, farklı sıcaklık aralıkları için farklı hava durumu mesajları belirler. sıcaklık 25 olduğu için ilk üç koşul yanlış olur ve program else bloğuna girer. Örnek 4: Mantıksal operatörlerle koşullar let kullanıcıGirişi = "admin"; let parolaGirişi = "12345"; if (kullanıcıGirişi === "admin" && parolaGirişi === "admin123") { console.log("Yönetici girişi başarılı."); } else if (kullanıcıGirişi === "admin" && parolaGirişi !== "admin123") { console.log("Yönetici parolası yanlış."); } else { console.log("Geçersiz kullanıcı adı veya parola."); } // Çıktı: "Yönetici parolası yanlış."softmush.com Bu örnekte, mantıksal AND operatörü (&&) kullanılarak iki koşulun da doğru olması beklenir. İlk if koşulu yanlış olduğu için (parola farklı), ikinci else if koşulu kontrol edilir ve doğru olduğu için ilgili mesaj yazdırılır. İpuçları/Önemli Notlar Sıkı Eşitlik (===) Kullanımı: JavaScript'te karşılaştırma yaparken her zaman değer ve tip kontrolü yapan sıkı eşitlik operatörü === kullanılması önerilir. Gevşek eşitlik operatörü ==, tip dönüşümleri yaparak beklenmedik sonuçlara yol açabilir. Tek Satırlık İfadeler: Eğer if veya else bloğunuz sadece tek bir ifade içeriyorsa, süslü parantezleri ({}) atlayabilirsiniz. Ancak, kod okunabilirliğini artırmak ve gelecekteki değişikliklerde hataları önlemek için her zaman süslü parantez kullanmak iyi bir pratiktir. "Truthy" ve "Falsy" Değerler: Koşul ifadelerinde, boolean olmayan değerler de true veya false olarak değerlendirilebilir. Örneğin, boş olmayan dizeler, sayılar (sıfır hariç), objeler true olarak; 0, null, undefined, NaN, boş dize ("") ise false olarak değerlendirilir. Ternary Operatörü (Üçlü Operatör): Basit if...else ifadeleri için daha kısa bir sözdizimi olan ternary operatörü (koşul ? ifadeDoğru : ifadeYanlış) kullanılabilir. Bu, özellikle küçük atamalar veya dönüş değerleri için kullanışlıdır. Karmaşık Koşullardan Kaçının: Çok sayıda mantıksal operatör içeren veya çok uzun koşullar, okunabilirliği azaltabilir. Bu tür durumlarda, koşulu daha küçük parçalara ayırmak veya yardımcı fonksiyonlar kullanmak daha iyi bir yaklaşımdır.
avatar
Emin
10
0
PHP Makaleleri
php-dilinde-sabitler-kullanimi
PHP Dilinde Sabitler Kullanımı
PHP'de sabitler, bir betik yürütme süresince değeri değiştirilemeyen veri depolama birimleridir. Tanımlandıkları andan itibaren, değerleri sabit kalır ve genellikle yapılandırma ayarları, matematiksel sabitler veya değişmez metin dizileri gibi global olarak erişilmesi gereken veriler için kullanılırlar. Sabitler, kodun okunabilirliğini artırır ve yanlışlıkla değerlerinin değiştirilmesini engelleyerek hataları minimize eder. Temel Sözdizimi (Syntax): Sabitler, PHP'de `define()` fonksiyonu kullanılarak tanımlanır. Bu fonksiyon, bir sabitin adını, değerini ve isteğe bağlı olarak büyük/küçük harf duyarlılığını belirten üç argüman alır. softmush.com Detaylı Açıklama: Yukarıdaki sözdizimindeki her bir parçanın anlamı aşağıda açıklanmıştır: define() fonksiyonu, bir sabiti tanımlamak için kullanılır. Bu fonksiyon, çalışma zamanında (runtime) sabit tanımlamanıza olanak tanır ve koşullu tanımlamalar için uygundur. name: Sabitin adını belirten bir dize (string). Geleneksel olarak, sabit adları tamamen büyük harflerle yazılır ve kelimeler alt çizgi (_) ile ayrılır. Örneğin: VERITABANI_ADI. value: Sabite atanacak değeri belirten bir ifade. Bu değer, bir dize, bir tamsayı, bir ondalık sayı, bir boolean veya bir null değeri olabilir. PHP 7'den itibaren dizi (array) değerleri de atanabilir. case_insensitive (isteğe bağlı): Bu argüman bir boolean değeridir (true/false). Eğer true olarak ayarlanırsa, sabit adını büyük/küçük harf duyarsız yapar. Varsayılan değeri false'tur, yani sabit adları büyük/küçük harfe duyarlıdır. PHP 7.3'ten itibaren bu parametrenin true olarak kullanılması tavsiye edilmez ve gelecekteki sürümlerde kaldırılabilir. Bu nedenle, sabitlerin genellikle büyük/küçük harfe duyarlı olması beklenir. Pratik Kullanım Örnekleri: Örnek 1: Temel Sabit Tanımlama ve Kullanımı Bu örnek, basit bir sabit tanımlamasını ve değerine nasıl erişileceğini göstermektedir. softmush.com Yukarıdaki kod çıktısı şu şekilde olacaktır: Hoş geldiniz: softmush.com Maksimum kullanıcı: 1000 Uygulama geliştirme modunda çalışıyor.softmush.com Örnek 2: Büyük/Küçük Harf Duyarlılığı Bu örnek, case_insensitive parametresinin varsayılan davranışını ve true olarak ayarlandığında nasıl farklılık gösterdiğini açıklar. softmush.com Yukarıdaki kod çıktısı (hata mesajı hariç) şu şekilde olacaktır: Bu bir duyarlı mesajdır. Bu duyarsız bir mesajdır. Bu duyarsız bir mesajdır.softmush.com Örnek 3: Sabitlerin Tanımlı Olup Olmadığını Kontrol Etme Bir sabitin tanımlı olup olmadığını defined() fonksiyonu ile kontrol edebilirsiniz. Bu, potansiyel hataları önlemek için faydalıdır. softmush.com Yukarıdaki kod çıktısı şu şekilde olacaktır: Veritabanı Kullanıcısı: root SITE_URL sabiti tanımlı değil.softmush.com Önemli Notlar: Sabitler bir kez tanımlandığında, değerleri değiştirilemez veya tanımsız hale getirilemez. Bu, değişkenlerden temel farkıdır. Sabitler, herhangi bir kapsama alanından (global veya fonksiyon içi) doğrudan erişilebilir. $GLOBALS süper globali gibi özel erişim yöntemlerine ihtiyaç duymazlar. PHP'de sabit adları genellikle tamamen büyük harflerle yazılır ve kelimeler alt çizgi (_) ile ayrılır. Bu, bir sabiti bir değişkenden veya diğer tanımlayıcılardan görsel olarak ayırmayı kolaylaştıran yaygın bir kuraldır (convention). const anahtar kelimesi ile tanımlanan sabitler, define() fonksiyonundan farklı olarak derleme zamanında tanımlanır ve sadece statik skopta (sınıf veya dosya seviyesinde) kullanılabilir. define() ise çalışma zamanında tanımlanabilir ve koşullu olarak da kullanılabilir. PHP 7.3 ve sonraki sürümlerinde define() fonksiyonunun case_insensitive parametresini true olarak kullanmaktan kaçınılması şiddetle tavsiye edilir. Gelecekteki PHP sürümlerinde bu özellik kaldırılabilir ve kodunuzun güncel kalmasını sağlamak için büyük/küçük harf duyarlı sabit adları kullanmak en iyi uygulamadır.
avatar
Emin
12
0