Euphoria - Hướng dẫn nhanh

Euphoria là viết tắt của End-User Plập trình với Htức là theo thứ tự Otiêm cho Rmù quáng Interpreted Aứng dụng. Hóa thân đầu tiên của Euphoria được Robert Craig tạo ra trên Atari Mega-ST và nó được phát hành lần đầu tiên vào năm 1993. Hiện nó được duy trì bởi Rapid Deployment Software.

Đây là một ngôn ngữ lập trình 32-bit cấp cao miễn phí, đơn giản, linh hoạt, dễ học và thông dịch nhưng cực kỳ nhanh cho DOS, Windows, Linux, FreeBSD và hơn thế nữa.

Euphoria đang được sử dụng để phát triển các chương trình Windows GUI, trò chơi DOS tốc độ cao và các chương trình Windows Linux / FreeBSD X. Euphoria cũng có thể được sử dụng cho lập trình CGI (Webbased).

Tính năng hưng phấn

Đây là danh sách các tính năng chính của Euphoria -

  • Đó là một định nghĩa ngôn ngữ đơn giản, linh hoạt, mạnh mẽ, dễ học và sử dụng.

  • Nó hỗ trợ phân bổ lưu trữ động, có nghĩa là các biến tăng lên hoặc thu nhỏ mà lập trình viên không phải lo lắng về việc cấp phát và giải phóng bộ nhớ. Nó sẽ tự động thu gom rác.

  • Nó cực kỳ nhanh hơn các trình thông dịch thông thường như Perl và Python.

  • Các chương trình Euphoria chạy trong Linux, FreeBSD, Windows 32-bit và bất kỳ môi trường DOS nào.

  • Các chương trình hưng phấn không bị giới hạn bộ nhớ 640K.

  • Nó cung cấp một trình dịch Euphoria-To-C tối ưu hóa mà bạn có thể sử dụng để dịch chương trình Euphoria của mình sang C và sau đó biên dịch nó bằng trình biên dịch C để có được tệp thực thi (.exe). Điều này có thể tăng tốc độ chương trình của bạn lên 2 đến 5 lần.

  • Phần cứng bên dưới hoàn toàn bị ẩn, có nghĩa là các chương trình không nhận biết được độ dài từ, biểu diễn cấp bit cơ bản của các giá trị, thứ tự byte, v.v.

  • Cài đặt Euphoria đi kèm với trình gỡ lỗi nguồn toàn màn hình, trình biên dịch thực thi và trình chỉnh sửa đa tệp toàn màn hình.

  • Nó hỗ trợ xử lý lỗi trong thời gian chạy, chỉ số con và kiểm tra kiểu.

  • Nó là một ngôn ngữ mã nguồn mở và hoàn toàn miễn phí.

Yêu cầu nền tảng

Euphoria có sẵn trên Windows, Linux, FreeBSD và OSX. Đây là phiên bản tối thiểu cần thiết với các nền tảng sau:

  • WIN32 version- Bạn cần Windows 95 hoặc bất kỳ phiên bản Windows nào mới hơn. Nó chạy tốt trên XP và Vista.

  • Linux version- Bạn cần bất kỳ bản phân phối Linux nào được cập nhật hợp lý, có libc6 trở lên. Ví dụ: Red Hat 5.2 trở lên hoạt động tốt.

  • FreeBSD version - Bạn cần bất kỳ bản phân phối FreeBSD cập nhật hợp lý nào.

  • Mac OS X version - Bạn cần bất kỳ máy Mac dựa trên Intel được cập nhật hợp lý nào.

Giới hạn về hưng phấn

Dưới đây là một số hạn chế nổi bật của Euphoria -

  • Mặc dù Euphoria đơn giản, nhanh chóng và đủ linh hoạt cho các lập trình viên; nó không cung cấp hỗ trợ cuộc gọi cho nhiều chức năng quan trọng. Ví dụ, lập trình mạng.

  • Euphoria được phát minh vào năm 1993, và bạn vẫn sẽ không tìm thấy bất kỳ cuốn sách nào viết về ngôn ngữ này. Cũng không có nhiều tài liệu về ngôn ngữ này.

Nhưng ngày nay, ngôn ngữ này đang trở nên phổ biến rất nhanh và bạn có thể hy vọng sẽ sớm có những tiện ích và sách hay dành cho ngôn ngữ này.

Cấp phép Euphoria

Sản phẩm này miễn phí và mã nguồn mở, và đã được hưởng lợi từ sự đóng góp của nhiều người. Bạn có toàn quyền miễn phí bản quyền để phân phối bất kỳ chương trình Euphoria nào mà bạn phát triển.

Các tệp biểu tượng, chẳng hạn như euphoria.ico và các tệp nhị phân có sẵn trong euphoria \ bin, có thể được phân phối có hoặc không có thay đổi của bạn.

Bạn có thể shroud hoặc là bindchương trình của bạn và phân phối các tệp kết quả miễn phí bản quyền. Một số hạn chế pháp lý bổ sung của bên thứ 3 có thể áp dụng khi bạn sử dụng trình dịch Euphoria- To-C.

Hào phóng Open Source Licensecho phép Euphoria sử dụng cho cả mục đích cá nhân và thương mại. Không giống như nhiều giấy phép nguồn mở khác, các thay đổi của bạn không nhất thiết phải được tạo thành nguồn mở.

Chương này mô tả về việc cài đặt Euphoria trên các nền tảng khác nhau. Bạn có thể làm theo các bước để cài đặt Euphoria trên Linux, FreeBSD và Windows 32 bit. Vì vậy, bạn có thể chọn các bước dựa trên môi trường làm việc của bạn.

Linux, cài đặt BSD miễn phí

Trang web chính thức cung cấp .tar.gzđể cài đặt Euphoria trên HĐH Linux hoặc BSD của bạn. Bạn có thể tải xuống phiên bản Euphoria mới nhất của mình từ trang web chính thức của nó - Tải xuống Euphoria .

Sau khi bạn có tệp .tar.gz, đây là ba bước đơn giản cần thực hiện để cài đặt Euphoria trên máy Linux hoặc BSD miễn phí của bạn -

Step 1 - Cài đặt tập tin

Bỏ mở tệp đã tải xuống euphoria-4.0b2.tar.gztrong thư mục mà bạn muốn cài đặt Euphoria. Nếu bạn muốn cài đặt nó trong thư mục / home như sau, thì -

$cp euphoria-4.0b2.tar.gz /home $cd /home
$gunzip euphoria-4.0b2.tar.gz $tar -xvf euphoria-4.0b2.tar

Điều này tạo ra một hệ thống phân cấp thư mục bên trong /home/euphoria-4.0b2 thư mục như sau -

$ls -l
-rw-r--r-- 1 1001 1001 2485 Aug 17 06:15 Jamfile
-rw-r--r-- 1 1001 1001 5172 Aug 20 12:37 Jamrules
-rw-r--r-- 1 1001 1001 1185 Aug 13 06:21 License.txt
drwxr-xr-x 2 1001 1001 4096 Aug 31 10:07 bin
drwxr-xr-x 7 1001 1001 4096 Aug 31 10:07 demo
-rw-r--r-- 1 1001 1001 366 Mar 18 09:02 file_id.diz
drwxr-xr-x 4 1001 1001 4096 Aug 31 10:07 include
-rw-r--r-- 1 1001 1001 1161 Mar 18 09:02 installu.doc
drwxr-xr-x 4 1001 1001 4096 Aug 31 10:07 source
drwxr-xr-x 19 1001 1001 4096 Sep 7 12:09 tests
drwxr-xr-x 2 1001 1001 4096 Aug 31 10:07 tutorial

NOTE- Tên tệp euphoria-4.0b2.tar.gz tùy thuộc vào phiên bản mới nhất hiện có. Chúng tôi đang sử dụng phiên bản 4.0b2 của ngôn ngữ cho hướng dẫn này.

Step 2 - Thiết lập đường dẫn

Sau khi cài đặt Euphoria, bạn cần đặt đường dẫn thích hợp để shell của bạn có thể tìm thấy các mã nhị phân và tiện ích Euphoria cần thiết. Trước khi tiếp tục, bạn cần thiết lập ba biến môi trường quan trọng sau:

  • Đặt biến môi trường PATH thành thư mục point /home/euphoria-4.0b2/bin.

  • Đặt biến môi trường EUDIR trỏ tới /home/euphoria-4.0b2.

  • Đặt biến môi trường EUINC trỏ tới /home/euphoria-4.0b2/include.

Các biến này có thể được đặt như sau:

$export PATH=$PATH:/home/euphoria-4.0b2/bin $export EUDIR=/home/euphoria-4.0b2
$export EUINC=/home/euphoria-4.0b2/include

NOTE- Các lệnh trên được sử dụng để đặt các biến môi trường có thể khác nhau tùy thuộc vào Shell của bạn. Chúng tôi đã sử dụng bash shell để thực hiện các lệnh này để thiết lập các biến.

Step 3 - Cài đặt xác nhận

Xác nhận xem bạn đã cài đặt Euphoria thành công hay chưa.

Thực hiện lệnh sau:

$eui -version

Nếu bạn nhận được kết quả sau thì có nghĩa là bạn đã cài đặt Euphoria thành công; nếu không bạn phải quay lại và kiểm tra lại tất cả các bước.

$eui -version Euphoria Interpreter 4.0.0 beta 2 (r2670) for Linux Using System Memory $

Vậy là xong, Môi trường lập trình Euphoria đã sẵn sàng trên máy UNIX của bạn và bạn có thể bắt đầu viết các chương trình phức tạp theo các bước đơn giản.

Cài đặt WIN32 và DOS

Trang web chính thức cung cấp .exeđể cài đặt Euphoria trên hệ điều hành WIN32 hoặc DOS của bạn. Bạn có thể tải xuống phiên bản Euphoria mới nhất của mình từ trang web chính thức của nó - Tải xuống Euphoria .

Sau khi bạn có tệp .exe, đây là ba bước đơn giản để làm theo để cài đặt ngôn ngữ lập trình Euphoria trên máy WIN32 hoặc DOS của bạn -

Step 1 - Cài đặt tập tin

Nhấp đúp vào phần đã tải xuống .execài đặt chương trình để cài đặt tất cả các tệp. Chúng tôi đã tải xuống tệp euphoria-40b2.exe để cài đặt.

Tên tệp euphoria-40b2.exe phụ thuộc vào phiên bản mới nhất hiện có. Chúng tôi sử dụng phiên bản 4 beta 2 của ngôn ngữ.

Theo mặc định, Euphoria sẽ được cài đặt trong thư mục C: \ euphoria-40b2 nhưng bạn cũng có thể chọn một vị trí mong muốn.

Step 2 - Khởi động lại máy

Khởi động lại máy của bạn để hoàn tất cài đặt.

Step 3 - Cài đặt xác nhận

Xác nhận xem bạn đã cài đặt Euphoria thành công hay chưa.

Thực hiện lệnh sau:

c:\>eui -version

Nếu bạn nhận được kết quả sau thì có nghĩa là bạn đã cài đặt Euphoria thành công; nếu không bạn phải quay lại và kiểm tra lại tất cả các bước.

c:\>eui -version
Euphoria Interpreter 4.0.0 beta 2 (r2670) for Windows
Using Managed Memory

c:\>

Vậy là xong, Môi trường lập trình Euphoria đã sẵn sàng trên máy WIN32 của bạn và bạn có thể bắt đầu viết các chương trình phức tạp theo các bước đơn giản.

Thông dịch viên Euphoria

Tùy thuộc vào nền tảng bạn đang sử dụng, Euphoria có nhiều trình thông dịch -

  • Thông dịch viên chính là eui.

  • Trên nền tảng windows, bạn có hai sự lựa chọn. Nếu bạn chạyeuisau đó một cửa sổ giao diện điều khiển được tạo. Nếu bạn chạyeuiw thì không có giao diện điều khiển nào được tạo, làm cho nó phù hợp với các ứng dụng GUI.

  • Euphoria không quan tâm đến lựa chọn của bạn về phần mở rộng tệp. Tuy nhiên, theo quy ước; các ứng dụng dựa trên bảng điều khiển đi kèm với.ex sự mở rộng.

  • Các ứng dụng dựa trên GUI có .exw phần mở rộng và các tệp bao gồm có .e sự mở rộng.

Ngôn ngữ Euphoria có nhiều điểm tương đồng với Perl, C và Java. Tuy nhiên, có một số khác biệt nhất định giữa các ngôn ngữ. Chương này được thiết kế để giúp bạn nhanh chóng nắm bắt được cú pháp được mong đợi trong Euphoria.

Hướng dẫn này giả định rằng bạn đang làm việc với Linux và tất cả các ví dụ đã được viết trên nền tảng Linux. Nhưng quan sát thấy rằng không có bất kỳ sự khác biệt nổi bật nào về cú pháp chương trình trên Linux và WIN32. Do đó, bạn có thể làm theo các bước tương tự trên WIN32.

Chương trình Euphoria đầu tiên

Hãy để chúng tôi viết một chương trình Euphoria đơn giản trong một tập lệnh. Nhập mã nguồn sau vào tệp test.ex và lưu nó.

#!/home/euphoria-4.0b2/bin/eui

puts(1, "Hello, Euphoria!\n")

Giả sử, thông dịch viên Euphoria có sẵn trong thư mục /home/euphoria-4.0b2/bin/ . Bây giờ chạy chương trình này như sau:

$ chmod +x test.ex # This is to make file executable $ ./test.ex

Điều này tạo ra kết quả sau:

Hello, Euphoria!

Tập lệnh này đã sử dụng một hàm tích hợp puts()trong đó có hai đối số. Đối số đầu tiên cho biết tên tệp hoặc số thiết bị và đối số thứ hai cho biết một chuỗi mà bạn muốn in. Ở đây 1 chỉ ra thiết bị STDOUT.

Số nhận dạng Euphoria

Mã định danh Euphoria là tên được sử dụng để xác định một biến, hàm, lớp, mô-đun hoặc đối tượng khác. Mã định danh bắt đầu bằng chữ cái A đến Z hoặc a đến z và sau đó là các chữ cái, chữ số hoặc dấu gạch dưới.

Euphoria không cho phép các ký tự dấu câu như @, $ và% trong số nhận dạng.

Euphoria là một ngôn ngữ lập trình phân biệt chữ hoa chữ thường. Như vậyManpowermanpowerlà hai định danh khác nhau trong Euphoria. Ví dụ: các số nhận dạng hợp lệ là -

  • n
  • color26
  • ShellSort
  • quick_sort
  • a_very_long_indentifier

Từ dành riêng

Danh sách sau đây hiển thị các từ dành riêng trong Euphoria. Những từ dành riêng này không được dùng làm hằng số hoặc biến hoặc bất kỳ tên định danh nào khác. Từ khóa hưng phấn chỉ chứa các chữ cái thường.

lối ra ghi đè
như xuất khẩu thủ tục
phá vỡ Fallthru công cộng
bởi cho thử lại
trường hợp chức năng trở về
không thay đổi toàn cầu công viêc hằng ngày
tiếp tục đi đến công tắc điện
làm nếu sau đó
khác ifdef đến
elsedef bao gồm kiểu
elsif nhãn cho đến khi
elsifdef vòng trong khi
kết thúc không gian tên với
nhập cảnh không phải không có
enum hoặc là xor

Biểu thức

Euphoria cho phép bạn tính toán kết quả bằng cách tạo biểu thức. Tuy nhiên, trong Euphoria, bạn có thể thực hiện các phép tính trên toàn bộ chuỗi dữ liệu với một biểu thức.

Bạn có thể xử lý một chuỗi giống như xử lý một số đơn lẻ. Nó có thể được sao chép, chuyển đến một chương trình con hoặc được tính toán như một đơn vị. Ví dụ -

{1,2,3} + 5

Đây là biểu thức cộng dãy {1, 2, 3} và nguyên tử 5 để có được dãy {6, 7, 8}. Bạn sẽ tìm hiểu các trình tự trong các chương tiếp theo.

Các khối mã

Một trong những cảnh báo đầu tiên mà các lập trình viên gặp phải khi học Euphoria là thực tế là không có dấu ngoặc nhọn để chỉ ra các khối mã cho các định nghĩa thủ tục và hàm hoặc điều khiển luồng. Các khối mã được biểu thị bằng các từ khóa liên quan.

Ví dụ sau cho thấy if...then...end if khối -

if condition then
   code block comes here
end if

Tuyên bố nhiều dòng

Các câu lệnh trong Euphoria thường kết thúc bằng một dòng mới. Tuy nhiên, Euphoria cho phép viết một câu lệnh trong nhiều dòng. Ví dụ -

total = item_one + 
   item_two + 
   item_three

Nhân vật thoát

Các ký tự thoát có thể được nhập bằng dấu gạch chéo ngược. Ví dụ -

Bảng sau đây là danh sách các ký tự thoát hoặc không in được có thể được biểu diễn bằng ký hiệu dấu gạch chéo ngược.

Ký hiệu gạch chéo ngược Sự miêu tả
\ n Dòng mới
\ r Vận chuyển trở lại
\ t Chuyển hướng
\\ Dấu gạch chéo ngược
\ " Dấu ngoặc kép
\ ' Trích dẫn duy nhất

Nhận xét trong Euphoria

Mọi nhận xét đều bị trình biên dịch bỏ qua và không ảnh hưởng đến tốc độ thực thi. Bạn nên sử dụng nhiều bình luận hơn trong chương trình của mình để làm cho nó dễ đọc hơn.

Có ba dạng văn bản bình luận -

  • Nhận xét bắt đầu bằng hai dấu gạch ngang và kéo dài đến cuối dòng hiện tại.

  • Nhận xét định dạng nhiều dòng được giữ bên trong /*...*/, ngay cả khi điều đó xảy ra trên một dòng khác.

  • Bạn có thể sử dụng một nhận xét đặc biệt bắt đầu bằng hai chuỗi ký tự “#!” chỉ trên dòng đầu tiên của chương trình.

Ví dụ

#!/home/euphoria-4.0b2/bin/eui
-- First comment
puts(1, "Hello, Euphoria!\n") -- second comment

/* This is a comment which extends over a number
   of text lines and has no impact on the program
*/

Điều này tạo ra kết quả sau:

Hello, Euphoria!

Note- Bạn có thể sử dụng một nhận xét đặc biệt bắt đầu bằng “#!”. Điều này thông báo cho trình bao Linux rằng tệp của bạn sẽ được thực thi bởi trình thông dịch Euphoria.

Các biến không là gì ngoài các vị trí bộ nhớ dành riêng để lưu trữ các giá trị. Điều này có nghĩa là khi bạn tạo một biến, bạn dự trữ một số không gian trong bộ nhớ.

Dựa trên kiểu dữ liệu của một biến, trình thông dịch phân bổ bộ nhớ và quyết định những gì có thể được lưu trữ trong bộ nhớ dành riêng. Do đó, bằng cách gán các kiểu dữ liệu khác nhau cho các biến, bạn có thể lưu trữ số nguyên, số thập phân hoặc ký tự trong các biến này. Các kiểu dữ liệu hưng phấn được giải thích trong các chương khác nhau.

Các vị trí bộ nhớ này được gọi là các biến vì giá trị của chúng có thể thay đổi trong thời gian tồn tại của chúng.

Sự định nghĩa biến

Các biến Euphoria phải được khai báo rõ ràng để dành không gian bộ nhớ. Vì vậy, việc khai báo một biến là bắt buộc trước khi bạn gán giá trị cho một biến.

Khai báo biến có tên kiểu theo sau là danh sách các biến được khai báo. Ví dụ -

integer x, y, z

sequence a, b, x

Khi bạn khai báo một biến, bạn đặt tên cho biến đó và bạn xác định loại giá trị nào có thể được gán hợp pháp cho biến trong quá trình thực thi chương trình của bạn.

Hành động đơn giản là khai báo một biến không gán bất kỳ giá trị nào cho nó. Nếu bạn cố đọc nó trước khi gán bất kỳ giá trị nào cho nó, Euphoria sẽ đưa ra lỗi thời gian chạy là "biến xyz chưa bao giờ được gán giá trị" .

Gán giá trị

Dấu bằng (=) dùng để gán giá trị cho các biến. Biến có thể được chỉ định theo cách sau:

Variable_Name = Variable_Value

Ví dụ -

#!/home/euphoria/bin/eui

-- Here is the declaration of the variables.
integer counter
integer miles
sequence name

counter = 100 -- An integer assignment
miles = 1000.0 -- A floating point
name = "John" -- A string ( sequence )

printf(1, "Value of counter %d\n", counter )
printf(1, "Value of miles %f\n", miles )
printf(1, "Value of name %s\n", {name} )

Dưới đây 100, 1000.0 và "John" là những giá trị được gán cho truy cập , dặmtên biến, tương ứng. Chương trình này tạo ra kết quả sau:

Value of counter 100
Value of miles 1000.000000
Value of name John

Để tránh việc quên khởi tạo một biến và cũng vì nó có thể làm cho mã rõ ràng hơn để đọc, bạn có thể kết hợp khai báo và gán -

integer n = 5

Điều này tương đương với sau:

integer n
n = 5

Phạm vi định danh

Phạm vi của mã định danh là mô tả mã nào có thể truy cập mã đó. Mã trong cùng phạm vi của một định danh có thể truy cập mã định danh đó và mã không trong cùng phạm vi với định danh không thể truy cập nó.

Phạm vi của một biến phụ thuộc vào vị trí và cách nó được khai báo.

  • Nếu nó được khai báo trong for, while, loop hoặc là switch, phạm vi của nó bắt đầu từ khai báo và kết thúc ở end tuyên bố.

  • Trong một if câu lệnh, phạm vi bắt đầu ở phần khai báo và kết thúc ở phần tiếp theo else, elsif hoặc là end if tuyên bố.

  • Nếu một biến được khai báo trong một quy trình, thì phạm vi của biến đó bắt đầu từ phần khai báo và kết thúc ở câu lệnh kết thúc của quy trình. Đây được biết đến như một biến riêng.

  • Nếu một biến được khai báo bên ngoài một thói quen, phạm vi của nó bắt đầu từ phần khai báo và kết thúc và phần cuối của tệp mà nó được khai báo. Đây được gọi là một biến mô-đun.

  • Phạm vi của một constant không có bổ trợ phạm vi, bắt đầu ở phần khai báo và kết thúc và phần cuối của tệp mà nó được khai báo.

  • Phạm vi của một enum không có bổ trợ phạm vi, bắt đầu ở phần khai báo và kết thúc và phần cuối của tệp mà nó được khai báo.

  • Phạm vi của tất cả procedures, functionstypes, không có công cụ sửa đổi phạm vi, bắt đầu ở đầu tệp nguồn và kết thúc ở cuối tệp nguồn mà chúng được khai báo.

Hằng số, enum, biến mô-đun, thủ tục, hàm và kiểu không có công cụ sửa đổi phạm vi được gọi là locals. Tuy nhiên, những số nhận dạng này có thể có một công cụ sửa đổi phạm vi trước phần khai báo của chúng, điều này khiến phạm vi của chúng mở rộng ra ngoài tệp mà chúng được khai báo.

  • Nếu từ khóa globaltrước phần khai báo, phạm vi của các định danh này mở rộng cho toàn bộ ứng dụng. Chúng có thể được truy cập bằng mã ở bất kỳ đâu trong các tệp ứng dụng.

  • Nếu từ khóa publictrước khai báo, phạm vi mở rộng đến bất kỳ tệp nào bao gồm tệp trong đó định danh được khai báo hoặc đến bất kỳ tệp nào bao gồm tệp công khai bao gồm tệp chứa khai báo công khai.

  • Nếu từ khóa export trước phần khai báo, phạm vi chỉ mở rộng đến bất kỳ tệp nào bao gồm trực tiếp tệp mà trong đó định danh được khai báo.

Khi bạn includemột tệp Euphoria trong một tệp khác, chỉ những số nhận dạng được khai báo bằng công cụ sửa đổi phạm vi mới có thể truy cập vào tệp thực hiện việc bao gồm . Các khai báo khác trong tệp bao gồm không nhìn thấy được đối với tệp thực hiện bao gồm .

Hằng cũng là những biến được gán một giá trị ban đầu không bao giờ có thể thay đổi trong vòng đời của chương trình. Euphoria cho phép xác định các hằng số bằng cách sử dụng từ khoá hằng như sau:

constant MAX = 100
constant Upper = MAX - 10, Lower = 5
constant name_list = {"Fred", "George", "Larry"}

Kết quả của bất kỳ biểu thức nào có thể được gán cho một hằng số, thậm chí một hằng số liên quan đến các lệnh gọi đến các hàm đã xác định trước đó, nhưng một khi việc gán được thực hiện, giá trị của biến hằng số bị "khóa".

Hằng số có thể không được khai báo trong một chương trình con. Phạm vi của mộtconstant không có bổ trợ phạm vi, bắt đầu ở phần khai báo và kết thúc và phần cuối của tệp mà nó được khai báo.

Ví dụ

#!/home/euphoria-4.0b2/bin/eui

constant MAX = 100
constant Upper = MAX - 10, Lower = 5

printf(1, "Value of MAX %d\n", MAX )
printf(1, "Value of Upper %d\n", Upper )
printf(1, "Value of Lower %d\n", Lower )

MAX = MAX + 1
printf(1, "Value of MAX %d\n", MAX )

Điều này tạo ra lỗi sau:

./test.ex:10
<0110>:: may not change the value of a constant
MAX = MAX + 1
   ^

Press Enter

Nếu bạn xóa hai dòng cuối cùng khỏi ví dụ, thì nó sẽ tạo ra kết quả sau:

Value of MAX 100
Value of Upper 90
Value of Lower 5

các enums

Giá trị được liệt kê là một loại hằng số đặc biệt trong đó giá trị đầu tiên được đặt mặc định là số 1 và mỗi mục sau đó được tăng thêm 1. Các ô chỉ có thể nhận các giá trị số.

Enums có thể không được khai báo bên trong một chương trình con. Phạm vi của mộtenum không có bổ trợ phạm vi, bắt đầu ở phần khai báo và kết thúc và phần cuối của tệp mà nó được khai báo.

Ví dụ

#!/home/euphoria-4.0b2/bin/eui

enum ONE, TWO, THREE, FOUR

printf(1, "Value of ONE %d\n", ONE )
printf(1, "Value of TWO %d\n", TWO )
printf(1, "Value of THREE %d\n", THREE )
printf(1, "Value of FOUR %d\n", FOUR )

Điều này sẽ tạo ra kết quả sau:

Value of ONE 1
Value of TWO 2
Value of THREE 3
Value of FOUR 4

Bạn có thể thay đổi giá trị của bất kỳ mục nào bằng cách gán cho nó một giá trị số. Các giá trị tiếp theo luôn là giá trị trước đó cộng với một, trừ khi chúng cũng được gán giá trị mặc định.

#!/home/euphoria-4.0b2/bin/eui

enum ONE, TWO, THREE, ABC=10, XYZ

printf(1, "Value of ONE %d\n", ONE )
printf(1, "Value of TWO %d\n", TWO )
printf(1, "Value of THREE %d\n", THREE )
printf(1, "Value of ABC %d\n", ABC )
printf(1, "Value of XYZ %d\n", XYZ )

Điều này tạo ra kết quả sau:

Value of ONE 1
Value of TWO 2
Value of THREE 3
Value of ABC 10
Value of XYZ 11

Các chuỗi sử dụng chỉ số nguyên, nhưng với enum, bạn có thể viết mã như thế này -

enum X, Y
sequence point = { 0,0 }

point[X] = 3
point[Y] = 4

Dữ liệu được lưu trong bộ nhớ có thể có nhiều loại. Ví dụ: tuổi của một người được lưu trữ dưới dạng giá trị số và địa chỉ của người đó được lưu trữ dưới dạng ký tự chữ và số.

Euphoria có một số loại tiêu chuẩn được sử dụng để xác định các hoạt động có thể có trên chúng và phương pháp lưu trữ cho từng loại.

Euphoria có bốn kiểu dữ liệu tiêu chuẩn sau:

  • integer
  • atom
  • sequence
  • object

Sự hiểu biết về nguyên tử và trình tự là chìa khóa để hiểu Euphoria.

Số nguyên

Kiểu dữ liệu số nguyên euphoria lưu trữ các giá trị số. Chúng được khai báo và định nghĩa như sau:

integer var1, var2

var1 = 1
var2 = 100

Các biến được khai báo với kiểu số nguyên phải là các nguyên tử có integerbao gồm các giá trị từ -1073741824 đến +1073741823. Bạn có thể thực hiện các phép tính chính xác trên các giá trị số nguyên lớn hơn, lên đến khoảng 15 chữ số thập phân, nhưng hãy khai báo chúng dưới dạng nguyên tử, thay vì số nguyên.

Nguyên tử

Tất cả các đối tượng dữ liệu trong Euphoria đều là nguyên tử hoặc chuỗi. Một nguyên tử là một giá trị số duy nhất. Nguyên tử có thể có bất kỳ giá trị số nguyên hoặc dấu chấm động chính xác kép nào. Các nguyên tử euphoria được khai báo và định nghĩa như sau:

atom var1, var2, var3

var1 = 1000
var2 = 198.6121324234
var3 = 'E'

Các nguyên tử có thể nằm trong khoảng từ -1e300 đến + 1e300 với độ chính xác 15 chữ số thập phân. Một nhân vật cá nhân là mộtatommà phải được nhập bằng cách sử dụng dấu ngoặc kép. Ví dụ: tất cả các tuyên bố sau đây đều hợp pháp -

-- Following is equivalent to the atom 66 - the ASCII code for B
char = 'B'

-- Following is equivalent to the sequence {66}
sentence = "B"

Trình tự

Một chuỗi là một tập hợp các giá trị số có thể được truy cập thông qua chỉ mục của chúng. Tất cả các đối tượng dữ liệu trong Euphoria đều là nguyên tử hoặc chuỗi.

Chỉ mục chuỗi bắt đầu từ 1 không giống như các ngôn ngữ lập trình khác trong đó chỉ mục mảng bắt đầu từ 0. Các chuỗi hưng phấn được khai báo và định nghĩa như sau:

sequence var1, var2, var3, var4

var1 = {2, 3, 5, 7, 11, 13, 17, 19}
var2 = {1, 2, {3, 3, 3}, 4, {5, {6}}}
var3 = {{"zara", "ali"}, 52389, 97.25}     
var4 = {} -- the 0 element sequence

Một chuỗi ký tự chỉ là một sequencecác ký tự có thể được nhập bằng dấu ngoặc kép. Ví dụ: tất cả các tuyên bố sau đây đều hợp pháp -

word = 'word'
sentence = "ABCDEFG"

Các chuỗi ký tự có thể được thao tác và vận hành giống như bất kỳ chuỗi ký tự nào khác. Ví dụ, chuỗi trên hoàn toàn tương đương với chuỗi -

sentence = {65, 66, 67, 68, 69, 70, 71}

Bạn sẽ tìm hiểu thêm về trình tự trong Euphoria - Chuỗi .

Các đối tượng

Đây là một kiểu siêu dữ liệu trong Euphoria có thể nhận bất kỳ giá trị nào bao gồm các nguyên tử, chuỗi hoặc số nguyên. Các đối tượng Euphoria được khai báo và định nghĩa như sau:

object var1, var2, var3

var1 = {2, 3, 5, 7, 11, 13, 17, 19}
var2 = 100
var3 = 'E'

Một đối tượng có thể có một trong các giá trị sau:

  • một chu kỳ

  • Một nguyên tử

  • một số nguyên

  • một số nguyên được sử dụng làm số tệp

  • một chuỗi chuỗi hoặc nguyên tử một ký tự

Euphoria cung cấp một tập hợp các toán tử phong phú để thao tác các biến. Chúng ta có thể chia tất cả các toán tử Euphoria thành các nhóm sau:

  • Toán tử số học
  • Toán tử quan hệ
  • Toán tử logic
  • Người điều hành nhiệm vụ
  • Nhà điều hành khác

Các toán tử số học

Các toán tử số học được sử dụng trong các biểu thức toán học giống như cách chúng được sử dụng trong Đại số. Bảng sau liệt kê các toán tử số học. Giả sử biến số nguyên A giữ 10 và biến B giữ 20 thì -

Hiển thị các ví dụ

Nhà điều hành Sự miêu tả Thí dụ
+ Phép cộng - Thêm giá trị vào hai bên của toán tử A + B sẽ cho 30
- Phép trừ - Trừ toán hạng bên phải khỏi toán hạng bên trái A - B sẽ cho -10
* Phép nhân - Nhân các giá trị ở một trong hai bên của toán tử A * B sẽ cho 200
/ Phép chia - Chia toán hạng bên trái cho toán hạng bên phải B / A sẽ cho 2
+ Cộng một bậc - Điều này không ảnh hưởng đến giá trị biến. + B cho 20
- Trừ một bậc - Điều này tạo ra một giá trị âm của biến đã cho. -B cho -20

Các toán tử quan hệ

Có các toán tử quan hệ sau được hỗ trợ bởi ngôn ngữ Euphoria. Giả sử biến A giữ 10 và biến B giữ 20 thì -

Hiển thị các ví dụ

Nhà điều hành Sự miêu tả Thí dụ
= Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không, nếu có thì điều kiện trở thành true. (A = B) không đúng.
! = Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không, nếu các giá trị không bằng nhau thì điều kiện trở thành true. (A! = B) là đúng.
> Kiểm tra xem giá trị của toán hạng bên trái có lớn hơn giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (A> B) là không đúng.
< Kiểm tra xem giá trị của toán hạng bên trái có nhỏ hơn giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (A <B) là đúng.
> = Kiểm tra xem giá trị của toán hạng bên trái có lớn hơn hoặc bằng giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (A> = B) là không đúng.
<= Kiểm tra xem giá trị của toán hạng bên trái có nhỏ hơn hoặc bằng giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành true. (A <= B) là đúng.

Các toán tử logic

Bảng sau đây liệt kê các toán tử logic. Giả sử biến boolean A giữ 1 và biến B giữ 0 thì -

Hiển thị các ví dụ

Nhà điều hành Sự miêu tả Thí dụ
Được gọi là toán tử logic AND. Nếu cả hai toán hạng đều khác 0 thì điều kiện trở thành true. (A và B) là sai.
hoặc là Được gọi là Toán tử logic HOẶC. Nếu bất kỳ toán hạng nào trong hai toán hạng khác 0 thì điều kiện trở thành true. (A hoặc B) là đúng.
xor Được gọi là Toán tử XOR lôgic. Điều kiện là đúng nếu một trong số chúng là đúng, nếu cả hai toán hạng đều đúng hoặc sai thì điều kiện trở thành sai. (A xor B) là đúng.
không phải Được gọi là Toán tử logic NOT phủ định kết quả. Sử dụng toán tử này, true trở thành false và false trở thành true không (B) là đúng.

Bạn cũng có thể áp dụng các toán tử này cho các số khác 1 hoặc 0. Quy ước là: không có nghĩa là sai và khác 0 có nghĩa là đúng .

Người điều hành nhiệm vụ

Có các toán tử gán sau được ngôn ngữ Euphoria hỗ trợ:

Hiển thị các ví dụ

Nhà điều hành Sự miêu tả Thí dụ
= Toán tử gán đơn giản, Gán giá trị từ toán hạng bên phải sang toán hạng bên trái C = A + B sẽ gán giá trị của A + B vào C
+ = Thêm toán tử gán AND, Nó thêm toán hạng bên phải vào toán hạng bên trái và gán kết quả cho toán hạng bên trái C + = A tương đương với C = C + A
- = Trừ toán tử gán AND, Nó trừ toán hạng bên phải khỏi toán hạng bên trái và gán kết quả cho toán hạng bên trái C - = A tương đương với C = C - A
* = Nhân toán tử gán AND, Nó nhân toán hạng phải với toán hạng trái và gán kết quả cho toán hạng trái C * = A tương đương với C = C * A
/ = Toán tử gán AND, Nó chia toán hạng bên trái với toán hạng bên phải và gán kết quả cho toán hạng bên trái C / = A tương đương với C = C / A
& = Điều hành nối C & = {2} giống với C = {C} & {2}

Note - Ký hiệu bằng '=' được sử dụng trong câu lệnh gán không phải là một toán tử, nó chỉ là một phần của cú pháp.

Các nhà khai thác khác

Có một số toán tử khác được hỗ trợ bởi Euphoria Language.

Toán tử '&'

Bất kỳ hai đối tượng nào cũng có thể được nối bằng toán tử “&”. Kết quả là một dãy có độ dài bằng tổng độ dài của các đối tượng được nối.

Ví dụ -

#!/home/euphoria-4.0b2/bin/eui

sequence a, b, c
a = {1, 2, 3}
b = {4}
c = {1, 2, 3} & {4}

printf(1, "Value of c[1] %d\n", c[1] )
printf(1, "Value of c[2] %d\n", c[2] )
printf(1, "Value of c[3] %d\n", c[3] )
printf(1, "Value of c[4] %d\n", c[4] )

Điều này tạo ra kết quả sau:

Value of c[1] 1
Value of c[2] 2
Value of c[3] 3
Value of c[4] 4

Mức độ ưu tiên của các nhà điều hành hưng phấn

Mức độ ưu tiên của toán tử xác định nhóm các từ trong một biểu thức. Điều này ảnh hưởng đến cách một biểu thức được đánh giá. Các toán tử nhất định có quyền ưu tiên cao hơn những toán tử khác; ví dụ, toán tử nhân có quyền ưu tiên cao hơn toán tử cộng.

Ví dụ: x = 7 + 3 * 2

Ở đây, x được gán 13, không phải 20 vì toán tử * có mức độ ưu tiên cao hơn +.

Do đó, đầu tiên nó bắt đầu với 3 * 2 và sau đó thêm vào 7.

Ở đây các toán tử có mức độ ưu tiên cao nhất xuất hiện ở đầu bảng, những toán tử có mức độ ưu tiên thấp nhất xuất hiện ở cuối bảng. Trong một biểu thức, các toán tử có mức độ ưu tiên cao hơn được đánh giá đầu tiên.

thể loại Nhà điều hành Sự liên kết
Postfix hàm / loại cuộc gọi  
Một ngôi + -! không phải Phải sang trái
Phép nhân * / Trái sang phải
Phụ gia + - Trái sang phải
Kết nối & Trái sang phải
Quan hệ >> = <<= Trái sang phải
Bình đẳng =! = Trái sang phải
Logic AND Trái sang phải
Logic HOẶC hoặc là Trái sang phải
XOR logic xor Trái sang phải
Dấu phẩy , Trái sang phải

Phân nhánh là khía cạnh quan trọng nhất của bất kỳ ngôn ngữ lập trình nào. Trong khi viết chương trình, bạn có thể gặp phải tình huống phải đưa ra quyết định hoặc phải chọn một tùy chọn trong số nhiều tùy chọn đã cho.

Sơ đồ sau đây cho thấy một tình huống đơn giản trong đó một chương trình cần đi một trong hai con đường dựa trên điều kiện đã cho.

Euphoria cung cấp ba loại câu lệnh ra quyết định sau (phân nhánh hoặc có điều kiện):

  • câu lệnh if

  • chuyển đổi tuyên bố

  • câu lệnh ifdef

Hãy để chúng tôi xem các báo cáo chi tiết -

Vòng lặp là một khía cạnh quan trọng nhất khác của bất kỳ ngôn ngữ lập trình nào. Trong khi viết chương trình, bạn có thể gặp phải tình huống phải thực hiện cùng một câu lệnh nhiều lần và đôi khi số lần có thể là vô hạn.

Có một số cách để chỉ định quá trình sẽ diễn ra trong bao lâu và cách dừng hoặc thay đổi nó. Một khối lặp có thể được gọi một cách không chính thức là một vòng lặp và mỗi lần thực thi mã trong một vòng lặp được gọi là một lần lặp của vòng lặp.

Sơ đồ sau đây cho thấy một luồng logic đơn giản của một vòng lặp:

Euphoria cung cấp ba loại câu lệnh lặp sau:

  • tuyên bố while

  • vòng lặp cho đến khi tuyên bố

  • cho tuyên bố

Tất cả các câu trên cung cấp cho bạn sự linh hoạt và dễ sử dụng dựa trên các tình huống khác nhau. Hãy để chúng tôi xem chi tiết từng cái một -

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 từ 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 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ự như vậy, 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ự, 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 rẽ nhánh đến 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 để ngắ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ự bất hợp pháp 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

Khi một điều kiện được kiểm tra bởi if, elsif, until, hoặc là while sử dụng and hoặc là orngười vận hành, đánh giá ngắn mạch được sử dụng. Ví dụ -

if a < 0 and b > 0 then
   -- block of code
end if

Nếu a <0 là false, thì Euphoria không bận tâm đến việc kiểm tra xem b có lớn hơn 0. Nó biết rằng kết quả tổng thể là sai bất kể. Tương tự -

if a < 0 or b > 0 then
   -- block of code
end if

nếu a <0 là true, thì Euphoria ngay lập tức quyết định rằng kết quả là true, mà không cần kiểm tra giá trị của b, vì kết quả của phép thử này không liên quan.

Nói chung, bất cứ khi nào bạn có một điều kiện của biểu mẫu sau:

A and B

Trong đó A và B có thể là hai biểu thức bất kỳ, Euphoria rút gọn khi A sai và ngay lập tức làm cho kết quả tổng thể sai, thậm chí không cần nhìn vào biểu thức B.

Tương tự, bất cứ khi nào bạn có một điều kiện có dạng sau:

A or  B

Trong trường hợp A đúng, Euphoria bỏ qua việc đánh giá biểu thức B và tuyên bố kết quả là đúng.

Short-circuitđánh giá và và hoặc chỉ diễn ra đối với các điều kiện if, elsif, cho đến khi và trong khi. Nó không được sử dụng trong các ngữ cảnh khác. Ví dụ -

x = 1 or {1,2,3,4,5} -- x should be set to {1,1,1,1,1}

Nếu đoản mạch được sử dụng ở đây, bạn sẽ đặt x thành 1 và thậm chí không nhìn vào {1,2,3,4,5}, điều này sẽ sai.

Do đó, hiện tượng đoản mạch có thể được sử dụng trong các điều kiện if, elsif, Until, hoặc while, bởi vì bạn chỉ cần quan tâm kết quả là đúng hay sai và kết quả là cần có các điều kiện để tạo ra một nguyên tử.

Một chuỗi được biểu diễn bằng danh sách các đối tượng trong dấu ngoặc nhọn {}, được phân tách bằng dấu phẩy. Một dãy có thể chứa cả nguyên tử và các dãy khác. Ví dụ -

{2, 3, 5, 7, 11, 13, 17, 19}
{1, 2, {3, 3, 3}, 4, {5, {6}}}
{{"Zara", "Ayan"}, 52389, 97.25}
{} -- the 0-element sequence

Một phần tử của một dãy có thể được chọn bằng cách cho số phần tử trong dấu ngoặc vuông. Số phần tử bắt đầu từ 1.

Ví dụ: nếu x chứa {5, 7.2, 9, 0.5, 13} thì x [2] là 7.2.

Giả sử x [2] chứa {11,22,33}, Bây giờ nếu bạn hỏi x [2], bạn nhận được {11,22,33} và nếu bạn yêu cầu x [2] [3], bạn nhận được nguyên tử 33 .

Thí dụ

#!/home/euphoria-4.0b2/bin/eui

sequence x
x = {1, 2, 3, 4}

for a = 1 to length(x) do
   printf(1, "value of x[%d] = %d\n", {a, x[a]})
end for

Ở đây, length () là hàm tích hợp trả về độ dài của chuỗi. Ví dụ trên tạo ra kết quả sau:

value of x[1] = 1
value of x[2] = 2
value of x[3] = 3
value of x[4] = 4

Chuỗi ký tự

Một chuỗi ký tự chỉ là một sequencecủa các ký tự. Nó có thể được nhập bằng một trong hai cách sau:

(a) Using Double Quotes −

"ABCDEFG"

(b) Using Raw String Notation −

-- Using back-quotes
`ABCDEFG`

or

-- Using three double-quotes
"""ABCDEFG"""

Bạn có thể thử ví dụ sau để hiểu khái niệm -

#!/home/euphoria-4.0b2/bin/eui

sequence x
x = "ABCD"

for a = 1 to length(x) do
   printf(1, "value of x[%d] = %s\n", {a, x[a]})
end for

Điều này tạo ra kết quả sau:

value of x[1] = A
value of x[2] = B
value of x[3] = C
value of x[4] = D

Mảng chuỗi

Một mảng chuỗi có thể được thực hiện bằng cách sử dụng Chuỗi như sau:

#!/home/euphoria-4.0b2/bin/eui

sequence x = {"Hello", "World", "Euphoria", "", "Last One"}

for a = 1 to length(x) do
   printf(1, "value of x[%d] = %s\n", {a, x[a]})
end for

Điều này tạo ra kết quả sau:

value of x[1] = Hello
value of x[2] = World
value of x[3] = Euphoria
value of x[4] =
value of x[5] = Last One

Cấu trúc Euphoria

Một cấu trúc có thể được thực hiện bằng cách sử dụng Chuỗi như sau:

#!/home/euphoria-4.0b2/bin/eui

sequence employee = {
   {"John","Smith"},
      45000,
      27,
      185.5
}
printf(1, "First Name = %s, Last Name = %s\n", {employee[1][1],employee[1][2]} )

Điều này tạo ra kết quả sau:

First Name = John, Last Name = Smith

Có nhiều hoạt động khác nhau có thể được thực hiện trực tiếp trên các chuỗi. Hãy để chúng tôi xem chúng chi tiết -

Hoạt động tiết niệu

Khi áp dụng cho một chuỗi, toán tử một ngôi thực sự được áp dụng cho từng phần tử trong chuỗi để mang lại một chuỗi kết quả có cùng độ dài.

#!/home/euphoria-4.0b2/bin/eui

sequence x
x = -{1, 2, 3, 4}

for a = 1 to length(x) do
   printf(1, "value of x[%d] = %d\n", {a, x[a]})
end for

Điều này tạo ra kết quả sau:

value of x[1] = -1
value of x[2] = -2
value of x[3] = -3
value of x[4] = -4

Các phép tính toán học

Hầu hết tất cả các phép toán số học có thể được thực hiện trên các chuỗi như sau:

#!/home/euphoria-4.0b2/bin/eui

sequence x, y, a, b, c
x = {1, 2, 3}
y = {10, 20, 30}

a = x + y
puts(1, "Value of a = {")

for i = 1 to length(a) do
   printf(1, "%d,", a[i])
end for
puts(1, "}\n")

b = x - y
puts(1, "Value of b = {")
for i = 1 to length(a) do
   printf(1, "%d,", b[i])
end for
puts(1, "}\n")

c = x * 3
puts(1, "Value of c = {")

for i = 1 to length(c) do
   printf(1, "%d,", c[i])
end for
puts(1, "}\n")

Điều này tạo ra kết quả sau:

Value of a = {11,22,33,}
Value of b = {-9,-18,-27,}
Value of c = {3,6,9,}

Tùy chọn dòng lệnh

Người dùng có thể chuyển các tùy chọn dòng lệnh sang tập lệnh Euphoria và nó có thể được truy cập dưới dạng một chuỗi bằng cách sử dụng command_line() chức năng như sau -

#!/home/euphoria-4.0b2/bin/eui

sequence x

x = command_line()

printf(1, "Interpeter Name: %s\n", {x[1]} )
printf(1, "Script Name: %s\n", {x[2]} )
printf(1, "First Argument: %s\n", {x[3]})
printf(1, "Second Argument: %s\n", {x[4]})

Đây printf()là chức năng có sẵn của Euphoria. Bây giờ nếu bạn chạy tập lệnh này như sau:

$eui test.ex "one" "two"

Điều này tạo ra kết quả sau:

Interpeter Name: /home/euphoria-4.0b2/bin/eui
Script Name: test.ex
First Argument: one
Second Argument: two

Euphoria có một quy trình thư viện trả về ngày và giờ cho chương trình của bạn.

Các ngày () Phương pháp

Phương thức date () trả về một giá trị trình tự bao gồm tám phần tử nguyên tử. Ví dụ sau giải thích nó một cách chi tiết -

#!/home/euphoria-4.0b2/bin/eui
 
integer curr_year, curr_day, curr_day_of_year, curr_hour, curr_minute, curr_second
sequence system_date, word_week, word_month, notation, 
   curr_day_of_week, curr_month
   word_week = {"Sunday", 
      "Monday", 
      "Tuesday", 
      "Wednesday", 
      "Thursday", 
      "Friday", 
      "Saturday"}
   word_month = {"January", "February", 
      "March", 
      "April", 
      "May", 
      "June", 
      "July", 
      "August", 
      "September", 
      "October", 
      "November", 
      "December"}
-- Get current system date.
system_date = date()

-- Now take individual elements
curr_year = system_date[1] + 1900
curr_month = word_month[system_date[2]]
curr_day = system_date[3]
curr_hour = system_date[4]
curr_minute = system_date[5]
curr_second = system_date[6]
curr_day_of_week = word_week[system_date[7]]
curr_day_of_year = system_date[8]

if curr_hour >= 12 then 
   notation = "p.m."
else 
   notation = "a.m."
end if

if curr_hour > 12 then 
   curr_hour = curr_hour - 12
end if

if curr_hour = 0 then 
   curr_hour = 12
end if

puts(1, "\nHello Euphoria!\n\n")
printf(1, "Today is %s, %s %d, %d.\n", {curr_day_of_week, 
   curr_month, curr_day, curr_year})

printf(1, "The time is %.2d:%.2d:%.2d %s\n", {curr_hour, 
   curr_minute, curr_second, notation})

printf(1, "It is %3d days into the current year.\n", {curr_day_of_year})

Điều này tạo ra kết quả sau trên màn hình tiêu chuẩn của bạn:

Hello Euphoria!

Today is Friday, January 22, 2010.
The time is 02:54:58 p.m.
It is  22 days into the current year.

Các thời gian () Phương pháp

Phương thức time () trả về một giá trị nguyên tử, đại diện cho số giây đã trôi qua kể từ một thời điểm cố định. Ví dụ sau giải thích nó một cách chi tiết -

#!/home/euphoria-4.0b2/bin/eui
 
constant ITERATIONS = 100000000
integer p
atom t0, t1, loop_overhead

t0 = time()
for i = 1 to ITERATIONS do
   -- time an empty loop
end for

loop_overhead = time() - t0

printf(1, "Loop overhead:%d\n", loop_overhead)

t0 = time()
for i = 1 to ITERATIONS do
    p = power(2, 20)
end for

t1 = (time() - (t0 + loop_overhead))/ITERATIONS

printf(1, "Time (in seconds) for one call to power:%d\n", t1)

Điều này tạo ra kết quả sau:

Loop overhead:1
Time (in seconds) for one call to power:0

Các phương pháp liên quan đến ngày và giờ

Euphoria cung cấp danh sách các phương pháp giúp bạn thao tác ngày và giờ. Các phương pháp này được liệt kê trong Quy trình Thư viện Euphoria .

Thủ tục là một nhóm mã có thể sử dụng lại có thể được gọi từ bất kỳ đâu trong chương trình của bạn. Điều này giúp loại bỏ sự cần thiết phải viết đi viết lại cùng một đoạn mã. Điều này giúp lập trình viên viết mã mô-đun.

Giống như bất kỳ ngôn ngữ lập trình nâng cao nào khác, Euphoria cũng hỗ trợ tất cả các tính năng cần thiết để viết mã mô-đun bằng các thủ tục.

Bạn hẳn đã thấy các thủ tục như printf ()length () trong các chương trước. Chúng tôi đang sử dụng quy trình này nhiều lần nhưng chúng chỉ được viết trong Euphoria lõi một lần.

Euphoria cũng cho phép bạn viết các thủ tục của riêng mình. Phần này giải thích cách viết thủ tục của riêng bạn trong Euphoria.

Định nghĩa thủ tục

Trước khi bạn sử dụng một thủ tục, bạn cần phải xác định nó. Cách phổ biến nhất để xác định một thủ tục trong Euphoria là sử dụngprocedure từ khóa, theo sau là tên thủ tục duy nhất, danh sách các tham số (có thể trống) và khối câu lệnh kết thúc bằng end proceduretuyên bố. Cú pháp cơ bản như hình dưới đây -

procedure procedurename(parameter-list)

   statements
   ..........

end procedure

Thí dụ

Một thủ tục đơn giản được gọi là sayHello không có tham số nào được định nghĩa ở đây -

procedure  sayHello()
   puts(1, "Hello there")
end procedure

Gọi một thủ tục

Để gọi một thủ tục ở đâu đó sau này trong script, bạn chỉ cần viết tên của thủ tục đó như sau:

#!/home/euphoria-4.0b2/bin/eui

procedure  sayHello()
   puts(1, "Hello there")
end procedure 

-- Call above defined procedure.
sayHello()

Điều này tạo ra kết quả sau:

Hello there

Tham số thủ tục

Cho đến bây giờ bạn đã thấy thủ tục không có tham số. Nhưng có một cơ sở để truyền các tham số khác nhau trong khi gọi một thủ tục. Các tham số được truyền này có thể được nắm bắt bên trong thủ tục và bất kỳ thao tác nào có thể được thực hiện trên các tham số đó.

Một thủ tục có thể nhận nhiều tham số được phân tách bằng dấu phẩy.

Thí dụ

Hãy để chúng tôi sửa đổi một chút trong thủ tục sayHello của chúng tôi . Lần này cần hai tham số -

#!/home/euphoria-4.0b2/bin/eui

procedure sayHello(sequence name,atom  age)
   printf(1, "%s is %d years old.", {name, age})
end procedure

-- Call above defined procedure.
sayHello("zara", 8)

Điều này tạo ra kết quả sau:

zara is 8 years old.

Các hàm Euphoria cũng giống như các thủ tục, nhưng chúng trả về một giá trị và có thể được sử dụng trong một biểu thức. Chương này giải thích cách viết các hàm của riêng bạn trong Euphoria.

Định nghĩa hàm

Trước khi sử dụng một hàm, chúng ta cần xác định nó. Cách phổ biến nhất để xác định một hàm trong Euphoria là sử dụngfunction từ khóa, theo sau là tên hàm duy nhất, danh sách các tham số (có thể trống) và khối câu lệnh kết thúc bằng end functiontuyên bố. Cú pháp cơ bản được hiển thị ở đây -

function functionname(parameter-list)

   statements
   ..........
   return [Euphoria Object]

end function

Thí dụ

Một hàm đơn giản có tên sayHello không có tham số nào được định nghĩa ở đây -

function sayHello()
   puts(1, "Hello there")
   return 1
end function

Gọi một hàm

Để gọi một hàm ở đâu đó sau này trong script, bạn chỉ cần viết tên của hàm đó như sau:

#!/home/euphoria-4.0b2/bin/eui

function sayHello()
   puts(1, "Hello there")
   return 1
end function

-- Call above defined function.
sayHello()

Điều này tạo ra kết quả sau:

Hello there

Tham số chức năng

Cho đến bây giờ chúng ta đã thấy hàm không có tham số. Nhưng có một cơ sở để truyền các tham số khác nhau trong khi gọi một hàm. Các tham số được truyền này có thể được nắm bắt bên trong hàm và bất kỳ thao tác nào có thể được thực hiện trên các tham số đó.

Một hàm có thể nhận nhiều tham số được phân tách bằng dấu phẩy.

Thí dụ

Hãy để chúng tôi sửa đổi một chút trong hàm sayHello . Lần này cần hai tham số -

#!/home/euphoria-4.0b2/bin/eui

function sayHello(sequence name,atom  age)
   printf(1, "%s is %d years old.", {name, age})
   return 1
end function

-- Call above defined function.
sayHello("zara", 8)

Điều này tạo ra kết quả sau:

zara is 8 years old.

Các trở lại Bản Tuyên Bố

Một hàm Euphoria phải có câu lệnh trả về trước câu lệnh đóngend function. Mọi đối tượng Euphoria đều có thể được trả lại. Trên thực tế, bạn có thể có nhiều giá trị trả về bằng cách trả về một chuỗi các đối tượng. Ví dụ

return {x_pos, y_pos}

Nếu bạn không có gì để trả lại, thì chỉ cần trả về 1 hoặc 0. Giá trị trả về 1 cho biết thành công và 0 cho biết thất bại

Sử dụng ngôn ngữ lập trình Euphoria, bạn có thể viết các chương trình đọc và thay đổi dữ liệu tệp trên ổ đĩa mềm hoặc ổ cứng hoặc tạo tệp mới dưới dạng đầu ra. Bạn thậm chí có thể truy cập các thiết bị trên máy tính của mình như máy in và modem.

Chương này mô tả tất cả các chức năng I / O cơ bản có trong Euphoria. Để biết thêm thông tin về các chức năng khác, vui lòng tham khảo tài liệu Euphoria tiêu chuẩn.

Hiển thị trên màn hình

Cách đơn giản nhất để tạo ra kết quả là sử dụng câu lệnh put () trong đó bạn có thể chuyển bất kỳ chuỗi nào được hiển thị trên màn hình. Có một phương thức printf () khác cũng có thể được sử dụng trong trường hợp bạn phải định dạng một chuỗi bằng các giá trị động.

Các phương thức này chuyển đổi các biểu thức bạn chuyển chúng thành một chuỗi và ghi kết quả vào đầu ra chuẩn như sau:

#!/home/euphoria-4.0b2/bin/eui
 
puts(1, "Euphoria is really a great language, isn't it?" )

Điều này tạo ra kết quả sau trên màn hình tiêu chuẩn của bạn:

Euphoria is really a great language, isn't it?

Mở và đóng tệp

Euphoria cung cấp các phương thức cơ bản cần thiết để thao tác các tệp theo mặc định. Bạn có thể thực hiện hầu hết các thao tác với tệp bằng các phương pháp sau:

  • open()
  • close()
  • printf()
  • gets()
  • getc()

Các mở Phương pháp

Trước khi có thể đọc hoặc ghi một tệp, bạn phải mở tệp đó bằng phương thức open () có sẵn của Euphoria . Hàm này tạo một bộ mô tả tệp được sử dụng để gọi các phương thức hỗ trợ khác được liên kết với nó.

Cú pháp

integer file_num = open(file_name, access_mode)

Phương thức trên trả về -1 trong trường hợp có lỗi khi mở tên tệp đã cho. Đây là các thông số -

  • file_name - Đối số tên tệp là một giá trị chuỗi chứa tên của tệp mà bạn muốn truy cập.

  • access_mode- Access_mode xác định chế độ mà tệp phải được mở. Ví dụ: đọc, ghi phần phụ, v.v. Danh sách đầy đủ các giá trị có thể có cho các chế độ mở tệp được đưa ra trong bảng sau:

S.Không Chế độ & Mô tả
1

r

Mở tệp văn bản chỉ để đọc. Con trỏ tệp được đặt ở đầu tệp.

2

rb

Mở tệp chỉ để đọc ở định dạng nhị phân. Con trỏ tệp được đặt ở đầu tệp.

3

w

Mở tệp văn bản chỉ để viết. Ghi đè tệp nếu tệp tồn tại. Nếu tệp không tồn tại, hãy tạo một tệp mới để ghi.

4

wb

Mở tệp chỉ để ghi ở định dạng nhị phân. Ghi đè tệp nếu tệp tồn tại. Nếu tệp không tồn tại, hãy tạo một tệp mới để ghi.

5

u

Mở tệp để đọc và ghi. Con trỏ tệp được đặt ở đầu tệp.

6

ub

Mở tệp để đọc và ghi ở định dạng nhị phân. Con trỏ tệp được đặt ở đầu tệp.

7

a

Mở một tệp để bổ sung. Con trỏ tệp ở cuối tệp nếu tệp tồn tại (chế độ nối thêm). Nếu tệp không tồn tại, nó sẽ tạo một tệp mới để ghi.

số 8

ab

Mở tệp để thêm vào ở định dạng nhị phân. Con trỏ tệp ở cuối tệp nếu tệp tồn tại (chế độ nối thêm). Nếu tệp không tồn tại, nó sẽ tạo một tệp mới để ghi.

Thí dụ

Ví dụ sau tạo một tệp văn bản mới trong thư mục hiện tại trên hệ thống Linux của bạn -

#!/home/euphoria-4.0b2/bin/eui

integer file_num
constant ERROR = 2
constant STDOUT = 1

file_num = open("myfile,txt", "w")

if file_num = -1 then
   puts(ERROR, "couldn't open myfile\n")
else
   puts(STDOUT, "File opend successfully\n")
end if

Nếu tệp mở thành công, thì tệp "myfile.txt" được tạo trong thư mục hiện tại của bạn và tạo ra kết quả sau:

File opend successfully

Các close () Phương pháp

Phương thức close () xóa bất kỳ thông tin không thành văn nào và đóng tệp, sau đó không thể đọc hoặc ghi nữa trên tệp.

Euphoria tự động đóng tệp khi đối tượng tham chiếu của tệp được gán lại cho tệp khác. Bạn nên sử dụng phương thức close () để đóng tệp.

Cú pháp

close( file_num );

Ở đây, bộ mô tả tệp nhận được trong khi mở tệp được chuyển dưới dạng tham số.

Thí dụ

Ví dụ sau tạo một tệp như trên và sau đó đóng nó trước khi chương trình tồn tại:

#!/home/euphoria-4.0b2/bin/eui

integer file_num
constant ERROR = 2
constant STDOUT = 1

file_num = open("myfile.txt", "w")

if file_num = -1 then
   puts(ERROR, "couldn't open myfile\n")
else
   puts(STDOUT, "File opend successfully\n")
end if

if file_num = -1 then
   puts(ERROR, "No need to close the file\n")
else
   close( file_num )
   puts(STDOUT, "File closed successfully\n")
end if

Điều này tạo ra kết quả sau:

File opend successfully
File closed successfully

Đọc và ghi tệp

Euphoria cung cấp một tập hợp các phương pháp truy cập để giúp cuộc sống của chúng ta dễ dàng hơn khi đọc hoặc ghi tệp ở chế độ văn bản hoặc chế độ nhị phân. Hãy để chúng tôi xem cách sử dụng phương thức printf ()get () để đọc và ghi tệp.

Các printf () Phương pháp

Phương thức printf () ghi bất kỳ chuỗi nào vào một tệp đang mở.

Cú pháp

printf(fn, st, x)

Đây là các thông số -

  • fn - Bộ mô tả tệp nhận được từ phương thức open ().

  • st - Định dạng chuỗi trong đó số thập phân hoặc nguyên tử được định dạng bằng% d và chuỗi hoặc chuỗi được định dạng bằng% s.

  • x- Nếu x là một dãy thì các định dạng từ st được ghép với các phần tử tương ứng của x. Nếu x là một nguyên tử, thì st thường chỉ chứa một định dạng định dạng và nó được áp dụng cho x. Tuy nhiên; nếu st chứa nhiều định dạng định dạng, thì mỗi định dạng được áp dụng cho cùng một giá trị x.

Thí dụ

Ví dụ sau đây mở một tệp và viết tên và tuổi của một người trong tệp này:

#!/home/euphoria-4.0b2/bin/eui

integer file_num
constant ERROR = 2
constant STDOUT = 1

file_num = open("myfile.txt", "w")

if file_num = -1 then
   puts(ERROR, "couldn't open myfile\n")
else
   puts(STDOUT, "File opend successfully\n")
end if

printf(file_num, "My name is %s and age is %d\n", {"Zara", 8})

if file_num = -1 then
   puts(ERROR, "No need to close the file\n")
else
   close( file_num )
   puts(STDOUT, "File closed successfully\n")
end if

Ví dụ trên tạo tệp myfile.txt . Là ghi nội dung đã cho vào tệp đó và cuối cùng đóng lại. Nếu bạn mở tệp này, nó sẽ có nội dung sau:

My name is Zara and age is 8

Các nhận () Phương pháp

Phương thức get () đọc một chuỗi từ một tệp đang mở.

Cú pháp

gets(file_num)

Tham số được truyền ở đây là mô tả tệp trả về bởi phương thức opend () . Phương thức này bắt đầu đọc từ đầu dòng của tệp. Các ký tự có giá trị từ 0 đến 255. Nguyên tử -1 được trả về ở cuối tệp.

Thí dụ

Hãy để chúng tôi lấy một tệp myfile.txt đã được tạo.

#!/home/euphoria-4.0b2/bin/eui

integer file_num
object line

constant ERROR = 2
constant STDOUT = 1

file_num = open("myfile.txt", "r")
if file_num = -1 then
   puts(ERROR, "couldn't open myfile\n")
else
   puts(STDOUT, "File opend successfully\n")
end if

line = gets(file_num)
printf( STDOUT, "Read content : %s\n", {line})

if file_num = -1 then
   puts(ERROR, "No need to close the file\n")
else
   close( file_num )
   puts(STDOUT, "File closed successfully\n")
end if

Điều này tạo ra kết quả sau:

File opend successfully
Read content : My name is Zara and age is 8

File closed successfully

Euphoria cung cấp danh sách nhiều phương pháp giúp bạn thao tác với tệp. Các phương pháp này được liệt kê trong Quy trình Thư viện Euphoria .