X. Xem xét tranh luận về Goto bằng các khái niệm Mâu Thuẫn của TRIZ:
Nguyên tắc: Nguyên tắc tách riêng
Kiểm tra 2 yêu cầu trái ngược nhau xem khi nào, ở đâu, dưới điều kiện nào các yêu cầu được áp dụng và tìm ra sự khác biệt trong các yêu cầu này.
Nếu có khác biệt, thiết lập 2 giải pháp riêng biệt thỏa mãn đầy đủ mỗi yêu cầu, rồi tìm cách sử dụng cả 2 giải pháp kết hợp với nhau.
Loại trừ mâu thuẫn chỉ có thể đạt được bằng cách chia sẻ một số mục tiêu chung nào đó ở cấp độ cao hơn cấp độ mâu thuẫn. Mục tiêu chung trong tình huống này là: Làm cho phương thức lập trình dễ hiểu và hầu như không lỗi. Hai phía tranh luận có thể trả lời câu hỏi của Nguyên tắc Tách Riêng một cách logic hơn như sau:
− Các câu lệnh Goto nên bị loại bỏ bằng cách thay thế chúng bằng các cấu trúc điều khiển thích hợp đảm bảo các khối chương trình lồng nhau một cách đúng đắn. Nen tránh các câu lệnh Goto làm cho các khối chương trình lồng nhau nhưng bị lệch đối xứng.
− Các chức năng của lệnh Goto thể hiện cấu trúc rẽ đa nhánh, cấu trúc lặp với điều kiện được xét sau, cấu trúc thoát khỏi vòng lặp,... sẽ tìm thấy các cấu trúc đúng đắn theo phương thức lập trình mới.
Hình 13: Một đoạn chương trình lồng nhau nhưng không đối xứng và nên tránh
Tới giai đoạn này, giải pháp sau đây được hình thành và xem như sự nhất trí trong cộng đồng phần mềm: trong lập trình cấu trúc, bốn cấu trúc điều khiển được thêm vào ba cấu trúc gốc. Lệnh Goto sẽ bị loại bỏ hoàn toàn bằng cách thay thế bằng các cấu trúc này. Và đây là giải pháp cuối cùng đối với mâu thuẫn Goto và không Goto theo quan điểm của TRIZ:
− Đề xuất ban đầu của Lập trình cấu trúc với chỉ 3 cấu trúc điều khiển đơn giản là chưa đủ
− Lập trình cấu trúc, một nguyên tắc chỉ đạo quan trọng trong khoa học máy tính ngày nay, thường có 7 cấu trúc điều khiển.
Các ngôn ngữ lập trình hiện đại được thiết kế sau này không có câu lệnh Goto và giới hạn các cấu trúc điều khiển về mặt ngữ pháp để ngăn các cấu trúc bất đối xứng. Do đó, các nhà lập trình gần đây có thể tận hưởng nguyên tắc của lập trình cấu trúc mà không phải chú ý đến nó. Lập trình cấu trúc khuyến khích và đảm bảo cấu trúc cây trong sơ đồ phân cấp các khối thủ tục trong mỗi chương trình. Vậy có cách nào cho phép các khối thủ tục chồng lấn lên nhau hay không ? Câu trả lời là có. Các lời gọi hàm là cách thức để cho phép điều này. Vì vậy ta nói việc chia nhỏ thành các module phần mềm là một chiến lược để giữ sự
đơn giản hóa bên trong các module, đồng thời giữ được sự linh hoạt và dễ dàng tráo đổi các module.
Đề xuất về Lập trình cấu trúc có tác động mạnh mẽ trong cộng đồng phần mềm thời bấy giờ vì nó tránh sử dụng câu lệnh Goto, thứ mà người ta nghĩ là không thể thiếu được trong lập trình. Thế nhưng, đề xuất ban đầu về 3 cấu trúc điều khiển đơn giản sau đó được nhận thấy là chưa đầy đủ để thay thế cho Goto. Vậy thì nó đã đóng vai trò gì trong lịch sử kỹ thuật phần mềm ? Câu hỏi này gợi nhắc đến một nguyên tắc sáng tạo TRIZ: