Nghiên cứu câu lệnh Goto.Xin chào các bạn GPE!
Có cách nào bỏ qua dòng Code ở dưới và đi thẳng đến dòng Code được chỉ định hay không?
View attachment 301698
Xin các bạn chỉ giúp
Xin cảm ơn!
Mỗi sub có một cái tên đúng không? Vậy nên nó sẽ có kiểu này:Hình như lệnh Goto chỉ trong phạm vi trong một Sub thôi. Mình muốn nó chạy thẳng sang Sub khác cơ
Public IsGoto As Boolean
_________
Sub abc()
...
...
IsGoto = True
Call xyz
...
End Sub
_________
Sub xyz()
If IsGoto Then Goto BarClub
...
...
BarClub:
' Do Something
...
End Sub
Sub abc()
...
...
Call xyz True
...
End Sub
_________
Sub xyz( IsGoto As Boolean)
If IsGoto Then Goto BarClub
...
...
BarClub:
' Do Something
...
End Sub
Sau khi call xyz rồi thì biến kia có cần chỉnh lại?Dùng 1 biến public Yes/No hoặc True/ False
...
Không nên dùng tham số. Tự dưng đem đổi chữ ký của hàm sẽ làm động đến nhiều hàm khác cần gọi nó.Hoặc là dùng tham số truyền, không cần biến Public
...
Dễ mà dưới cái Call XYZ thì thêm dòng Exit SubSau khi call xyz rồi thì biến kia có cần chỉnh lại?
Không nên dùng tham số. Tự dưng đem đổi chữ ký của hàm sẽ làm động đến nhiều hàm khác cần gọi nó.
Cách tốt hơn hết là viết một hàm trung gian, lấy tham số và gọi hàm cần thiết
Sub GoiXYZ(Optional tkn As Long = 0)
Dim SvNhayTumLum As Long
SvNhayTumLum = NhayTumLum ' NhayTumLum là biến toàn cục
NhayTumLum = tkn
xyz
NhayTumLum = SvNhayTumLum
' sau khi chạy xong, trả nó về vị trí cũ
End Sub
Bên trong sub xyz
Sub xyz(...)
On NhayTumLum Goto ViTri1 [, Vitri 2, Vitri3,...]
...
Vitri1:
...
End Sub
Vói code này, bất cứ hàm nào cũng có thể gọi xyz qua GoiXYZ, và muốn trao cái token để nhảy đi đâu tùy ý. Nếu token là 0 thì là nhảy dến dòng kế tiếp.
Lưu ý:
Cái mà thớt đòi hỏi là loại lập trình đi ngược lại nguyên tắc của lập trình cấu trúc (structured).
Vả lại, lệnh Goto là căn bản của code mỳ Ý (spaghetti code)
Tất cả những gì đặt thêm đều phải đi kèm với cách gỡ.
Vì đi ngược nguyên tắc cho nên nó có rất nhiều ổ voi. Chạy xe Merc S 350 sẽ gãy càng.
Dùng kỹ thuật re-structure code là cách lắp ổ voi.
Mục đích làm gì mới quan trọngXin chào các bạn GPE!
Có cách nào bỏ qua dòng Code ở dưới và đi thẳng đến dòng Code được chỉ định hay không?
View attachment 301698
Xin các bạn chỉ giúp
Xin cảm ơn!
Mục đích thì ngoài tầm hiểu biết của chúng ta rồi. Theo tôi hiểu thì có người từng tuyên bố rằng đây là project viết sẵn cho 10 năm tới.Mục đích làm gì mới quan trọng
Còn chế thì kiểu gì cũng làm được, nhưng hậu quả thì khó lường, và chính ta có khi lại bằng bẫy tự giăng ra
Trường hợp dùng biến Public thì mỗi khi có bất kỳ sub nào cần gọi tới Sub xyz đều phải gán giá trị cho biến IsGoto trước khi gọi.Sau khi call xyz rồi thì biến kia có cần chỉnh lại?
Nhiều hàm gọi thì mỗi hàm khi gọi đều phải truyền giá trị True/ FalseKhông nên dùng tham số. Tự dưng đem đổi chữ ký của hàm sẽ làm động đến nhiều hàm khác cần gọi nó.
Subcon()
Do Something
End Sub
_____________
Sub abc()
...
...
Call SubCon
...
End Sub
_________
Sub xyz( )
...
...
Call SubCon
End Sub
Điểm tôi nói trên là bao cả trường hợp có nhiều Sub's gọi xyz.Trường hợp dùng biến Public thì mỗi khi có bất kỳ sub nào cần gọi tới Sub xyz đều phải gán giá trị cho biến IsGoto trước khi gọi.
Ai biết trước đó IsGoTo là cái gì?Nếu sub xyz có trường hợp tự thân chạy thì phải trả IsGoto về False ngay sau cái nhãn BarClub
...
Gọi sub con là đúng với truyền thống structured programming....
Nhiều hàm gọi thì mỗi hàm khi gọi đều phải truyền giá trị True/ False
--------------
Mặc dù vậy, theo tôi thì không xài Label rất khó kiểm soát đối với người mới học. Tôi sẽ tạo 1 Sub con mang nội dung của các câu lệnh Do Something.
...
Nhiều cái chưa biết lắm, nên tôi còn không chắc kiểm soát label có đưa câu lệnh Exit Sub vào hay khôngAi biết trước đó IsGoTo là cái gì?
Tạo sub con tức là lập trình cấu trúc....
Kết luận là tạo sub con khỏi đau đầu.
Tôi mặc kệ việc thớt muốn. Tôi (và có lẽ cả anh) đang mở rộng vấn đề và cách xử lý vấn đề theo chuẩn lập trình chính thống, không làm theo cách mà bản thân không hiểu rõ cách làm và tác hại. Những ai muốn học hỏi mà đọc qua bài của anh có lẽ sẽ hiểu hơn về lý thuyết, đọc bài của tôi sẽ thấy cách xử lý đơn giản.Cái thớt muốn là "lập trình phi cấu trúc".