BTC
$96,000
5.73%
ETH
$3,521.91
3.97%
HTX
$0.{5}2273
5.23%
SOL
$198.17
3.05%
BNB
$710
3.05%
lang
简体中文
繁體中文
English
Tiếng Việt
한국어
日本語
ภาษาไทย
Türkçe
Trang chủ
AI AI
Tin nhanh
Bài viết
Sự kiện
BlockBeats Pro
Thêm
Thông tin tài chính
Chuyên đề
Hệ sinh thái chuỗi khối
Mục nhập
Podcast
Data
OPRR
Partnered With:

Giới thiệu tối giản về Solidity|Bài 10: Điều khiển luồng, sử dụng Solidity để thực hiện sắp xếp chèn

Đọc bài viết này mất 10 phút
Bài viết này giới thiệu luồng điều khiển trong Solidity và viết cách sắp xếp chèn bằng Solidity.
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


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  



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.


Sử dụng tính chắc chắn để thực hiện sắp xếp chèn


Viết phía trước:


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  


mã python


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



Có LỖI sau khi viết lại thành Solidity!


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


Sắp xếp chèn độ rắn chính xác


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:



Tóm tắt


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

举报 Báo lỗi/Báo cáo
Chọn thư viện
Thêm mới thư viện
Hủy
Hoàn thành
Thêm mới thư viện
Chỉ mình tôi có thể nhìn thấy
Công khai
Lưu
Báo lỗi/Báo cáo
Gửi