Euphoria - Kiểm soát luồng
Luồng thực thi chương trình đề cập đến thứ tự mà các câu lệnh chương trình được thực thi. Theo mặc định, các câu lệnh được thực thi lần lượt.
Tuy nhiên; nhiều lần thứ tự thực hiện cần được thay đổi so với thứ tự mặc định để hoàn thành nhiệm vụ.
Euphoria có một số câu lệnh điều khiển luồng mà bạn có thể sử dụng để sắp xếp thứ tự thực thi của các câu lệnh.
Các lối ra tuyên bố
Thoát khỏi một vòng lặp được thực hiện với từ khóa exit. Điều này làm cho luồng ngay lập tức rời khỏi vòng lặp hiện tại và bắt đầu lại với câu lệnh đầu tiên sau khi kết thúc vòng lặp.
Cú pháp
Cú pháp của một câu lệnh thoát như sau:
exit [ "Label Name" ] [Number]
Các exit câu lệnh kết thúc vòng lặp mới nhất và trong cùng cho đến khi tên hoặc số nhãn tùy chọn được chỉ định.
Một dạng đặc biệt của exit N Là exit 0. Điều này để lại tất cả các cấp của vòng lặp, bất kể độ sâu. Kiểm soát tiếp tục sau khối vòng lặp ngoài cùng. Tương tự như vậy, lối ra -1 thoát khỏi vòng lặp ngoài cùng thứ hai, v.v.
Thí dụ
#!/home/euphoria-4.0b2/bin/eui
integer b
for a = 1 to 16 do
printf(1, "value of a %d\n", a)
if a = 10 then
b = a
exit
end if
end for
printf(1, "value of b %d\n", b)
Điều này tạo ra kết quả sau:
value of a 1
value of a 2
value of a 3
value of a 4
value of a 5
value of a 6
value of a 7
value of a 8
value of a 9
value of a 10
value of b 10
Các phá vỡ tuyên bố
Các break tuyên bố hoạt động chính xác như exit câu lệnh, nhưng áp dụng cho câu lệnh if hoặc câu lệnh switch hơn là cho bất kỳ loại câu lệnh lặp nào.
Cú pháp
Cú pháp của câu lệnh break như sau:
break [ "Label Name" ] [Number]
Các break câu lệnh kết thúc khối if hoặc switch mới nhất và trong cùng cho đến khi tên hoặc số nhãn tùy chọn được chỉ định.
Một dạng đặc biệt của break N Là break 0. Điều này để lại khối if hoặc switch bên ngoài nhất, bất kể độ sâu. Kiểm soát tiếp tục sau khối ngoài cùng. Tương tự, ngắt -1 ngắt khối if hoặc switch ngoài cùng thứ hai, v.v.
Thí dụ
#!/home/euphoria-4.0b2/bin/eui
integer a, b
sequence s = {'E','u', 'p'}
if s[1] = 'E' then
a = 3
if s[2] = 'u' then
b = 1
if s[3] = 'p' then
break 0 -- leave topmost if block
end if
a = 2
else
b = 4
end if
else
a = 0
b = 0
end if
printf(1, "value of a %d\n", a)
printf(1, "value of b %d\n", b)
Điều này tạo ra kết quả sau:
value of a 3
value of b 1
Các tiếp tục tuyên bố
Các continue câu lệnh tiếp tục thực hiện vòng lặp mà nó áp dụng bằng cách chuyển sang lần lặp tiếp theo và bỏ qua phần còn lại của lần lặp.
Đến lần lặp tiếp theo có nghĩa là kiểm tra chỉ số biến điều kiện và kiểm tra xem nó có còn nằm trong giới hạn hay không.
Cú pháp
Cú pháp của câu lệnh continue như sau:
continue [ "Label Name" ] [Number]
Các continue câu lệnh sẽ lặp lại vòng lặp mới nhất và bên trong nhất cho đến khi tên hoặc số nhãn tùy chọn được chỉ định.
Một dạng đặc biệt của continue N Là continue 0. Điều này lặp lại vòng lặp bên ngoài nhất, bất kể độ sâu. Tương tự như vậy, tiếp tục -1 bắt đầu từ vòng lặp ngoài cùng thứ hai, v.v.
Thí dụ
#!/home/euphoria-4.0b2/bin/eui
for a = 3 to 6 do
printf(1, "value of a %d\n", a)
if a = 4 then
puts(1,"(2)\n")
continue
end if
printf(1, "value of a %d\n", a*a)
end for
This would produce following result:
value of a 3
value of a 9
value of a 4
(2)
value of a 5
value of a 25
value of a 6
value of a 36
Các thử lại tuyên bố
Các retry câu lệnh tiếp tục thực hiện vòng lặp mà nó áp dụng bằng cách chuyển sang lần lặp tiếp theo và bỏ qua phần còn lại của lần lặp.
Cú pháp
Cú pháp của câu lệnh thử lại như sau:
retry [ "Label Name" ] [Number]
Các retrycâu lệnh thử lại việc thực hiện lặp lại hiện tại của vòng lặp mà nó áp dụng. Câu lệnh phân nhánh với câu lệnh đầu tiên của vòng lặp được chỉ định, không kiểm tra bất kỳ điều gì cũng như không tăng chỉ số vòng lặp for.
Một dạng đặc biệt của retry N Là retry 0. Thao tác này sẽ thử lại việc thực thi vòng lặp ngoài cùng, bất kể độ sâu. Tương tự như vậy, thử lại -1 thử lại vòng lặp ngoài cùng thứ hai, v.v.
Thông thường, một khối con chứa câu lệnh thử lại cũng chứa một từ khóa điều khiển luồng khác như thoát, tiếp tục hoặc ngắt. Nếu không, quá trình lặp sẽ được thực hiện liên tục.
Thí dụ
#!/home/euphoria-4.0b2/bin/eui
integer errors = 0
integer files_to_open = 10
for i = 1 to length(files_to_open) do
fh = open(files_to_open[i], "rb")
if fh = -1 then
if errors > 5 then
exit
else
errors += 1
retry
end if
end if
file_handles[i] = fh
end for
Vì thử lại không thay đổi giá trị của i và thử mở lại cùng một tệp, nên phải có một cách để thoát khỏi vòng lặp, mà câu lệnh exit cung cấp.
Tuyên bố goto
Các goto câu lệnh hướng dẫn máy tính tiếp tục thực thi mã tại một nơi được dán nhãn.
Nơi để tiếp tục thực thi được gọi là đích của câu lệnh. Nó bị hạn chế để nói dối trong quy trình hiện tại hoặc tệp hiện tại nếu nằm ngoài bất kỳ quy trình nào.
Cú pháp
Cú pháp của câu lệnh goto như sau:
goto "Label Name"
Mục tiêu của câu lệnh goto có thể là bất kỳ label tuyên bố -
label "Label Name"
Tên nhãn phải là chuỗi hằng số được trích dẫn kép. Các ký tự không hợp lệ trong số nhận dạng Euphoria có thể xuất hiện trong tên nhãn, vì nó là một chuỗi thông thường.
Thí dụ
#!/home/euphoria-4.0b2/bin/eui
integer a = 0
label "FIRST"
printf(1, "value of a %d\n", a)
a += 10
if a < 50 then
goto "FIRST"
end if
printf(1, "Final value of a %d\n", a)
Điều này tạo ra kết quả sau:
value of a 0
value of a 10
value of a 20
value of a 30
value of a 40
Final value of a 50