chuyển đổi thông qua để thực hiện một chuỗi các bước


9

Chương trình của tôi cần thực hiện một chuỗi các bước từ đầu đến cuối. Nhưng dựa trên đầu vào khác nhau, điểm bắt đầu sẽ khác nhau, ví dụ: một số sẽ chạy từ bước đầu tiên đến kết thúc, một số sẽ chạy từ bước 2 đến hết, một số sẽ chạy từ thứ 3 đến cuối, v.v.

Tôi chỉ cần một thiết kế đơn giản, hiện tại tôi sử dụng công tắc chuyển đổi như thế này:

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
...
}

Nó hoạt động nhưng mã thông qua luôn làm tôi khó chịu. Có cách nào tốt hơn và đơn giản để làm điều đó?


1
Bạn không nên vượt qua. Tôi tin rằng câu hỏi của bạn có ý nghĩa trên trang web này, vì vậy nếu tôi là bạn, tôi sẽ xóa câu hỏi trên Stack Overflow.
Vincent Savard

1
OK tôi đã xóa nó trên SO và cập nhật câu hỏi của tôi ở đây là tốt. Cảm ơn.
Qiulang

Là dữ liệu cần thiết cho mỗi bước giống nhau? Bạn có thể trích xuất từng bước vào hàm riêng của nó với cùng một đối số và kiểu trả về không?
Greg Burghardt

không, đó là lý do tại sao giải pháp mảng có thể không áp dụng cho trường hợp của tôi
Qiulang

Câu trả lời:


4

Tùy thuộc vào ngôn ngữ bạn đang sử dụng, bạn có thể tạo một mảng các hàm và sử dụng steplàm điểm bắt đầu để lặp lại chúng. Cái gì đó như:

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

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

Cảm ơn, hiện tại tôi đang sử dụng javascript nhưng tôi nghĩ giải pháp của bạn cũng áp dụng cho c / c ++. Cảm ơn!
Qiulang

Đây sẽ là giải pháp lý tưởng, miễn là đầu vào và đầu ra của mỗi chức năng là như nhau.
Greg Burghardt

4

Cách bạn đang làm là hoàn toàn tốt và đơn giản; Đó là những gì dự phòng cho lần đầu tiên. Nếu điều đó làm bạn thoải mái hơn, bạn có thể thêm một bình luận giải thích những gì bạn đang làm (để người khác không mất nửa giờ để hiểu tại sao lại như vậy).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.