Yazdığım kod ne kadar kaliteli?

Temiz kod yazma gayesi cok guzel. Kod yazarken aslinda onemli olan sey zaten teknikler, paradigmalar, konseptlerdir. Kod yazdigin paradigmaya, stile hakim olduktan, o stilde kod okuyabildikten sonra temiz kod yazabiliyorsun. Ornegin temiz buldugun python kodu ile kendi kodunu karsilastir. Kodunda basitlestirmeler yap, gozune karmasik gozuken yerlerin mutlaka ustune git, kullandigin dile, teknige, paradigmaya gore uygun bir cozum mutlaka bulacaksin.

Aslinda baktiginda zaten isin programcilik tarafi da bu. Kod yaziyorsun, sadece islevi onemli olsa programlama dilleri sadece isin en teknik tarafiyla ugrasirdi, muhtemelen sadece prosedurel programlama var olurdu. Sadece derleyiciler, yorumlayicilar, platform gibi kavramlar on planda olurdu ama aksine kod yazarken maintainability kavrami asil gayedir. Koda bir seyler eklemen gerektiginde cok ufak duzeltmelerle, eklemek icin cikarma yapmadan isini halledebiliyor olman gerekiyor. Bunun yaninda kodun okunakli olmasi da gerekiyor ama bu oldukca goreceli. Bana gore (ve haskell kullanmis insanlara) su kod super okunakli mesela:

-- https://www.codewars.com/kata/5287e858c6b5a9678200083c/haskell
module Narcissistic where
import Data.Char (digitToInt)

narcissistic :: Integral n => n -> Bool
narcissistic n = (== n) . fromIntegral . sum . map (\x -> x^len) $ digits
  where digits = map digitToInt . show . toInteger $ n
        len = length digits

Ve maintain edilebilir bir kod. Ama fonskiyonel programlamayla pek hasir nesir olmadiysaniz muhtemelen su kodu tercih edersiniz:

# (alintidir)
def narcissistic( value ):
    value = str(value)
    size = len(value)
    sum = 0
    for i in value:
        sum += int(i) ** size
    return sum == int(value)

Ilk kod haskell ile yazilmis ve fonksiyonel programlama paradigmasi kullanilmis. Diger kod ise python ve klasik imperatif stil. Tabii bunlar iki ayri paradigma, kendi icinde okunakli/okunaksiz kodlar da var, mesela su post cok guzel bir ornek:

Bir baska haskell ornegi (deklaratif):

getLine >>= readFile >>= putStrLn

Ayni kodun ayni dilde imperatif hali:

main = do
    filename <- getLine
    contents <- readFile filename
    putStrLn contents

Ilk iki paragraftaki terimler hakkinda pek emin degilim, ifade etmeye calistigim seyi anlamissinizdir. Onerilere acigim.

4 Beğeni