Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Doğru yöntem
#1
Merhaba ( if then end else begin ) yönteminde iki faklı kodlama yöntemi hangisi doğru? ve sorun çıkarmaz?


   
    
       for I := 0 to ListNew.Items.Count - 1 do
        begin
          if ListNew.Items[I].Index = IndexSelec then
          begin
            Memo1.Lines.Add(ListNew.Items[I].Data['Yeni'].ToString);
          end;
          if ListNew.Items[I].Index <> IndexSelec then
          begin
            Memo2.Lines.Add(ListNew.Items[I].Data['Yeni'].ToString);
          end;



    
    
        for I := 0 to ListNew.Items.Count - 1 do
        begin
          if ListNew.Items[I].Index = IndexSelec then
          begin
            Memo1.Lines.Add(ListNew.Items[I].Data['Yeni'].ToString);
          end
        else
         begin
            Memo2.Lines.Add(ListNew.Items[I].Data['Yeni'].ToString);
          end;
Cevapla
#2
İkincisi daha doğru bir yaklaşım.
İlkinde her iki if koşulu her şekilde kontrol edilir ama ikincide ilk koşul geçersizse bakılır. Performans ya da uygulamada fark olacağını düşünmüyorum ama kalite olarak ikincisini öneririm
Topluluk mopluluk yok :/
Cevapla
#3
(30-09-2018, Saat: 14:14)YasinDalli Adlı Kullanıcıdan Alıntı: Merhaba ( if then end else begin ) yönteminde iki faklı kodlama yöntemi hangisi doğru? ve sorun çıkarmaz?


   
    
       for I := 0 to ListNew.Items.Count - 1 do
        begin
          if ListNew.Items[I].Index = IndexSelec then
          begin
            Memo1.Lines.Add(ListNew.Items[I].Data['Yeni'].ToString);
          end;
          if ListNew.Items[I].Index <> IndexSelec then
          begin
            Memo2.Lines.Add(ListNew.Items[I].Data['Yeni'].ToString);
          end;



    
    
        for I := 0 to ListNew.Items.Count - 1 do
        begin
          if ListNew.Items[I].Index = IndexSelec then
          begin
            Memo1.Lines.Add(ListNew.Items[I].Data['Yeni'].ToString);
          end
        else
         begin
            Memo2.Lines.Add(ListNew.Items[I].Data['Yeni'].ToString);
          end;

Aynı olgunun sadece iki durumu denetlenecekse tek ( if x then A else B  ) kalıbı daha doğru bir yaklaşım olur. Aşağıdaki konuyu ve devamındaki münazarı inceleyebilirsiniz...

http://www.delphican.com/if-nedir-nasil-kullanilir.html
YouTube Delphi Tips
"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" Peyami Safa
WWW
Cevapla
#4
Memo1.Lines.Add(ListNew.Items[IndexSelec].Data['Yeni'].ToString);

for I := 0 to IndexSelec-1 do
    Memo2.Lines.Add(ListNew.Items[I].Data['Yeni'].ToString);

for I := IndexSelec+1 to ListNew.Items.Count-1 do
    Memo2.Lines.Add(ListNew.Items[I].Data['Yeni'].ToString);



Ufak bir espri olsun diyelim Smile Zira kod okunabilirliği genelde daha önemlidir.

Bazen property'lerin erişim maliyetleri de olabiliyor. Mesela yazılımcı sadece "FIndex" adlı yerel bir değişkeni okuduğunu düşünür ama belki de içeride "Property GetIndex()" ile tüm dizi baştan sayılıyor bile olabilir.
Cevapla
#5
       
      for I := 0 to Pred(ListNew.Items.Count) do
      begin
       Memo1.Lines.Add(
         Ifthen(ListNew.Items[I].Index = IndexSelec,
         ListNew.Items[I].Data['Yeni'].ToString,
         ListNew.Items[I].Data['Yeni'].ToString)
        );
      end;
Yalnızım ama bir kente yürüyen ordu gibiyim, edebiyattan kaçınmalıyım..
Cevapla
#6
Cevaplar için teşekkürler.

(01-10-2018, Saat: 00:31)narkotik Adlı Kullanıcıdan Alıntı:
       
      for I := 0 to Pred(ListNew.Items.Count) do
      begin
       Memo1.Lines.Add(
         Ifthen(ListNew.Items[I].Index = IndexSelec,
         ListNew.Items[I].Data['Yeni'].ToString,
         ListNew.Items[I].Data['Yeni'].ToString)
        );
      end;

For döngüsünde Pred kullanmıştır. Dikkatimi çeken bir durum oldu. Pred ile listview son satırında işlemi algılamadığı fark ettim.
Bu neden dolayı for döngüsünden Pred çıkarmak durumunda kaldım.


    for I := 0 to Pred(ListNew.Items.Count) do
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi