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 7: Đ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 sẽ giới thiệu luồng điều khiển trong Solidity và cách sử dụng Solidity để thực hiện sắp xếp chèn (InsertionSort).
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


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



vòng lặp for



vòng lặp while



vòng lặp do-while



Toán tử bậc ba


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.


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% người dân sử dụng độ vững chắc để viết Thuật toán chèn tất cả sẽ sai.


Sắp xếp chèn


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 


Mã Python


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


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


Đã 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:



Tóm tắt


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

举报 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