Şimdi Ara

Programlama dillerinde alt alta if kullanmak.

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
17
Cevap
0
Favori
548
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Kafama takılan bir soru var.

    if
    if
    if

    kullanmak yerine

    if
    else if
    else

    kullanmak daha mı performanslı olur yoksa daha okunabilir olduğundan mı böyle kullanmamız gerek ?



  • denemek lazım ama ben kendim şu şekilde kullanıyorum eğer üsttekinden bağımsız bir durum varsa if koyuyorum tekrar ama diğerini bağlıysa else koyuyorum sizin mantıkla else kwü de gereksiz

    < Bu ileti DH mobil uygulamasından atıldı >
  • İlişkili işlemlerde if,elseif,else kullanmak daha doğru.
    Birbirinden bağımsız bir sürü olasılık varsa, diğeri anlaşılabilirlik açısından daha mantıklı.

    Performans farkı yok.
  • else if daha hızlı olur.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Multi core program yazdınız da, if else optimizasyonu kaldı.

    Öyle bir optimizasyon yok.

    Mümkünse kafayı, ben bu programı nasıl yazayım ki, bundan 6 ay sonra bunu düzeltmesi gereken yeni programcı, kafayı yormadan şıp diye anlar ve düzeltir diye yorunuz.

    Programcının iyisi, bakılabilir kod yazandır...
  • Uygunsa ampersand kullanın if ile doldurmayın veya switch case kullanın. Çok büyük bir performans değişimi göremezsiniz.

    < Bu ileti DH mobil uygulamasından atıldı >
  • if
    else if
    else

    yerine

    if
    if
    if

    kullanırsanız boşu boşuna kontrol yaptırmış olursunuz, büyük çaplı bir projede bu durum boşuna performansı kötü etkiler
  • Yazdığınız kodların sürdürülebilir olduğuna dikkat edin ve ona göre geliştirin.SOLID kavramını araştırın ve rehberiniz SOLID olsun

    if kullanmak yazılım yapmak değildir.Her gördüğünüz yere if yazmayın.Yarın birgün yazılıma yeni bir operasyon eklemek istersiniz ve if kullandığınız yerleri teker teker düzeltmek zorunda kalırsınız.

    Sektörde o kadar çok spagetti kod gördüm ki bu insanlar nasıl yazılımcıyım diye dolaşıyorlar aklım almıyor
  • Nickola Tesla kullanıcısına yanıt
    Rica etsem örnek verebilir misiniz?
  • İkiside farklı şeyler. Soru yanlış. Belirli bir şartı kontrol etmek için kullanılır if. Bu şartın olumsuz tarafı yoksa else kullanılması gereksizdir. Mesela, istanbulda yagmur yağıyor, bu if if tir. Yani yagmur yagıyormu, şehir istanbul mu. Ama birde yagmur yagıyorsa şemsiye al yapmıyorsa alma, bu da if else dir. Else kullanımı için olumsuz durumda bir iş yürütülmelidir.

    < Bu ileti DH mobil uygulamasından atıldı >
  • Arduino'cular if manyağıdır mesela.

    if(a)
    digitalWrite(x, HIGH);
    else
    digitalWrite(x, LOW);

    Adamın aklına digitalWrite(x, a); yazmak gelmiyor. İşin kötüsü söylüyorsun gene anlamıyor.
  • bkz.: zaman karmaşıklığı
    big o notasyonuna göre ilkinde 3'ü toplanır. 2.sinde en fazla zaman alan baz alınır. yani else if daha verimli

    < Bu ileti DH mobil uygulamasından atıldı >
  • fatihdogmus F kullanıcısına yanıt
    big O da en kotu duruma bakiyorsun. en kotu durumda butun else ifler denenir(hepsi yanlis olacagi icin) karmasiklik ayni olur.

    assembly koduna baktim ikisi de en kotu durumda ayni sayida CMP islemi yapiyor.
    ortalama durumda else azicik daha iyi calisir diye tahmin ediyorum.

    #include <stdio.h>

    void main(){
    int x=0,f1=0,f2=0;
    scanf("%d",&x);
    if(x>3)f1|=1;
    if(x>2)f1|=2;
    if(1)f1|=3;

    if(x>3)f2|=1;
    else if(x>2)f2|=2;
    else f2|=3;
    }



    _main:
    pushl %ebp
    movl %esp, %ebp
    andl $-16, %esp
    subl $32, %esp
    call ___main
    movl $0, 20(%esp)
    movl $0, 28(%esp)
    movl $0, 24(%esp)
    leal 20(%esp), %eax
    movl %eax, 4(%esp)
    movl $LC0, (%esp)
    call _scanf


    ;;;;;;;;;;;if if if
    movl 20(%esp), %eax
    cmpl $3, %eax
    jle L2
    orl $1, 28(%esp)
    L2:
    movl 20(%esp), %eax
    cmpl $2, %eax
    jle L7
    orl $2, 28(%esp)
    L7:
    orl $3, 28(%esp)

    ;;;;;;;;; if elseif else
    movl 20(%esp), %eax
    cmpl $3, %eax
    jle L4
    orl $1, 24(%esp)
    jmp L8
    L4:
    movl 20(%esp), %eax
    cmpl $2, %eax
    jle L6
    orl $2, 24(%esp)
    jmp L8
    L6:
    orl $3, 24(%esp)
    L8:
    ;;;;;;;;;;;;;;;;;;;
    nop
    leave
    ret



    < Bu mesaj bu kişi tarafından değiştirildi hynx -- 29 Mayıs 2020; 1:23:59 >




  • Okunabilirlik de değil, performans da değil, zira fonksiyonları farklı.

    Elinde a, b, c bool/boolean/flag ne diyorsan ondan olsun.

    if (a) {
    fun1();
    } else if (b) {
    fun2();
    } else if (c) {
    fun3();
    }

    Bunu sadece if ile yazacak olursan yazacağın şey:

    if (a) {
    fun1();
    }
    if (!a && b) {
    fun2();
    }
    if (!a && !b && c) {
    fun3();
    }

    Bir de bu a, b, c nin değişken değil de (x > 27 && x%2 == 0) gibi şeyler olduğunu düşün, iyice saçmalaşır ortalık.

    Tabi daha high level OOP dillerde performans etkisi yaratacak kadar da if zincirleri göremezsin, çünkü gördüysen dizaynı kötüdür. Alt alta 10 tane if görüyorsan bil ki başka biri o kodu okuduğunda onu anlaması ve değiştirmesi gereğinden zor olacak ve bug yaratmaya çok müsait olacak.

    Günümüz cihazlarındaki işlemci gücü ve rame bakacak olursak iş arkadaşlarımızın yazdığımız kodu hızlı anlaması, hızlı değiştirebilmesi, ve aynı şekilde bizim de kodu olabildiğince hızlı ve sorunsuz şekilde teslim edebiliyor olmamız daha önemli.

    Evet, 1 milyon elemanlı listenin içinde tek bir elemanı tek tek bakarak arıyorsanız sorun vardır, ama onun dışında senin bir göz kırpmandan bile kısa süre fark ettirecek ince optimizasyonlar gereksiz.

    Söylediğim her şey güçlü sistemlerde çalışacak kodlar içindir.




  • Daha performansli olur ama bi if okadar maliyetsiz bir sey ki milyarlarca dongu yapan bir yerde ancak bu kadar ufak fark olur. Bunu anlamanin en iyi yolu big o notation. Eger BigONotation ogrenirsen iki kodun hangisinin daha verimli oldugnu gorursunz

    Misal If in karmasikligi 1. 3 if alt alta olmasi N(1) * 3 olur. N2 (N kare) gibi karmasikligi olan kodlar varken N1 in lafi bile olmaz.



    < Bu mesaj bu kişi tarafından değiştirildi mahoni_38 -- 29 Mayıs 2020; 11:46:59 >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.