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 Nexit 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 Nbreak 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 Ncontinue 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 Nretry 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