Konuyu görüntüle |
Yazar |
|
clairvoyant
Antalya
Kayıt: 05.05.2006 |
|
if (CONDITION) return true;
else return false;
Yukarıdaki gibi bir kod parçasında else teriminin optimizasyon ve tasarım açısından önemi nedir sizce? Bana else olmadığına kod daha optimize gibi görünüyor, fakat o zaman da algoritma tasarımı açısından güzel durmuyorumuş gibi geliyor. Tabii ki böyle tek bir if ifadesi için yorum yapmanın bir anlamı olduğunu düşünmüyorum ama daha komplex yapılarda bu konu bazen beni düşündürüyor.
Örneğin BOOL sonuç döndüren öyle bir fonksiyon yazıyorum ki, koddaki sonuç döndürmek için kurulmuş IF hiyerarşisindeki sadece tek bir yaprak TRUE döndürüyor. Diğer bütün yapraklarda "else return false" gibi bir ifade kullanmaktansa, IF hiyerarşisi sona erdikten sonra tek bir "return false" gibi bir ifadeyi kullanmayı tercih ediyorum. Bunun makine kodu miktarını ve yorumlayıcılarda (kaynak kod miktarı azaldığı için) da parsing zamanını azaltabileceğini tahmin ediyorum (bu tahminlerim gerçek dışı da olabilir). Ama dediğim gibi tasarım açısından da güzelliği bozuyormuş gibi geliyor.
Bu konudaki yorumlarınız nelerdir?
Let`s make this world a better place to live !
|
|
Yazar |
|
orhan
istanbul
admin
Kayıt: 17.11.2005 |
|
java için konuşursak
1.
| if (..){
return..
}else{
return..
} |
2.
| if (..)
return..
else
return..
|
2. durum 1. durumdan daha az baytcode üretir.
| boolean x=(..)?true:false |
buda en az baytkodu üretir.
return olayına gelince eğer arada hata yakalama yada değer kontrolu filan yapmayacaksan. doğrudan return demekte fayda var.
N/A
|
|
Yazar |
|
ridaniye
antalya
Kayıt: 26.04.2006 |
|
Bu konuda benim de biraz fikrim var.
Dedigin durum icin net bir şey soylenemez. Mesela :
if(x>10) return 0;
if(x>5) return 1;
if(x>0) return 2;
return 3;
gibi bir fonksiyon da tabii ki "else" kullanmak mantıksız. Hız acısından ne kadar fark eder bilmiyorum ama kodun daha anlaşılır olmasını saglar bence. Bu da bakım, onarim çalışmalarını kolaylaştırır.
Ote yandan,
if(cnd1)
{
if(cnd2)
{
...
}
else /* if(cnd2) */
{
...
}
}
else /* if(cnd1) */
{
if(cnd2)
{
...
}
else /* if(cnd2) */
{
...
}
}
seklinde bir kod cogu zaman daha faydalı olabilir. Ici bos bile olsa else ifadelerini yazarsak, butun durumlara hakim olabiliriz. Ayrica sekilde goruldugu gibi "else" ifadelerinin yanina hangi "/* if(cnd2) */" seklinde yorumlar yazarak daha anlasilir kod yazilabilir.
Bir diger konu ise, kosulu kontrol etme oranini azaltmaya yonelik.
mesela:
if(a<8||a%4==0)
{
}
"a" 0-9 arasi deger alan bir degisken olarak dusunelim. bu durumda a nin 8 den dusuk olma ihtimali %80, a%4==0 ihtimali %30. Ve ya isleminde dogru kosulu bulunca diger kosullari kontrol etmez. Yani a<8 dogru ise diger kosula bakmaz. Boyle bir durumda kosullari, dgoru olma ihtimaline gore buyukten kucuge siralarsak daha az kontrol yaptırabiliriz. "Ve" isleminde de tam tersi gecerli tabii.
Ve son olarak Adaniak while(1!=2) yerine while(1) yazsa, bir islem tasarrufu yapılabilir :)
Bu ne kadar faydalidir tartisilir. Artik kac milisaniye hızlı calisir programlar bilemiyorum. Ama fikir fikirdir :)
|
|
Yazar |
|
ali
istanbul
admin
Kayıt: 04.01.2006 |
|
clairvoyant yazdi | if (CONDITION) return true;
else return false;
Yukarıdaki gibi bir kod parçasında else teriminin optimizasyon ve tasarım açısından önemi nedir sizce? Bana else olmadığına kod daha optimize gibi görünüyor, fakat o zaman da algoritma tasarımı açısından güzel durmuyorumuş gibi geliyor. Tabii ki böyle tek bir if ifadesi için yorum yapmanın bir anlamı olduğunu düşünmüyorum ama daha komplex yapılarda bu konu bazen beni düşündürüyor.
Örneğin BOOL sonuç döndüren öyle bir fonksiyon yazıyorum ki, koddaki sonuç döndürmek için kurulmuş IF hiyerarşisindeki sadece tek bir yaprak TRUE döndürüyor. Diğer bütün yapraklarda "else return false" gibi bir ifade kullanmaktansa, IF hiyerarşisi sona erdikten sonra tek bir "return false" gibi bir ifadeyi kullanmayı tercih ediyorum. Bunun makine kodu miktarını ve yorumlayıcılarda (kaynak kod miktarı azaldığı için) da parsing zamanını azaltabileceğini tahmin ediyorum (bu tahminlerim gerçek dışı da olabilir). Ama dediğim gibi tasarım açısından da güzelliği bozuyormuş gibi geliyor.
Bu konudaki yorumlarınız nelerdir? |
Öncelikle şöyle başlamak istiyorum, bir kodun okunaiblirliğimi daha önemlidir yoksa hızlı çalışması mı? bu sorunun cevabı her daim okunabilirlikdir(istisnayi durumlar hariç tabi)
yazılan her if kodu bir kademe daha çatalandırır, işlemciye ek külfet getirir. ama illa if kullanmak gerekirse
if( x == 1){
return true;
} else {
retrun false;
}
peki buna benzer bir durumda
if( x == 1){
return true;
}
retrun false;
desydik ne olurdu: ife girerse ilk return girmezse ikinci return çalışırdı. ilk kodla hiç bir farkı yok ama okunabilirlik arttı. peki bir adaım daha ilerletip şu şekilde yapsaydım
boolean sonuc = false
if( x == 1 ){
sonuc = true;
}
retrun sonuc;
büyük finalde elimizde okunabilirliği artmış, daha hızlı ve stabil bir kod olur
free software is a matter of liberty, not price. to understand the concept, you should think of free speech, not free beer.
|
|
Yazar |
|
tarikkranda
Kayıt: 07.01.2006 |
|
ali yazdi |
boolean sonuc = false
if( x == 1 ){
sonuc = true;
}
retrun sonuc;
büyük finalde elimizde okunabilirliği artmış, daha hızlı ve stabil bir kod olur
|
Okunabillirlik icin birsey diyemem, ama hız konusunda bu en yavas olanlardan birisidir bence:)) Stabiliteyse, digerlerinden bir fark yok, sadece extra alan tahsisatı var:)) Orhanın son yazdıgı ? operatoru tekli dondurumlerde tercih edilebilir ama bence buraya en cok yakısan:
if( x == 1 )
return true;
retrun false;
Ben boyle yazardım, gerisini de dusunmem. Git islemci al, ram al derdim:P
|
|
Yazar |
|
kellad
istanbul
Kayıt: 21.01.2006 |
|
Ben de bu şekilde yazmayı tercih ederim.
return (x == 1) ? x : y;
if( x == 1 ) return x;
_ _ return y;
Bu kod ise hem okunabilir hem hızlı oluyor.
Yok ben true/false döndüreceğim diyorsan o zaman şöyle yaparım.
return (x == 1);
Ama ben doğruysa yanlış, yanlışsa doğru döndürecektim dersen de şöyle olur.
return !(x == 1);
araya if sokmaya gerek yok.
Decompiling the code of universe.
Listening the cosmic background radiation.
Swimming in Inter Stellar Medium.
|
|
Yazar |
|
tuuba
Bursa
Kayıt: 22.01.2007 |
|
tarikkranda yazdi |
if( x == 1 )
return true;
retrun false;
Ben boyle yazardım, gerisini de dusunmem. Git islemci al, ram al derdim:P
|
Bence de en doğrusu
Ama merak ettiğim bişey var,sırf bu tarz verimlilik araştırmalarıyla uğraşan birileri var mıdır?Özellikle C gibi diller için.Ya da verimlilik ve okunabilirliğin ikisini de göz önüne alarak bu tarz bazı kalıplar için en doğru yazım şeklini standartlaştıranlar?????????
|
|
Yazar |
|
onur
Two Story Town
Kayıt: 14.01.2006 |
|
Google da
"application performance tricks"
"web application performance tricks"
"application performance tips & tricks"
seklinde aratirsan birseyler bulabiliyorsun.
|
|
Yazar |
|
ali
istanbul
admin
Kayıt: 04.01.2006 |
|
.file "1.c"
.section .text
.p2align 4,,15
.globl _f
_f:
pushl %ebp
movl %esp, %ebp
cmpl $1, 8(%ebp)
sete %al
andl $255, %eax
popl %ebp
ret
.p2align 4,,15
.globl _main
_main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.ident "GCC: (GNU) 4.2.1"
optimizasyonu açık bırakınca ikisinde de aynı kod üretilir
tartışmaya gerek yok. istediğiniz gibi yazın derleyici gene kafasına göre çeviriyor, sonuc çoğunlukla aynı oluyor.
free software is a matter of liberty, not price. to understand the concept, you should think of free speech, not free beer.
|
|
Yazar |
|
orhan
istanbul
admin
Kayıt: 17.11.2005 |
|
ali yazdi |
optimizasyonu açık bırakınca ikisinde de aynı kod üretilir
tartışmaya gerek yok. istediğiniz gibi yazın derleyici gene kafasına göre çeviriyor, sonuc çoğunlukla aynı oluyor. |
hacim elinde borland c compiler yada M$ VS varsa onla da compile edebilir misin?
N/A
|
|
Yazar |
|
clairvoyant
Antalya
Kayıt: 05.05.2006 |
|
tuuba yazdi | Ama merak ettiğim bişey var,sırf bu tarz verimlilik araştırmalarıyla uğraşan birileri var mıdır?Özellikle C gibi diller için.Ya da verimlilik ve okunabilirliğin ikisini de göz önüne alarak bu tarz bazı kalıplar için en doğru yazım şeklini standartlaştıranlar????????? |
Ben mesela.
Benim bakış açıma göre yazdığın kod üzerinde yapabileceğin bir optimizasyon varsa yapacaksın.
Yorumlar için teşekkürler arkadaşlar. Güzel şeyler çıkıyor gerçekten. Onur'un dediği gibi google amcaya da başvurabilirdik ama google amcada böyle şeyler aratınca neden bizim site de o listede yer almasın di mi. :D
Let`s make this world a better place to live !
|
|
Yazar |
|
ali
istanbul
admin
Kayıt: 04.01.2006 |
|
orhan yazdi |
hacim elinde borland c compiler yada M$ VS varsa onla da compile edebilir misin? |
Borlandda aynı sonucu veriyo. MS de denemedim :)
işin özü şu, çok if kullanmayacaksın, kullandın diyelim çok return yazmayacaksın. yazarsan nolur hiç bişey olmaz, yazmassan nolur hataları daha kolay görürsün kod güzel olur. optimizasyonu derleyici yapıyor nasıl olsa yaz yazabildiğin kadar kardeşim
free software is a matter of liberty, not price. to understand the concept, you should think of free speech, not free beer.
|
|
Yazar |
|
orhan
istanbul
admin
Kayıt: 17.11.2005 |
|
ali yazdi |
işin özü şu, çok if kullanmayacaksın, kullandın diyelim çok return yazmayacaksın. yazarsan nolur hiç bişey olmaz, yazmassan nolur hataları daha kolay görürsün kod güzel olur. optimizasyonu derleyici yapıyor nasıl olsa yaz yazabildiğin kadar kardeşim |
derlerki kodunda ne kadar if varsa okadar acemisindir. :)
birde arkanızdan küfredilmesini istemiyorsanız koda 1-2 satır comment koyunuz :)
N/A
|
|
|
|
-
Del.icio.us
-
Digg
-
Facebook
-
Furl
-
Google
-
Blink
-
Simpy
-
Spurl
-
Y! MyWeb
|
|
| | | | | | | | | | | | |