Tiêu đề gốc: "Giới thiệu về Solidity Minimalist: 7. 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à cũng viết một bài "Giới thiệu về sự tối giản của sự vững chắc" cho người mới sử dụng ( Các chuyên gia lập trình có thể tìm thêm bài hướng dẫn khác), 1-3 bài giảng sẽ được cập nhật mỗi tuần.
Tất cả các mã đều là nguồn mở trên github: github.com/ AmazingAng/ WTFSolidity
Trong bài giảng này, chúng tôi sẽ giới thiệu luồng điều khiển trong độ rắn, sau đó nói về cách sử dụng độ rắn để thực hiện sắp xếp chèn (InsertionSort). tưởng chừng như đơn giản nhưng thực chất việc viết chương trình có lỗi lại rất dễ dàng.
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:
p>



Toán tử bậc ba là toán tử duy nhất vững chắc chấp nhận ba toán hạng, điều kiện quy tắc ? Biểu thức có điều kiện đúng: Một biểu thức có điều kiện là 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ó continue( Nhập ngay vòng lặp tiếp theo) và từ khóa break (nhảy ra khỏi vòng lặp hiện tại) có thể được sử dụng.
Viết ở phía trước: Hơn 90% người dân sử dụng độ vững chắc để viết Thuật toán chèn tất cả sẽ sai.
Bài toán được giải quyết bằng thuật toán sắp xếp là Tập hợp các số không có thứ tự, chẳng hạn như [2, 5, 3, 1], được sắp xếp theo thứ tự tăng dần. 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ơ đồ nguyên lý:

Sắp xếp chèn
Chúng ta có thể xem qua chèn đầu tiên Sắp xếp mã python:

Có một LỖI sau khi viết lại nó một cách chắc chắn!
Tổng cộng 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 nó thành mã vững chắc và chuyển đổi các hàm, biến, vòng lặp, v.v. cho phù hợp. Chỉ cần 9 dòng mã:

Sau đó, chúng ta đưa các thay đổi vào remix 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 chèn độ rắn" 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 độ rắn trên Internet đều sai, chẳng hạn như: Sắp xếp một cách chắc chắn mà không cần so sánh
Đã dành vài giờ trong Dapp -Với sự giúp đỡ của một người bạn trong cộng đồng Học tập, cuối cùng tôi đã tìm ra lỗi. 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:

Sau khi chạy Kết quả của:

Trong bài giảng này chúng tôi đã giới thiệu về luồng điều khiển trong Solidity và viết cách 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

