Tiêu đề gốc: " Giới thiệu tối thiểu về Solidity: 10. Kiểm soát luồng, sử dụng độ rắn để thực hiện sắp xếp chèn 》
Tác giả gốc: 0xAA
Gần đây tôi đang học lại sự vững chắc, củng cố các chi tiết và viết một "Chủ nghĩa tối giản vững chắc ""Bắt đầu" dành cho người mới học (chuyên gia lập trình có thể tìm bài hướng dẫn khác), với 1-3 bài giảng được cập nhật mỗi tuần.
Tất cả mã và hướng dẫn đều là nguồn mở trên github: github.com/AmazingAng/WTFSolidity
Ở đây Trong bài giảng đầu tiên, chúng tôi sẽ giới thiệu luồng điều khiển trong Solidity, sau đó nói về cách sử dụng Solidity để thực hiện sắp xếp chèn (InsertionSort), một chương trình nhìn có vẻ đơn giản nhưng thực tế lại rất dễ viết lỗi.
Luồng điều khiển của Solidity tương tự như các ngôn ngữ khác, chủ yếu bao gồm những điều sau:
if-else

cho vòng lặp

vòng lặp while

p>
vòng lặp do-while

Toán tử ba ngôi
Toán tử ba ngôi là toán tử duy nhất vững chắc chấp nhận ba toán hạng. biểu thức có điều kiện sai. Toán tử này thường được sử dụng làm phím tắt cho câu lệnh if.

Ngoài ra còn có các từ khóa continue (vào ngay vòng lặp tiếp theo) và break (nhảy ra khỏi vòng lặp hiện tại) có thể được sử dụng.
Hơn 90% mọi người sẽ mắc lỗi khi viết thuật toán chèn bằng độ vững chắc. Sắp xếp chèn
Vấn đề được giải quyết bằng thuật toán sắp xếp là sắp xếp một nhóm số không có thứ tự, chẳng hạn như [2, 5, 3, 1], từ nhỏ đến lớn cùng một lúc. . Insertion Sort là thuật toán sắp xếp đơn giản nhất và cũng là thuật toán đầu tiên được nhiều người tìm hiểu. Ý tưởng rất đơn giản, so sánh từng số với số đứng trước, nếu nhỏ hơn số đứng trước thì đổi chỗ. Sơ đồ:

Chèn Sắp xếp
Trước tiên chúng ta có thể xem xét vấn đề về sắp xếp chèn Mã:

Tổng cộng có 8 dòng mã python có thể hoàn thành việc sắp xếp chèn, rất đơn giản. Sau đó, chúng tôi viết lại thành mã vững chắc và chuyển đổi các hàm, biến, vòng lặp, v.v. theo đó, chỉ cần 9 dòng mã:

Sau đó, chúng ta đưa các thay đổi vào bản phối lại và chạy, nhập [2, 5, 3, 1]. BÙM! Có một lỗi! Sau khi sửa đổi một thời gian dài, tôi không thể tìm thấy lỗi. Tôi lên Google tìm kiếm "sắp xếp Solidity Insert" và sau đó phát hiện ra rằng các hướng dẫn về thuật toán chèn được viết bằng Solidity trên Internet đều sai, chẳng hạn như: Sắp xếp trong Solidity mà không so sánh
Tôi phải mất vài giờ và với sự giúp đỡ của một người bạn trong Dapp- Cộng đồng học tập, cuối cùng tôi đã tìm ra lỗi ở đâu. Loại biến được sử dụng phổ biến nhất trong Solidity là uint, là số nguyên dương. Nếu nhận được giá trị âm, lỗi tràn sẽ được báo cáo. Trong thuật toán chèn, biến j có thể nhận -1, gây ra lỗi.
Ở đây, chúng ta cần thêm 1 vào j để nó không thể nhận giá trị âm. Mã đúng:

Kết quả sau khi chạy:

Trong bài giảng này, chúng tôi đã giới thiệu luồng điều khiển trong Solidity và viết phép sắp xếp chèn sử dụng Solidity. Nó có vẻ đơn giản, nhưng nó thực sự rất khó khăn. Đây là sự vững chắc, có rất nhiều cạm bẫy, mỗi tháng các dự án thiệt hại hàng chục, thậm chí hàng trăm triệu USD vì những lỗi nhỏ này. Chỉ bằng cách nắm vững những điều cơ bản và thực hành liên tục, bạn mới có thể viết mã vững chắc hơn.
Liên kết gốc
Chào mừng bạn tham gia cộng đồng chính thức của BlockBeats:
Nhóm Telegram đăng ký: https://t.me/theblockbeats
Nhóm Telegram thảo luận: https://t.me/BlockBeats_App
Tài khoản Twitter chính thức: https://twitter.com/BlockBeatsAsia
