- Soldan sağa programlama yaklaşımında, kod yazılır yazılmaz program geçerli durumda kalır; bu da editörün otomatik tamamlama gibi araç desteğini en üst düzeye çıkarır
- Python’un liste üreteçleri, bildirilmeyen değişkenler ve tip çıkarımının yokluğu nedeniyle otomatik tamamlama işlevini engeller
- Rust ve JavaScript, programın soldan sağa doğal biçimde kurulmasına izin verdiği için değişken kullanımı ve metot keşfi daha sezgiseldir
- C ve Python’daki fonksiyonel stil, fonksiyon adı ya da yapının kolay keşfedilememesi nedeniyle verimli bir kodlama deneyimini zayıflatır
- Karmaşıklığı yüksek mantıkta, soldan sağa açılan kod daha kolay okunur; bakım ve genişletilebilirlik açısından daha üstündür
Soldan Sağa Programlama
Kod, yazıldığı anda geçerli olmalı
Python liste üreteçlerinin sınırları
- Python liste üreteci sözdizimi
words_on_lines = [line.split() for line in text.splitlines()], bildirilmeyen bir değişkene (line) erişmeyi gerektirdiği için editörün otomatik tamamlama ya da tip çıkarımı desteğini düzgün sağlayamaması sorununu doğurur
- Kodu parça parça yazma sürecinde
words_on_lines = [line.sp gibi yazıldığında editör line değişkeninin tipini bilemediğinden metot öneremez
- Değişken adı yazım hataları (
lime gibi) gibi potansiyel hataları tespit etmek de zorlaşır
- Doğru önerileri alabilmek için tamamlanmamış kod yazmak gerekir; bu süreç sezgisel değildir ve rahatsız edicidir
Rust’ta soldan sağa kurulum
- Rust örneği (
let words_on_lines = text.lines().map(|line| line.split_whitespace());) şunu gösterir:
- Anonim fonksiyon bildirilirken değişken (
line) ilk göründüğü anda bildirilmiş sayılır; böylece hemen otomatik tamamlama ve metot önerileri kullanılabilir
- Nitekim
split_whitespace metodu da otomatik öneri sayesinde kolayca bulunabilmiştir
- Bu yaklaşımda program her zaman kısmen de olsa geçerli durumda kaldığı için IDE ya da editör kod yazımını gerçek zamanlı destekleyebilir
Aşamalı Açığa Çıkarma (Progressive Disclosure) ve API kullanılabilirliği
- Aşamalı Açığa Çıkarma (Progressive Disclosure), kullanıcının yalnızca ihtiyaç duyduğu kadar karmaşıklıkla karşılaşmasını sağlayan bir tasarım ilkesidir; programlamaya da uygulanabilir
- Örnek: Bir kelime işlemcide yalnızca görsel eklendiğinde ilgili seçeneklerin görünmesiyle benzerlik taşır
- C dili bu tür desteği yeterince sunmaz
FILE *file ile ilişkili tüm fonksiyonlar file. üzerinden keşfedilemediği için fread, fclose gibi fonksiyon adı kalıplarını ezberlemek gerekir ve işlevleri keşfetmek zordur
- Buna karşılık ideal bir dilde
file. üzerinden metot önerileriyle ilgili işlevler kolayca aşamalı olarak keşfedilebilir
Fonksiyon ve metot keşfedilebilirliği arasındaki fark
- Python’daki
map(len, text.split()) ile JavaScript’teki text.split(" ").map(word => word.length) örneklerinin karşılaştırılması
- Python’da
len, length, size gibi isimler öngörülemediğinden doğru işlevi bulmak için birkaç deneme yapmak gerekebilir
- JavaScript’te
word. sonrasına yalnızca .l yazmak bile editörün length gibi metotları önermesini sağlar; bu da keşfedilebilirliği artırır
map gibi yüksek mertebeden fonksiyonlarda bile gerçek dönüş değeri ve veri tipi anında daha açık hale gelir
Mantık karmaşıklaştıkça yapısal yazımın avantajı
- Karmaşıklığı yüksek mantıkta (
filter, lambda iç içe geçmiş uzun Python kodu gibi)
- Kodun başını ve sonunu tekrar tekrar kontrol etmek gerekir; koşul ifadeleri ya da parantez eşleştirmeleri nedeniyle okunabilirlik düşer ve anlamak zorlaşır
- Aynı mantığın JavaScript sürümünde ise kod yukarıdan aşağıya, soldan sağa sıralı biçimde okunup anlaşılabilir
Temel ilke
Kod, girildiği her anda geçerli olmalı
- Tek başına
text yazmak bile programın geçerli durumda kalmasını sağlar
text.split(" ") yazıldığında da, ardından .map(word => word.length) eklenirken de, bütün olarak ara durumlar her zaman geçerlidir
- Bu tür bir kodlama deseni, editörün gerçek zamanlı destek sunabilmesini artırır; REPL ortamında ise sonuçlar anında görülebilir
Sonuç
- API ve dil tasarımı, kodun soldan sağa doğal biçimde yazılmasını ve her ara adımda geçerli bir program oluşturulmasını desteklemelidir
- İyi API tasarımı, bu kod yazma deneyimini iyileştirmenin temel unsurudur
Henüz yorum yok.