If isStone() returns false, Snippet 1 performs 1 function call (isStone()) and returns immediately.
If isStone() returns false, Snippet 2 also performs 1 function call (isStone()) and returns immediately.
If isStone() returns true and isEnemy() returns false, both snippets perform 2 function calls (isStone() and isEnemy()).
If isStone() returns true and isEnemy() returns true, both snippets again perform 2 function calls.
chat gpt bana da aynısını dedi ama mesela bazı dosyalarda bu şekilde kontroller var işte isshopowner isacceopen gibi art arda ve ilk sıradaki gibi eklenmiş. ordaki ilk değer false dönmüyor mu şimdi? false dönüyorsa diğerlerini de okuyor. bilemedim. ya da acaba oradakiler o düzene uygun mu sıralanmış kontroller acaba??? bende merak ettim.Modern derleyiciler kodu nasıl yazarsan yaz optimize ederek derleyeceği için performans farklı muhtemelen olmaz. Fakat mantıken üstteki fonksiyon daha hızlı çalışır. Çünkü üstteki fonksiyonda mantıksal operatör "&&" kullanılmış. Yani "isStone" koşulu "false" döndürürse, "isEnemy" koşulu kontrol dahi edilmez.
ChatGPT diyor ki::If isStone() returns false, Snippet 1 performs 1 function call (isStone()) and returns immediately. If isStone() returns false, Snippet 2 also performs 1 function call (isStone()) and returns immediately. If isStone() returns true and isEnemy() returns false, both snippets perform 2 function calls (isStone() and isEnemy()). If isStone() returns true and isEnemy() returns true, both snippets again perform 2 function calls.
Dolayısıyla işlem gücünden tasarruf sağlanır. Yine de ilk fonksiyon daha okunaklı ve daha iyi bir yazım stili.
mantıksal ve işaretinde tüm değişkenler true dönerse ifade true döner diğer koşullarda hep false;chat gpt bana da aynısını dedi ama mesela bazı dosyalarda bu şekilde kontroller var işte isshopowner isacceopen gibi art arda ve ilk sıradaki gibi eklenmiş. ordaki ilk değer false dönmüyor mu şimdi? false dönüyorsa diğerlerini de okuyor. bilemedim. ya da acaba oradakiler o düzene uygun mu sıralanmış kontroller acaba??? bende merak ettim.
kontrol edicem kodları dışardayım şimdimantıksal ve işaretinde tüm değişkenler true dönerse ifade true döner diğer koşullarda hep false;
detaylı bilgi için:
Linkleri görebilmek için giriş yap veya kayıt ol.
Aslında iki yazım tarzında da, "isStone" false dönerse, "isEnemy" kontrol edilmez, fonksiyon kesilir. Ben biraz yanlış anlamışım CHatGPT'yi iki fonksiyon arasında performans farkı yok ancak okunurluk olarak ilki daha iyi.chat gpt bana da aynısını dedi ama mesela bazı dosyalarda bu şekilde kontroller var işte isshopowner isacceopen gibi art arda ve ilk sıradaki gibi eklenmiş. ordaki ilk değer false dönmüyor mu şimdi? false dönüyorsa diğerlerini de okuyor. bilemedim. ya da acaba oradakiler o düzene uygun mu sıralanmış kontroller acaba??? bende merak ettim.
sen doğru anlamışsın da ben mantığıma oturtamadımAslında iki yazım tarzında da, "isStone" false dönerse, "isEnemy" kontrol edilmez, fonksiyon kesilir. Ben biraz yanlış anlamışım CHatGPT'yi iki fonksiyon arasında performans farkı yok ancak okunurluk olarak ilki daha iyi.
if (isStone() && isEnemy())
{
specialAttack(); // Özel saldırıyı gerçekleştir
return;
}
if (isStone())
{
if (isEnemy())
{
specialAttack(); // Özel saldırıyı gerçekleştir
}
else
{
normalAttack(); // Normal saldırıyı gerçekleştir
}
}
// Eğer "ch" bir oyuncuysa VE loncası yoksa..
if(ch->IsPC() && !ch->GetGuild())
DAVET_GONDERILDI;
else
DAVET_GONDERILEMEDI_HATASI;
veya sadece return;
// Canavarlara ve npclere vb. zaten lonca daveti gönderemeyeceğimize göre neden hala IsPC() kontrolü yapıyoruz?
// ..oluşabilecek bugları %100 önlemek için.
if(OYUNCUNUN_PARASI > ITEM_FIYATI) // her şeyden önce: oyuncunun parası yeterli mi?
{
if(OYUNCUNUN_ENVANTERINDE_BOS_YER_VARSA) // Parası yeterli, peki envanterde boş yeri var mı?
{
SATIN_ALMA_ISLEMI_BASARILI
}
else
{
ENVANTERDE_YETER_ALAN_YOK_HATASI >>>
return;
}
}
else
{
SATIN_ALMAK_ICIN_YETERLI_PARA_YOK_HATASI >>>>
return;
}
if(OYUNCUNUN_PARASI > ITEM_FIYATI && OYUNCUNUN_ENVANTERINDE_BOS_YER_VARSA)
{
SATIN_ALMA_ISLEMI_BASARILI >>>>
}
else
{
SATIN_ALMA_BASARISIZ >>>> // Ama neden başarısız? Para mı yetersiz? yoksa envanter mi dolu? Bunları detaylandırmak önemli.
return;
}