Python'da En İyi Uygulamalar

Python'da En İyi Uygulamalar

Bu makale, Python'da en iyi uygulamaları açıklar.

Python'da en iyi uygulamaları gerçek kod örnekleriyle açıklayacağız ve okunabilir, bakımı kolay kod yazma yöntemlerini tanıtacağız.

YouTube Video

Python'da En İyi Uygulamalar

Okunabilirliği en yüksek öncelik haline getirin

Öncelikle, 'okunabilirliği en yüksek öncelik haline getirmek' konusuna bakalım.

Python, 'okunabilirliğe' değer veren bir dildir. Öncelikle, amacı bir bakışta belli olan kod yazmaya öncelik verin.

1# Bad example: unclear variable names
2a = 10
3b = 5
4c = a * b

Bu kodda, değişken adları anlamını iletmiyor, bu nedenle başkalarının anlaması zaman alıyor.

1# Good example: descriptive variable names
2price = 10
3quantity = 5
4total_cost = price * quantity

Değişken adlarını açık yazarak, kodunuz kendini belgeleyen hale gelir.

Açık kod yazın

Şimdi de 'açık kod yazmak' konusuna bakalım.

Python'da, 'açık niyet', 'örtük davranışa' tercih edilir.

1# Bad example: implicit truthy check
2if data:
3    process(data)

Bu kodda, data'dan ne beklendiği belli değil ve bu hata oluşumuna zemin hazırlıyor.

1# Good example: explicit condition
2if len(data) > 0:
3    process(data)

Koşulları açık yazarak, kodun amacı ile tanımı uyumlu hale gelir.

Fonksiyonları küçük ve tek bir sorumluluğa odaklı tutun

Şimdi de 'fonksiyonları küçük ve tek bir sorumluluğa odaklı tutmak' konusuna bakalım.

Bir fonksiyon çok fazla iş yaparsa, test ve bakım zorlaşır.

1# Bad example: doing too many things
2def handle_user(user):
3    save_to_database(user)
4    send_email(user)
5    write_log(user)

Bu kodda, işlemler birbirine sıkı sıkıya bağlı hale gelerek, yeniden kullanım ve değişikliği zorlaştırır.

1# Good example: single responsibility
2def save_user(user):
3    save_to_database(user)
4
5def notify_user(user):
6    send_email(user)
7
8def log_user(user):
9    write_log(user)

Fonksiyonları ayırarak, rolleri netleşir ve test etmek kolaylaşır.

Tür ipuçlarını aktif olarak kullanın

Şimdi de 'tür ipuçlarını aktif olarak kullanmak' konusuna bakalım.

Tür ipuçları, belgelenme amacı taşır ve hataları önlemek için güçlü bir araçtır.

1# Bad example: Without type hints
2def add(a, b):
3    return a + b

Bu kodda, argüman ve dönen değerlerin türleri belli değil, bu da yanlış kullanıma yol açabilir.

1# Good example: With type hints
2def add(a: int, b: int) -> int:
3    return a + b

Tür ipuçları ile IDE tamamlama, statik analiz ve okunabilirlik büyük ölçüde artar.

None dönebilme olasılığını açıkça belirtin

Şimdi de 'None dönebilme olasılığını açıkça belirtmek' konusuna bakalım.

None dönebilen fonksiyonlar, kullananlar tarafından sıklıkla göz ardı edilir.

1# Bad example: Ambiguous return value
2def find_user(user_id):
3    if user_id == 1:
4        return {"id": 1, "name": "Alice"}
5    return None

Bu kodda, bir dönüş değeri olup olmadığı belli değil.

1# Good example: explicit return type
2from typing import Optional, Dict, Any
3
4def find_user(user_id: int) -> Optional[Dict[str, Any]]:
5    if user_id == 1:
6        return {"id": 1, "name": "Alice"}
7    return None

Optional kullanarak, None dönebilme olasılığını tür olarak belirtebilirsiniz.

İstisnaları (exception) çok geniş kapsamda yakalamayın

Şimdi de 'istisnaları çok geniş kapsamda yakalamamak' konusuna bakalım.

İstisna yakalama, temelde sadece gerekli olanı kapsamalı.

1# Bad example: catching all exceptions
2try:
3    result = int(value)
4except Exception:
5    result = 0

Bu kod, fark edilmesi gereken hataları gizleyebilir.

1# Good example: catch specific exception
2try:
3    result = int(value)
4except ValueError:
5    result = 0

İstisnaları sınırlandırarak, beklenmeyen sorunları gözden kaçırmazsınız.

with ifadesi ile kaynakları güvenli şekilde yönetin

Şimdi de 'with ifadesiyle kaynakları güvenle yönetmek' konusuna bakalım.

Dosya ve kilit gibi kaynaklar her zaman güvenli şekilde serbest bırakılmalıdır.

1# Bad example: manual close
2file = open("data.txt")
3content = file.read()
4file.close()

Bu kodda, bir istisna oluşursa close() çağrılmayabilir.

1# Good example: using context manager
2with open("data.txt") as file:
3    content = file.read()

with ifadesi kullanarak, bir istisna oluşsa bile temizleme işlemi güvenli şekilde yapılır.

Liste kavrayışlarını (list comprehension) uygun şekilde kullanın

Şimdi de 'liste kavrayışlarını uygun şekilde kullanmak' konusuna bakalım.

Basit dönüştürme işlemleri, liste kavrayışları ile kısaca yazılabilir.

1# Bad example: Verbose loop
2squares = []
3for i in range(10):
4    squares.append(i * i)

Bu kodda, temel işlem zor görünüyor.

1# Good example: Clear list comprehension
2squares = [i * i for i in range(10)]

Liste kavrayışlarını uygun kullandığınızda, kodun okunabilirliği artar.

Sihirli sayılardan (magic numbers) kaçının

Şimdi de 'sihirli sayılardan kaçınmak' konusuna bakalım.

Sayı ve metinleri doğrudan yazmak anlamlarını belirsizleştirir.

1# Bad example: magic number
2if status == 404:
3    handle_not_found()

Bu kodda, 404'ün anlamını bildiğiniz varsayılır.

1# Good example: named constant
2NOT_FOUND = 404
3
4if status == NOT_FOUND:
5    handle_not_found()

Adlandırma yapmak, amacınızı açık hale getirir.

Sadece 'çalışan' değil, bakımı kolay kod yazın

Son olarak, 'sadece çalışan değil, bakımı kolay kod yazmak' konusuna bakalım.

Önemli olan, ileride sizin veya başkasının kodu okuyabilmesidir.

1# Bad example: Hard to maintain
2def f(x):
3    return x * 1.08 + 100

Bu kodda, koddan gereksinimler anlaşılamıyor.

1# Good example: Easy to maintain
2TAX_RATE = 1.08
3BASE_FEE = 100
4
5def calculate_total(price: float) -> float:
6    return price * TAX_RATE + BASE_FEE

Anlamı adlara yansıtarak, kodun kendisi gereksinim haline gelir.

Özet

Python'da en iyi uygulamalar, zekice kod yerine kolay anlaşılır kod yazmaya dayanır. Küçük alışkanlıklar oluşturmak, daha az hata içeren ve uzun süre kullanılabilecek kodlar üretmenizi sağlar.

Yukarıdaki makaleyi, YouTube kanalımızda Visual Studio Code'u kullanarak takip edebilirsiniz. Lütfen YouTube kanalını da kontrol edin.

YouTube Video