fall-through switch untuk mengeksekusi urutan langkah


9

Program saya perlu menjalankan urutan langkah dari awal hingga akhir. Tetapi berdasarkan input yang berbeda, titik awal akan bervariasi, misalnya, beberapa akan berjalan dari langkah pertama hingga akhir, beberapa akan berjalan dari langkah ke-2 sampai ke akhir, beberapa akan berjalan dari ke-3 ke ujung, dll.

Saya hanya perlu desain yang sederhana, saat ini saya menggunakan fall-through switch seperti ini:

switch (step) {
case 1:
     //do the 1st step
     //fall through, so no break here
case 2:
    //do the 2nd step
    //fall through
case 3:
    //do the 3rd step
    //fall through
...
}

Ini bekerja tetapi kode yang gagal selalu membuat saya tidak nyaman. Apakah ada cara yang lebih baik dan sederhana untuk melakukannya?


1
Anda tidak harus crosspost. Saya yakin pertanyaan Anda masuk akal di situs web ini, jadi jika saya adalah Anda, saya akan menghapus pertanyaan di Stack Overflow.
Vincent Savard

1
OK saya menghapusnya di SO dan memperbarui pertanyaan saya di sini juga. Terima kasih.
Qiulang

Apakah data yang diperlukan untuk setiap langkah sama? Bisakah Anda mengekstrak setiap langkah ke dalam fungsinya sendiri dengan argumen dan tipe pengembalian yang sama?
Greg Burghardt

tidak itu sebabnya solusi array mungkin tidak berlaku untuk kasus saya
Qiulang

Jawaban:


4

Bergantung pada bahasa yang Anda gunakan, Anda dapat membuat berbagai fungsi dan menggunakan stepsebagai titik awal untuk mengulanginya. Sesuatu seperti:

var functions = function[]
{
    step1,
    step2,
    step3,
    …
}

foreach (var index = step-1; index <= function.count; index++)
{
    functions[index]();
}

Terima kasih, saat ini saya menggunakan javascript tapi saya pikir solusi Anda juga berlaku untuk c / c ++. Terima kasih!
Qiulang

Ini akan menjadi solusi ideal, selama input dan output masing-masing fungsi adalah sama.
Greg Burghardt

4

Cara Anda melakukannya sangat baik dan sederhana; itulah tujuan dari kesalahan itu sejak awal. Jika itu membuat Anda lebih nyaman, Anda dapat menambahkan komentar yang menjelaskan apa yang Anda lakukan (sehingga orang lain tidak membutuhkan waktu setengah jam untuk memahami mengapa hal itu terjadi).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.