Kalo di C banyak orang yang terjebak bikin looping begini

for (int i=0;i<strlen(mystring);i++) { ... }

Bisa jadi O(N^2) karena strlen-nya O(N). Kalo di situ sih practicenya yang
benar

for (int i=0,n=strlen(mystring);i<n;i++) { ... }

Kalau di Java, mestinya sih kalau container yang dipakai memang usernya
banyakan looping, sudah didesain supaya fungsi size() / rowCount() / etc.
nya optimal untuk pemakaian yang begitu, jadi gak perlu dikhawatirkan. Kalo
mau lebih aman lagi pake iterator sekalian.

My opinion:
Ada bagusnya kalau dibiasakan coding practice yang baik, selama tidak
mengganggu readability kan tidak ada ruginya.

Tapi jangan overly obsessed juga, kalo datanya kecil, gak perlu dikit2
dioptimize, nanti malah buat bug dimana2, gak worthed optimizenya. Most of
the implementation details macem "pake getter atau pake akses ke field",
"private atau public lebih cepat diaksesnya?" gak relevan untuk Java, siapa
tau juga JVM versi berikutnya punya performance characteristic beda.

Coding practice, misal:
Banyak programmer yang kalau nulis comparison string dengan constant begini
if ("blah".equals(myString)) ...
rather than
if (myString.equals("blah")) ...
Tanya kenapa... :-)

-Kurniady

2010/5/27 Samuel Franklyn <sfrank...@gmail.com>

>
>
> On 5/27/2010 3:08 PM, Niksen Harjanto wrote:
> > rekan2 saya mau tanya, diantara 2 statement looping ini, mana yang
> > lebih baik, alasan teknisnya kenapa?
> >
> > Mis saya punya JTable, mau dilooping untuk baca datanya.
> >
> > Cara 1 (cara yang simple) :
> >
> > int x;
> > for (x=0; x<table.getRowCount(); x++) {
> > bla bla bla
> > }
> >
> > Cara 2 (IMHO lebih efisen) :
> >
> > int x;
> > int y;
> > y = table.getRowCount();
> > for (x=0; x<y; x++) {
> > bla bla bla
> > }
> >
> > Saya milih nomor 2 karena takutnya java selalu mengecek apa nilai x<
> > table.getRowCount(). Soalnya di dalem function getRowCount pasti ada
> > banyak statement untuk dapetin jumlah row, yang akan dieksekusi
> > terus2an selama looping. Sedang no 2, function getRowCount() cuma
> > dieksekusi 1x, trus nanti yang dibandingin cuma variable int dengan
> > variable int.
> >
> >
> > bener ga sih analisa gw?
> >
>
> Nggak benar. Kecuali lu sudah baca source code dari getRowCount.
> Bisa saja implementasi dari getRowCount menggunakan cache.
> Kalau implementasinya menggunakan cache maka overheadnya cuma
> method call overhead saja dan sangat kecil.
>
> Niksen sekedar nasihat. Pertanyaan kamu menunjukkan kamu
> terlalu terobsesi dengan kecepatan. Ini obsesi yang berbahaya.
> Percaya deh lama-lama kamu akan ketemu batunya dan menyesali
> obsesi kamu.
>
> Donald Knuth salah satu empu para programmer bilang begini:
>
> We should forget about small efficiencies, say about 97% of the time:
> premature optimization is the root of all evil
>
> http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize
>
>  
>

Kirim email ke