Python’da Temiz Kod Yazma
Python’da temiz, okunabilir ve sürdürülebilir kod yazma prensiplerini öğrenin.
Python'da temiz ve okunabilir kod yazmak, sadece programın çalışmasını sağlamakla kalmaz, aynı zamanda kodun sürdürülebilirliğini, bakımını ve ekip üyeleriyle işbirliğini de büyük ölçüde kolaylaştırır. "Kodu bir kere yazarsın, ama defalarca okursun" sözü bu prensibin önemini vurgular.
İşte Python'da temiz ve okunabilir kod yazmanın temel prensipleri:
---
### 1. PEP 8'e Uyun (Python Enhancement Proposal 8)
PEP 8, Python kodlama stil kılavuzudur. Tutarlı ve okunabilir kod yazmak için bir dizi kural sunar. Bu kurallara uymak, kodunuzun Python topluluğunun genel standartlarına uygun olmasını sağlar ve bu da başka geliştiricilerin kodunuzu daha kolay anlamasına yardımcı olur.
**Öne Çıkan PEP 8 Kuralları:**
* **Girinti:** Her zaman 4 boşluk kullanın, tab değil.
* **Satır Uzunluğu:** Satırları 79 karakterle sınırlayın (bazı durumlarda 120 karaktere kadar esnetilebilir).
* **Boş Satırlar:** Fonksiyonlar ve sınıflar arasında iki boş satır, sınıf içindeki metotlar arasında bir boş satır bırakın.
* **Adlandırma:**
* Değişkenler ve fonksiyonlar için `snake_case` (küçük harfler ve alt çizgi).
* Sınıflar için `PascalCase` (her kelimenin ilk harfi büyük).
* Sabitler için `ALL_CAPS` (tümü büyük harfler ve alt çizgi).
* Özel metotlar veya değişkenler için başında tek alt çizgi (`_private_variable`).
* Özel isim karıştırmayı önlemek için başında çift alt çizgi (`__mangled_name`).
* **İçe Aktarmalar (Imports):** Her `import` ifadesi ayrı bir satırda olmalı ve modüller alfabetik sıraya göre gruplandırılmalıdır (standart kütüphane, üçüncü parti kütüphaneler, yerel modüller).
### 2. Anlamlı Adlandırma Kullanın
Kodunuzun en önemli dokümantasyonu, iyi adlandırılmış değişkenler, fonksiyonlar ve sınıflardır.
* **Açıklayıcı Olun:** Değişkenlerinizin veya fonksiyonlarınızın ne yaptığını, ne sakladığını veya neyi temsil ettiğini açıkça belirtin.
* **Kötü:** `x`, `data`, `do_something`
* **İyi:** `customer_name`, `total_price`, `calculate_discount`, `UserAccount`
* **Telgraf Dili Kullanmaktan Kaçının:** Kısaltmalardan veya tek harfli değişkenlerden mümkün olduğunca kaçının, ancak döngü sayaçları (`i`, `j`, `k`) gibi geleneksel kullanımlar kabul edilebilir.
* **Tek Sorumluluk Prensibiyle Uyumlu Adlar:** Fonksiyon veya sınıf adları, tek bir sorumluluğu yansıtmalıdır.
### 3. Fonksiyonlar ve Sınıfları Küçük ve Tek Sorumluluklu Tutun
* **Tek Sorumluluk Prensibi (SRP):** Her fonksiyon veya sınıf sadece tek bir işi yapmalı ve o işi iyi yapmalıdır.
* **Fonksiyonlar:** Mümkün olduğunca kısa olsun. Bir ekrana sığmalı ve sadece bir şeyi yapmalıdır. Çok fazla parametre almaktan kaçının (genellikle 3'ten fazlası kötü bir işarettir).
* **Sınıflar:** Tek bir varlığı veya konsepti temsil etmeli ve onunla ilgili verileri ve davranışları gruplandırmalıdır.
* **Yüksek Soyutlama Seviyesi:** Fonksiyonlarınızın veya sınıflarınızın aynı soyutlama seviyesinde kalmasına dikkat edin. Bir fonksiyon hem düşük seviyeli detayları (örneğin, veritabanı sorguları) hem de yüksek seviyeli iş mantığını aynı anda ele almamalıdır.
### 4. Pythonic Kod Yazın
Python'ın güçlü özelliklerini ve idiomatik yapılarını kullanarak daha kısa, daha zarif ve daha okunabilir kod yazın.
* **List Comprehensions ve Dictionary Comprehensions:** Döngülerle liste veya sözlük oluşturmak yerine bunları kullanın.
* **Kötü:**
```python
squares = []
for x in range(10):
squares.append(x**2)
```
* **İyi:**
```python
squares = [x**2 for x in range(10)]
```
* **`with` İfadesi (Context Managers):** Dosya işlemleri, veritabanı bağlantıları gibi kaynakların doğru bir şekilde açılıp kapanmasını sağlar.
```python
with open('myfile.txt', 'r') as f:
content = f.read()
```
* **Yerleşik Fonksiyonlar:** `enumerate`, `zip`, `map`, `filter` gibi Python'ın yerleşik fonksiyonlarını kullanın.
* **Kötü:**
```python
for i in range(len(my_list)):
print(f"{i}: {my_list[i]}")
```
* **İyi:**
```python
for i, item in enumerate(my_list):
print(f"{i}: {item}")
```
* **Kısa Devre Değerlendirmesi:** `and`, `or` operatörlerini kullanarak koşulları daha kısa yazın.
```python
# Eğer username varsa kullan, yoksa 'Guest' kullan
user = username or 'Guest'
```
### 5. Dokümantasyon ve Yorumları Doğru Kullanın
* **Docstrings (Belge Dizileri):** Modüller, sınıflar, metotlar ve fonksiyonlar için docstring'ler yazın. Docstring'ler, kodunuzun *ne yaptığını*, parametrelerini, dönüş değerlerini ve olası istisnalarını açıklar. PEP 257'ye uygun docstring formatlarını kullanın (örneğin, Google, NumPy veya reStructuredText formatları).
```python
def calculate_average(numbers: list[int]) -> float:
"""
Verilen sayı listesinin ortalamasını hesaplar.
Args:
numbers: Ortalama hesaplanacak sayıların listesi.
Returns:
Sayıların ortalaması. Boş liste verilirse 0.0 döner.
"""
if not numbers:
return 0.0
return sum(numbers) / len(numbers)
```
* **Yorumlar:**
* **Neden:** Yorumlar kodun *nasıl* çalıştığını değil, *neden* öyle çalıştığını açıklamalıdır. Kodun kendisi *nasıl* çalıştığını zaten göstermelidir.
* **Karmaşık Algoritmalar:** Karmaşık veya yanıltıcı algoritmalar için açıklayıcı yorumlar yazın.
* **Kötü Kodu Yorumlamayın:** Eğer kod karmaşıksa, yorum eklemek yerine kodu basitleştirmeye çalışın. "Yorumlar, kötü kodun parfümleridir."
* **Az ve Öz:** Gereksiz yorumlardan kaçının. Her satırı yorumlamak gereksizdir.
### 6. Hata Yönetimini Düzgün Yapın
* **Spesifik İstisnaları Yakalayın:** Genel `except Exception:` bloklarından kaçının. Yalnızca beklediğiniz ve ele alabileceğiniz spesifik istisnaları yakalayın.
* **Anlamlı Hata Mesajları:** Kullanıcıya veya log'lara anlamlı hata mesajları sağlayın. Ne yanlış gittiğini ve nasıl düzeltilebileceğini belirtin.
* **Hataları Yaymayın:** Yakaladığınız bir hatayı uygun bir şekilde ele alamıyorsanız, daha yüksek bir seviyeye yükseltin (`raise`).
### 7. DRY Prensibine Uyun (Don't Repeat Yourself)
* Kod tekrarından kaçının. Aynı veya benzer kod bloklarını birden fazla yerde bulundurmak yerine, bunları bir fonksiyon, metot veya sınıf haline getirin. Bu, kodun bakımını kolaylaştırır ve hataları tek bir yerde düzeltmenizi sağlar.
### 8. Tip İpuçları (Type Hinting) Kullanın
Modern Python'da fonksiyon parametrelerinin ve dönüş değerlerinin tiplerini belirtmek için tip ipuçları kullanmak, kodun okunabilirliğini artırır, IDE'lerin daha iyi oto tamamlama ve hata kontrolü sağlamasına yardımcı olur ve kodun anlaşılmasını kolaylaştırır.
```python
def greeting(name: str) -> str:
return f"Hello, {name}"
```
### 9. Test Edilebilir Kod Yazın
Temiz ve tek sorumluluklu fonksiyonlar ve sınıflar, doğal olarak daha kolay test edilebilir. Testler, kodunuzun doğru çalıştığını doğrulamanın yanı sıra, kodun nasıl kullanıldığını da gösteren bir dokümantasyon görevi görür.
---
Bu prensiplere uymak, sadece size değil, ekibinizdeki diğer geliştiricilere de fayda sağlayacaktır. Unutmayın, temiz kod bir beceridir ve pratikle gelişir. Düzenli olarak kendi kodunuzu gözden geçirin ve başkalarının kodlarını okuyarak öğrenmeye devam edin.
Son Paylaşımlar
-
Python Temelleri Genel Tekrar
14:39:24 - 13/12/2025 -
Python Performans İpuçları
14:38:59 - 13/12/2025 -
Python’da Temiz Kod Yazma
14:38:28 - 13/12/2025 -
Python Mini Proje: Sayı Tahmin Oyunu
14:37:58 - 13/12/2025 -
Python Mini Proje: Hesap Makinesi
14:37:31 - 13/12/2025