Tolong pilih kategori sesuai, jenis posting (pertanyaan atau bukan) dan sertakan tag/topik yang sesuai misal komputer, php, mysql, dll.
Promosi atau posting tidak pada tempatnya akan kami hapus.
Mencantumkan kode program di posting Anda, tolong ikuti aturan yang sesuai, baca http://diskusiweb.com/discussion/39204/aturan-cara-menyisipkan-kode-program-di-diskusiweb

Baca cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1

for atau while?

[ASK] kapan kita harus menggunakan for dan kapan kita harus menggunakan while? maksud nya dalam kondisi apa?





[moderator note]
Dipindah ke "Artikel & Tutorial Komputer"
Karena ini dasar pemrograman dan sering banyak yang bermain asumsi tanpa pengujian

Tanggapan

  • edited February 2015
    suka-suka :D

    ini cuma sebagian contoh, pake php, dan identik :

    echo '[1] ';$a=0;while($a<10){echo $a++;}echo '<br>';
    echo '[2] ';$a=0;while(true){echo $a++;if($a>=10) break;}echo '<br>';
    echo '[3] ';$a=0;while(print $a++){if($a>=10) break;}echo '<br>';
    echo '[4] ';for($a=0;true;){echo $a++;if($a>=10) break;}echo '<br>';
    echo '[5] ';for($a=0;print $a++;){if($a>=10) break;}echo '<br>';
    echo '[6] ';for($a=0;$a<10;$a++){echo $a;}echo '<br>';
    echo '[7] ';for($a=0;$a<10;print $a++);echo '<br>';
    echo '[8] ';$a=0;do{echo $a++;if($a>=10) break;}while(true);echo '<br>';
    echo '[9] ';$a=0;do{echo $a++;}while($a<10);echo '<br>';


    gw tulis 1 baris supaya keliatan beda panjang-pendek penulisannya
    itu juga bukan berarti yg pendek lebih baik

    echo '[1] ';$a=0;while($a<10){echo $a++;}echo '<br>';
    echo '[7] ';for($a=0;$a<10;print $a++);echo '<br>';


    beda panjangnya cuma 2 karakter
    dan asalnya dari penulisan "for" dan "while" yg emang beda 2 karakter
    sementara optimal itu ukurannya kecepatan proses, bukan panjang penulisan

    kalo gw coba kaya begini, dijalankan beberapa kali supaya perkiraan waktu lebih stabil

    <?php
    $c=10000;
    echo '[1] ';$s=microtime();$a=0;while($a<$c){echo $a++;}$e=microtime();echo '<br>Waktu proses : '.sprintf('%f',$e-$s).'<br>';
    echo '[2] ';$s=microtime();$a=0;while(true){echo $a++;if($a>=$c) break;}$e=microtime();echo '<br>Waktu proses : '.sprintf('%f',$e-$s).'<br>';
    echo '[3] ';$s=microtime();$a=0;while(print $a++){if($a>=$c) break;}$e=microtime();echo '<br>Waktu proses : '.sprintf('%f',$e-$s).'<br>';
    echo '[4] ';$s=microtime();for($a=0;true;){echo $a++;if($a>=$c) break;}$e=microtime();echo '<br>Waktu proses : '.sprintf('%f',$e-$s).'<br>';
    echo '[5] ';$s=microtime();for($a=0;print $a++;){if($a>=$c) break;}$e=microtime();echo '<br>Waktu proses : '.sprintf('%f',$e-$s).'<br>';
    echo '[6] ';$s=microtime();for($a=0;$a<$c;$a++){echo $a;}$e=microtime();echo '<br>Waktu proses : '.sprintf('%f',$e-$s).'<br>';
    echo '[7] ';$s=microtime();for($a=0;$a<$c;print $a++);$e=microtime();echo '<br>Waktu proses : '.sprintf('%f',$e-$s).'<br>';
    echo '[8] ';$s=microtime();$a=0;do{echo $a++;if($a>=$c) break;}while(true);$e=microtime();echo '<br>Waktu proses : '.sprintf('%f',$e-$s).'<br>';
    echo '[9] ';$s=microtime();$a=0;do{echo $a++;}while($a<$c);$e=microtime();echo '<br>Waktu proses : '.sprintf('%f',$e-$s).'<br>';
    ?>


    kira-kira spt ini hasil nya :

    [1] ... Waktu proses : 0.004658
    [2] ... Waktu proses : 0.005512
    [3] ... Waktu proses : 0.004912
    [4] ... Waktu proses : 0.006291
    [5] ... Waktu proses : 0.005756
    [6] ... Waktu proses : 0.005343
    [7] ... Waktu proses : 0.004720
    [8] ... Waktu proses : 0.005167
    [9] ... Waktu proses : 0.004346

    cara [9] yg paling cepat

    [1] dan [7], lebih cepat no [1]
    tidak selalu spt itu, bbrp kali refresh, bisa lebih cepat no [7]
    tapi tidak pernah lebih cepat dari no [9]

    padahal cara penulisan loop no [7] itu kagak biasa, cetak tulisan ada di dalam for()
    itu bentuk for() yg sudah dioptimasi sesuai dgn peruntukannya hanya utk sekedar cetak counter
    no [1] malah bentuk penulisan while() yg umum
    no [9] juga bentuk do ... while() yg umum

    penulisan for() yg umum ada di no [6]
    dan itu kagak pernah lebih cepat dari no [1], apalagi dibanding no [9]

    kemungkinan besar, banyak orang bakal ngomong :
    "kalo jumlah loop nya fix / tetap / atau sudah tertentu jumlahnya, pake for"

    tapi hasil test di atas ?
    do ... while ... malah lebih cepat

    elo boleh coba me-refresh berkali-kali
    elo juga boleh coba membolak-balik urutan, supaya yakin bahwa bukan karena urutan proses nya yg bikin proses lebih cepat atau lambat



    itu belum dibandingkan dgn while() dan do ... while() yg juga dioptimasi hanya utk cetak counter

    echo '[A] ';$s=microtime();$a=0;while((print $a++)*$a<$c);$e=microtime();echo '<br>Waktu proses : '.sprintf('%f',$e-$s).'<br>';
    echo '[B] ';$s=microtime();$a=0;do{}while((print $a++)*$a<$c);$e=microtime();echo '<br>Waktu proses : '.sprintf('%f',$e-$s).'<br>';


    while() [A] lebih cepat dari no [9]
    do ... while() [B] lebih cepat dari [A] dan [9]





    sebenarnya, lebih cenderung tergantung masalahnya
    pakai mana yg lebih efisien
    kagak bisa menyebut satu masalah baiknya pakai ini atau yg lain
    soalnya masalah itu berurut

    misal masalah A dan B berurut
    pilihan pemakaian metode X di titik A, bisa bikin ribet di titik B berikutnya
    padahal di aplikasi lain, model X yg sama dipake di titik A, bisa bikin alur lebih efisien

    dan juga tergantung bahasa pemrograman yg dipake
Sign In or Register to comment.