Jump to page: 1 2 3
Thread overview
Kod Yazma Teknikleri
Feb 02, 2012
Salih Dinçer
Feb 02, 2012
zafer
Feb 03, 2012
Salih Dinçer
Feb 04, 2012
Salih Dinçer
Feb 09, 2012
Salih Dinçer
Feb 09, 2012
erdem
Feb 09, 2012
Salih Dinçer
Feb 10, 2012
Salih Dinçer
Feb 23, 2012
Salih Dinçer
Mar 09, 2012
Salih Dinçer
Mar 10, 2012
Salih Dinçer
Mar 10, 2012
Salih Dinçer
Mar 10, 2012
Salih Dinçer
Aug 31, 2012
Salih Dinçer
February 02, 2012

Merhaba,

Bereketli bir başlıkta, (-bknz. ilgili konu (http://ddili.org/forum/thread/705)) birden fazla konu çıkınca ayrı başlık açma gereği doğurdu. Aslında burada da birden fazla başlık (okunabilirlik, ekleme ve hatalardan arındırma kolaylığı) içeriyor. Crockford'un bu konuda JS üzerinden güzel bir vidyolu anlatımı var. Bulursam bu başlıkta nakledeceğim. Ama önce tartışmanın doğduğu satırlar ile başlayalım:
Alıntı (acehreli):

>

Alıntı (Salih Dinçer):

>

Ben genelde 'for''dan hemen sonra gelen 'if''lerde bile öncesine güzel parantez kullanmayıp tek satırlık for-if iş birliğini sanki tek komutmuş gibi temsil ederken sadece bir if için tek satır kullanmayıp altına girintili devam etmenizin kod yazma kolaylığı açısından sebebi nedir? <--- Farkındayım, çok uzun bir cümle oldu; işte kod yazarken sadeleştirmeye gayret ederim ama gel gör ki yazışırken uzatırım da uzatırım. Huy çıkmaz, can çıkarmış...:)

> > 	if(len >= width)
> > 		return s;
> > ```

> > Başarılar...
> >
>
> Bunun kod kolaylığı açısından bir yararı yok. Olsa olsa okunaklılık açısından yararı olabilir. Programdaki diğer if'ler vs. bloklarını hep aşağıya alıyorlarsa gözümüz de kodu bakarken blokları orada ararlar. O yüzden tutarlı olmakta yarar var.
>
> Yoksa satırın sonunda gizli kalmış oluyorlar.
>
>
>
if (len >= width) return s;
writeln("devam");
>

O kodu görünce writeln'ın if bloğu altında olduğu sanılabilir. Satırı girintili olmadığı için ise acaba boşluk mu unutuldu diye düşünülebilir. Tekrar if'e bakılır ve bloğunun aslında kendi satırında olduğu görülür.

Tutarlılık çok önemli olduğu için kendi adıma her zaman için küme parantezlerini de kullanırım:

>     if (len >= width) {
>         return s;
>     }
> ```

>
> Sonradan başka satır eklenecekse yeri hazırdır. Öteki türlü, return s aşağıya indirilmelidir.
>
> Ama çok önemli değil tabii. Kişisel... :)
>
> Ali
>
Sanırım herkesin kişisel bir takım alışkanlıkları var. Tabi standart değerler üzerinden kodlarımızı yayınlamak daha uygun olacaktır. Bu da bol bol güzel parantez kullanmak olsa gerek? Bu sayede düzeltmeler de kolay oluyor. Tam burada bir tecrübemi paylaşmak isterim:

Yazılım geliştirme aşamasında tüm satırların tek ekranda (PgUp/Down kullanmadan) durması için için mümkün olduğunca satırları birleştiriyordum. Ama bir keresinde  güzel parantez kullanmayıp;
- Tıpkı yukarıdaki 'if()' gibi bir 'for()' döngüsü kullandım,
- Döngüyü geçici olarak iptal etmek için altındaki ekrana yazma satırını // ile gizledim,
- Tabi derleyici sonunda noktalı virgül olmadığı için hata verdi, hadi tek karakterden ne olacak dedim ve geçtim...:)

Ama sonra o noktalı virgül unutuldu ve n'aptıysam kodu eski haline getiremedim. Çünkü gözüme hiç bir hata gözükmüyordu ve noktalı virgül yüzünden de masum döngümüz tek başına takılıyordu. Yani koda yavaşlık hariç hiç bir katkısı olmuyordu...

Bir de başka tartışma konusu da toplam (gerçek) satır sayısı olabilir. Hani şu kadar satır kod yazdık dediğimizde, aslında güzel parantez ve boş satırları dikkate aldığımızda, toplam satır sayısını bulmak için ikiye bölmek zannedersem daha doğrudur...:)

Sevgiler, saygılar...

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
February 02, 2012

Alıntı (Salih Dinçer):

>

Sanırım herkesin kişisel bir takım alışkanlıkları var.

Daha da önemlisi, çalışılan grubun kuralları var. Örneğin bizim firmada küme parantezsiz kod bloğu kullanılamaz.

Alıntı:

>
  • Tıpkı yukarıdaki 'if()' gibi bir 'for()' döngüsü kullandım,

Senin yazdıklarından esinlenerek küçük bir program:

import std.stdio;

void main()
{
   bool bir_kosul = true;

   if (bir_kosul)
       writeln("Koşul doğru");

   writeln("Devam ediyoruz");
}

Alıntı:

>
  • Döngüyü geçici olarak iptal etmek için altındaki ekrana yazma satırını // ile gizledim,

Tamam:

import std.stdio;

void main()
{
   bool bir_kosul = true;

   if (bir_kosul)
       // writeln("Koşul doğru");

   writeln("Devam ediyoruz");
}

"Devam ediyoruz"un nasıl if'in altına çekildiğini farkettiniz mi?

Alıntı:

>
  • Tabi derleyici sonunda noktalı virgül olmadığı için hata verdi, hadi tek karakterden ne olacak dedim ve geçtim...:)

D çok yardımcı olark buna izin vermez:

   if (bir_kosul)
       ;             // <-- DERLEME HATASI

Alıntı:

>

Bir de başka tartışma konusu da toplam (gerçek) satır sayısı olabilir. Hani şu kadar satır kod yazdık dediğimizde,

Benim için hiçbir önemi olmayan bir ölçü o. Andrei geçen sene bizim firmada D konuşması yaptığında ayaküstü sohbet sırasında "sizin kod kaç satır?" diye sordu ve bilmediğime şaşırdı. Aslında "hiç kimse bilmiyor" diye eklediğine bakarsak kendisi azınlıkta olmalı. ;)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 03, 2012

Ben ilgili konudada (http://ddili.org/forum/thread/705) belirtiğim gibi bunun kişisel bir seçim olduğunu ve kendimizi çok sıkmaya gerek olmadığını düşünüyorum.

Benim gibi tek başına kodluyorsan, sana hangi yazım daha rahat hissettiriyorsa onla devam etmelisin. Ali gibi bir ekip
içinde çalışıyorsan zaten kodlamanı yönlendirecek ekip kuralları mevcuttur. Yada ddili.org gibi bir sitenin açık kaynak projelerinde yer alıyorsan zaten sitenin bir kodlama standartı (http://ddili.org/wiki/index.php?title=Kodlama_Standard%C4%B1) vardır ve sende ona göre kodlama yaparsın.

Diğer taraftan tabiki tavsiye edilen yöntemlerden birini kullanmak yukarıdaki hataların en aza inmesi için iyi bir seçim olacaktır.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 03, 2012

Öncelikle Wikimiz olduğunu bilmiyordum (görmemişim!); teşekkürler Zafer...:)

Grup kuralları hiyerarşi gereği daha önemli. Sanırım bir süre sonra da alışıyor ve kişisel tercihlerinize baskın geliyordur. Dünya genelinde de bu güzel parantezlerin fazlalığından çoğunluğun tercihi anlaşılıyor...

Peki kendinize özel teknikleriniz var mı? Aslında bu aşağıdaki gibi kendimden verdiğim örnek gibi de olması şart değil. Örneğin hata bulmak için aralara sıkıştırdığınız açıklamalarınıza mı yoksa Debugger'in verdiği bilgilere mi güvenirsiniz? Öyle ya, çok yakın bir zaman önce yazdığımız kodun amacını/sebebini hatırlamamız bile vakit alabiliyor...:)

//maskInitialize();/*
	do
	{
		Console.Write("{0}\t", k);
		Console.ReadKey();
		k = bwSieve.bwTren(xVagon, 'd');
	}
	while (k < 79);//*/

C#'dan örnek verdiğim için kusura bakmayınız. Burada benim sıklıkla kullandığım şöyle bir şey var: '//*/'

Görevi, üst satırdaki fonksiyonu iptal ettiğimde alttaki test kümesini açması ve işi bittiğinde de eski haline getirdiğinizde (iki delete tuşu) anında koddan çıkması. Bunu karışık bir şekilde (birden fazla) çeşitli yerlerde kullanarak daha etkili örnekler var. Tamamen sizin ihtiyaçlarınıza kalmış.

Gerçi günümüz IDE'leri çok şahane şeyler başarıyor. Sanırım buna benzer yetenekli görevleri kullandığınız yazılma küme küme yaptırabiliyorsunuz. İşte, bu da sizinle paylaşmış olduğum bir alışkanlığım...:)

Başarılar...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 04, 2012

Bahsettiğim vidyoyu (Douglas Crockford / JavaScript: The Good Parts) buldum:
http://open.bilgi.edu.tr/freedays_2009/index.php?p=videos

Ben oradaydım...:)

Konu belki JS (malum büyük ustanın konusu!) ve güvenlik üzerinden işleniyor ama kesinlikle çok aydınlatıcı. Küme mevzuları, gelenekler ve olası hatalardan bahsediliyor. Boş bir vaktinizde (örneğin şu Pazar günü) izlemenizi öneririm. Sanırım sitede bir yerlerde Türkçe alt yazılı olanı da vardı. Ayrıca sunumun benzer vidyoları ve PPT dosyası sitesinde mevcut...
Alıntı:

>

He delivers a clear, concise tutorial on object-oriented JavaScript and closures. The most satisfying piece to me was his clear explanation of why right-curlies ("block {" all on the same line) is the only acceptable style in JavaScript.

Tune in to the video below, and follow along with the presentation. (http://www.crockford.com/codecamp/goodparts.ppt) It's enjoyable and enlightening. What a great combination. Thanks, Doug!
Sevgiler, saygılar...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 09, 2012

D Dili'nde başka bir teknik de 'assert()' kullanmak imiş. Bunu bir çok yerde görüyorum. İlk başlarda anlam veremiyordum ama kesinlikle çok faydalı bir şeymiş. Peki bu ifadeler kodda bir şişkinliğe veya yavaşlığa neden oluyor mu?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 09, 2012

Ali bey C++ için bazı programcıların kodlarının üçte birinin 'assert' ifadelerinden oluştuğunu söylemişti. Hatta 'assert' kullanmayanları dövüyorlarmış! :)

Diğer hata yakalama olanaklarından farkı kullanıcının değil de programcının hatalarını yakalamak için kullanılır. Programda denenmesine gerek bile olmayacak kadar emin olduğumuz ifadeleri test ederken 'assert' kullanırız.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 09, 2012

Enforce'u bilmiyordum, teşekkürler...

Aslında ben ne C'de ne de başka bir dilde bu tür özel şeyleri hiç kullanmıyorum. Bu durumda dayak yiyeceklerin önde geleni olmalıyım...:)

Bunun yerine '#define' ve derleyici ifadelerini kullanıyorum. Duruma göre 'test block'ları iptal oluyor ve derlenmiyor. Hatta sadece hata denetlemesi için değil ekrana görüntü veren bazı satırları bu şekilde aç kapa yapabiliyorum. Geçici çözümleri ise yukarıdaki gibi satır gizleme yöntemi kullanıyorum.

Peki D'de define gibi şeyler var mı? Ben görmedim de belki başka şekilde kullanılıyordur.

Sevgiler, saygılar...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 09, 2012

Üçte birini ben söylemişsem abartmışım! :-p Evet, assert çok yararlıdır.

assert'ün arkadaşı std.exception.enforce da çok yararlı. Bazen kullanımları birbirine karışabiliyor:

  • assert programcıyı (kendimizi) denetlemek için kullanılır. O yüzden Erdem'in "denenmesine gerek bile olmayacak kadar emin olduğumuz ifadeleri test ederken assert kullanırız" sözü çok doğru. ;) Çünkü program hataları doğru olduğunu düşündüğümüz yerlerde ortaya çıkabilirler.

O yüzden assert'ler in, out, invariant, ve unittest gibi bloklara uygunlar.

  • enforce ise işlevin kullanıcısını denetlemek için kullanılırlar. Kullanıcı kendimiz de olabiliriz, yazdığımız bu kütüphaneyi kullanan başka bir programcı da olabilir. enforce aslında bir koşulu denetleyip hata atmakla aynı şeydir:
   if (boş_mu()) {
       throw new Exception("Boşken çağıramazsınız");
}

Onun yerine:

   enforce(!boş_mu(), "Boşken çağıramazsınız");

Bazen enforce ile denetlenmesi gereken durumlar in bloklarına yazılabiliyor. Bu hataya ben de düşüyorum.

Hangisini kullanmak gerektiğini şöyle belirleyebiliyoruz: in, out, ve invariant blokları dmd'nin -release seçeneği kullanıldığında koddan çıkartılıyorlar. (Galiba assert'ler de öyle? Denemek gerek. Ama assert(false) özeldir ve hiçbir zaman koddan çıkartılmaz.)

Programın doğruluğundan emin olup -release ile kullanıma sunduğumuzda bile uygulanmasını istediğimiz denetimler için enforce kullanmalıyız; diğerleri için assert.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 09, 2012

Alıntı (Salih Dinçer):

>

Peki D'de define gibi şeyler var mı? Ben görmedim de belki başka şekilde kullanılıyordur.

Bjarne Stroustrup makroları C++'a hiç almak istememiş ama haklı nedenlerle başaramamıştır. D'de makro yoktur. Şunlar varken makro gerekmiyor:

  • şablonlar

  • alias

  • immutable

  • version()

  • debug()

  • static if()

  • mixin (şablon ve dizgi)

  • vs. (?) :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

« First   ‹ Prev
1 2 3