Rexx - Hướng dẫn nhanh

Rexx (Restructured Extended Executor)được thiết kế để trở thành một ngôn ngữ kịch bản. Mục tiêu của nó là làm cho việc viết kịch bản trở nên dễ dàng, nhanh chóng, đáng tin cậy và không có lỗi nhất có thể. Nhiều ngôn ngữ lập trình được thiết kế để tương thích với các ngôn ngữ cũ hơn và được viết cho các đối tượng hoặc nền tảng cụ thể. Rexx bỏ qua các mục tiêu không liên quan. Nó đã được thiết kế ngay từ ngày đầu tiên để trở nên mạnh mẽ nhưng vẫn dễ sử dụng.

Rexx được thiết kế và thực hiện đầu tiên, trong ngôn ngữ lắp ráp, như một dự án 'của thời gian' giữa 20 ngày tháng 3 năm 1979 và giữa năm 1982 bởi Mike Cowlishaw của IBM, ban đầu như một ngôn ngữ lập trình kịch bản để thay thế các ngôn ngữEXEC and EXEC 2. Nó được thiết kế để trở thànhmacro or scripting languagecho bất kỳ hệ thống nào. Như vậy, Rexx được coi là tiền thân của Tcl và Python. Rexx cũng được người tạo ra nó dự định là một phiên bản đơn giản và dễ học hơn của ngôn ngữ lập trình PL / I.

Đặc điểm của Rexx

Rexx là một ngôn ngữ lập trình có các tính năng chính sau:

  • Cú pháp đơn giản

  • Khả năng định tuyến các lệnh đến nhiều môi trường

  • Khả năng hỗ trợ các chức năng, thủ tục và lệnh liên quan đến một môi trường gọi cụ thể.

  • Một ngăn xếp tích hợp, với khả năng tương tác với ngăn xếp máy chủ nếu có.

  • Bộ hướng dẫn nhỏ chỉ chứa hai chục lệnh

  • Cú pháp biểu mẫu tự do

  • Mã thông báo không phân biệt chữ hoa chữ thường, bao gồm cả tên biến

  • Cơ sở chuỗi ký tự

  • Nhập dữ liệu động, không cần khai báo

  • Không có từ khóa dành riêng, ngoại trừ trong ngữ cảnh địa phương

  • Không bao gồm các cơ sở tệp

  • Độ chính xác số tùy ý

  • Số học thập phân, dấu phẩy động

  • Một loạt các chức năng tích hợp sẵn, đặc biệt là xử lý chuỗi và văn bản

  • Quản lý bộ nhớ tự động

  • Bảo vệ va chạm

  • Cấu trúc dữ liệu địa chỉ nội dung

  • Mảng liên kết

  • Truy cập đơn giản vào các lệnh và phương tiện hệ thống

  • Xử lý lỗi đơn giản, theo dõi và gỡ lỗi tích hợp

  • Một số hạn chế nhân tạo

  • Cơ sở I / O được đơn giản hóa

Trang web chính thức của Rexx là www.oorexx.org

Trước khi có thể bắt đầu làm việc trên Rexx, bạn cần đảm bảo rằng bạn có phiên bản Rexx đầy đủ chức năng đang chạy trên hệ thống của mình. Chương này sẽ giải thích việc cài đặt Rexx và cấu hình tiếp theo của nó trên máy Windows để bắt đầu với Rexx.

Đảm bảo đáp ứng các yêu cầu Hệ thống sau đây trước khi tiến hành cài đặt.

yêu cầu hệ thống

Ký ức RAM 2 GB (khuyến nghị)
Dung lượng đĩa Không có yêu cầu tối thiểu. Tốt nhất là có đủ dung lượng để lưu trữ các chương trình sẽ được tạo bằng Rexx.
Phiên bản hệ điều hành Rexx có thể được cài đặt trên Windows, Ubuntu / Debian, Mac OS X.

Đang tải xuống Rexx

Để tải xuống Rexx, bạn nên sử dụng URL sau: https://www.oorexx.org/download.html

Trang này có nhiều lượt tải xuống cho các phiên bản Rexx khác nhau như được hiển thị trong ảnh chụp màn hình sau.

Nhấp vào 'tệp cài đặt ooRexx' trong bảng có tiêu đề của Bản phát hành 4.2.0.

Sau đó, bạn sẽ được chuyển hướng đến trang sau.

Bấm vào ooRexx-4.2.0.windows.x86_64.exe để tải xuống 64-bitphiên bản của phần mềm. Chúng ta sẽ thảo luận về việc cài đặt phần mềm trong chương sau.

Các bước sau đây sẽ giải thích chi tiết cách cài đặt Rexx trên hệ thống Windows.

Step 1- Khởi chạy Trình cài đặt đã tải xuống trong phần trước đó. Sau khi trình cài đặt khởi động, hãy nhấp vào nút Chạy.

Step 2 - Nhấn vào nút tiếp theo trên màn hình sau để tiến hành cài đặt.

Step 3 - Nhấp vào I Agree để tiếp tục.

Step 4 - Chấp nhận default components và sau đó nhấp vào nút tiếp theo.

Step 5 - Chọn vị trí cài đặt và bấm vào nút Tiếp theo.

Step 6 - Chấp nhận các quy trình mặc định sẽ được cài đặt và nhấp vào nút Tiếp theo.

Step 7 - Chọn các liên kết tệp mặc định và nhấp vào nút Tiếp theo.

Step 8 - Nhấp vào hộp kiểm gửi các mục Rexx đến tệp thực thi và sau đó nhấp vào nút Tiếp theo như thể hiện trong ảnh chụp màn hình sau.

Step 9- Trong màn hình tiếp theo, chọn trình chỉnh sửa để làm việc với các tệp Rexx. Giữ notepad làm tùy chọn mặc định. Đồng thời chấp nhận phần mở rộng mặc định cho mỗi tệp Rexx.

Step 10 - Chấp nhận cài đặt mặc định trên màn hình sau xuất hiện và nhấp vào nút Tiếp theo để tiếp tục cài đặt.

Step 11 - Cuối cùng nhấn vào nút Install để tiến hành cài đặt.

Step 12 - Sau khi cài đặt xong, bạn cần nhấp vào nút Next để tiếp tục.

Step 13 - Nhấn vào nút Finish để hoàn tất cài đặt.

Trong chương này, chúng ta sẽ thảo luận về cách cài đặt các trình cắm trên popular IDE’s (Integrated Development Environment). Rexx là một ngôn ngữ lập trình cũng có sẵn trong các IDE phổ biến nhưEclipse. Hãy xem cách chúng ta có thể nhận được plugin cần thiết trong các IDE này, để bạn có nhiều lựa chọn hơn khi làm việc với Rexx.

Cài đặt trong Eclipse

Để cài đặt Rexx trong Eclipse không gặp sự cố, bạn sẽ cần tuân thủ các bước sau.

Step 1 - Mở Eclipse và nhấp vào mục Menu, Help → Eclipse Marketplace như thể hiện trong ảnh chụp màn hình sau.

Step 2 - Trong hộp thoại tiếp theo, nhập Rexx vào tiêu chí tìm kiếm và nhấp vào nút tìm kiếm.

Sau khi hoàn tất, hãy nhấp vào nút Cài đặt.

Step 3 - Nhấp vào nút Xác nhận để tiếp tục cài đặt các tính năng.

Step 4- Sau đó, Eclipse sẽ tải xuống các tệp cần thiết để bắt đầu cài đặt. Sau khi hoàn tất, Eclipse sẽ yêu cầu chấp nhận các thỏa thuận cấp phép. Nhấp vào chấp nhận các thỏa thuận cấp phép và sau đó nhấp vào nút Kết thúc như được hiển thị trong ảnh chụp màn hình sau.

Sau đó, Eclipse sẽ bắt đầu cài đặt phần mềm ở chế độ nền.

Step 5- Bạn có thể sẽ nhận được cảnh báo bảo mật (như trong ảnh chụp màn hình sau). Nhấp vào nút OK để tiếp tục.

Step 6- Bạn sẽ được nhắc khởi động lại Eclipse sau khi các bản cập nhật được cài đặt. Bấm Có để khởi động lại Eclipse.

Để hiểu được cú pháp cơ bản của Rexx, trước tiên chúng ta hãy xem một chương trình Hello World đơn giản.

Thí dụ

/* Main program */ 
say "Hello World"

Có thể thấy chương trình hello world đơn giản như thế nào. Nó là một dòng script đơn giản được sử dụng để thực hiện chương trình Hello World.

Những điều sau đây cần được lưu ý về chương trình trên:

  • Các say command được sử dụng để xuất một giá trị cho bảng điều khiển.

  • Các /* */ được sử dụng cho các bình luận trong Rexx.

Đầu ra của chương trình trên sẽ là:

Hello World

Hình thức chung của một tuyên bố

Trong Rexx, chúng ta hãy xem một dạng tổng quát của một chương trình. Hãy xem ví dụ sau.

/* Main program */ 
say add(5,6) 
exit 
add: 
parse arg a,b 
return a + b

Đầu ra của chương trình trên sẽ là:

11

Hãy xem qua những gì chúng ta đã hiểu từ chương trình trên -

  • Add là một hàm được định nghĩa để cộng 2 số.

  • Trong chương trình chính, giá trị của 5 và 6 được dùng làm tham số cho hàm add.

  • Từ khóa exit dùng để thoát khỏi chương trình chính. Điều này được sử dụng để phân biệt chương trình chính với chức năng thêm.

  • Hàm add được phân biệt bằng ký hiệu ':'.

  • Câu lệnh phân tích cú pháp được sử dụng để phân tích cú pháp các đối số đến.

  • Cuối cùng, câu lệnh return được sử dụng để trả về tổng các giá trị số.

Các chương trình con và hàm

Trong Rexx, mã thường được chia thành các chương trình con và chức năng. Các chương trình con và hàm được sử dụng để phân biệt mã thành các đơn vị logic khác nhau. Sự khác biệt chính giữa chương trình con và hàm là các hàm trả về một giá trị trong khi các chương trình con thì không.

Dưới đây là ví dụ về sự khác biệt chính giữa một chương trình con và một hàm để triển khai bổ sung:

Thực hiện chức năng

/* Main program */ 
say add(5,6) 
exit 
add: 
parse arg a,b 
return a + b

Thực hiện chương trình con

/* Main program */ 
add(5,6) 
exit 
add: 
parse arg a,b 
say a + b

Đầu ra của cả hai chương trình sẽ là giá trị 11.

Thực thi lệnh

Rexx có thể được sử dụng như một ngôn ngữ điều khiển cho nhiều hệ thống dựa trên lệnh. Cách Rexx thực hiện các lệnh trong các hệ thống này như sau. Khi Rexx gặp một dòng chương trình không phải là một lệnh cũng không phải là một phép gán, nó sẽ coi dòng đó là một biểu thức chuỗi sẽ được đánh giá và sau đó được chuyển đến môi trường.

Một ví dụ như sau:

Thí dụ

/* Main program */ 
parse arg command 
command "file1" 
command "file2" 
command "file3" 
exit

Mỗi dòng trong số ba dòng tương tự trong chương trình này là một biểu thức chuỗi thêm tên của một tệp (chứa trong các hằng chuỗi) vào tên của một lệnh (được cung cấp dưới dạng tham số). Chuỗi kết quả được chuyển đến môi trường để được thực thi dưới dạng lệnh. Khi lệnh kết thúc, biến "rc" được đặt thành mã thoát của lệnh.

Kết quả của chương trình trên như sau:

sh: file1: command not found
     3 *-* command "file1" 
       >>>   " file1"
       +++   "RC(127)"
sh: file2: command not found
     4 *-* command "file2" 
       >>>   " file2"
       +++   "RC(127)"
sh: file3: command not found
     5 *-* command "file3" 
       >>>   " file3"
       +++   "RC(127)"

Từ khóa trong Rexx

Cú pháp miễn phí của REXX ngụ ý rằng một số ký hiệu được dành riêng cho việc sử dụng của bộ xử lý ngôn ngữ trong các ngữ cảnh nhất định.

Trong các hướng dẫn cụ thể, một số ký hiệu có thể được dành riêng để tách các phần của hướng dẫn. Những ký hiệu này được gọi là từ khóa. Ví dụ về các từ khóa REXX làWHILE in a DO instruction, và THEN (đóng vai trò là dấu chấm dứt mệnh đề trong trường hợp này) theo sau IF or WHEN clause.

Ngoài những trường hợp này, chỉ những ký hiệu đơn giản là mã thông báo đầu tiên trong mệnh đề và không được theo sau bởi dấu "=" hoặc ":" mới được kiểm tra để xem chúng có phải là từ khóa hướng dẫn hay không. Bạn có thể sử dụng các ký hiệu một cách tự do ở những nơi khác trong các mệnh đề mà chúng không bị coi là từ khóa.

Nhận xét trong Rexx

Nhận xét được sử dụng để ghi lại mã của bạn. Nhận xét dòng đơn được xác định bằng cách sử dụng / * * / ở bất kỳ vị trí nào trong dòng.

Một ví dụ như sau:

/* Main program */
/* Call the add function */
add(5,6)

/* Exit the main program */
exit add:

/* Parse the arguments passed to the add function */ parse arg a,b
/* Display the added numeric values */
say a + b

Nhận xét cũng có thể được viết giữa một dòng mã như được hiển thị trong chương trình sau:

/* Main program */ 
/* Call the add function */ 
add(5,6) 

/* Exit the main program */ 
exit 
add: 
parse    /* Parse the arguments passed to the add function */ 
arg a,b 

/* Display the added numeric values */ 
say a + b

Đầu ra của chương trình trên sẽ là:

11

Bạn cũng có thể có nhiều dòng trong một nhận xét như được hiển thị trong chương trình sau:

/* Main program 
The below program is used to add numbers 
Call the add function */ 
add(5,6) 
exit 
add: 
parse arg a,b 
say a + b

Đầu ra của chương trình trên sẽ là:

11

Trong bất kỳ ngôn ngữ lập trình nào, bạn cần sử dụng các biến khác nhau để lưu trữ các loại thông tin. 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ành một số không gian trong bộ nhớ để lưu giá trị được liên kết với biến đó.

Bạn có thể muốn lưu trữ thông tin của nhiều kiểu dữ liệu khác nhau như Chuỗi, Ký tự, Ký tự rộng, Số nguyên, Dấu phẩy động, Boolean, v.v. Dựa trên kiểu dữ liệu của một biến, hệ điều hành phân bổ bộ nhớ và quyết định những gì có thể được lưu trữ trong phần dành riêng ký ức.

Các loại dữ liệu tích hợp

Rexx cung cấp nhiều loại dữ liệu tích hợp sẵn. Sau đây là danh sách các kiểu dữ liệu được định nghĩa trong Rexx.

  • Integer- Một chuỗi số không chứa dấu thập phân hoặc số mũ. Ký tự đầu tiên có thể làa plus (+) or minus (-) sign. Số được đại diện phải nằm trong khoảng từ -2147483648 đến 2147483647, bao gồm cả.

  • Big Integer- Chuỗi số không chứa dấu thập phân hoặc số mũ. Ký tự đầu tiên có thể là dấu cộng (+) hoặc dấu trừ (-). Số được đại diện phải nằm trong khoảng từ -9223372036854775808 đến 2147483648, bao gồm hoặc từ 2147483648 đến 9223372036854775807.

  • Decimal - Nó sẽ từ một trong các định dạng sau -

    • Chuỗi số có chứa dấu thập phân nhưng không có số nhận dạng số mũ. Cácp đại diện cho độ chính xác và sđại diện cho tỷ lệ của số thập phân mà chuỗi đại diện. Ký tự đầu tiên có thể là dấu cộng (+) hoặc dấu trừ (-).

    • Một chuỗi các số does not contain a decimal pointhoặc một định danh số mũ. Ký tự đầu tiên có thể là dấu cộng (+) hoặc dấu trừ (-). Số được biểu thị nhỏ hơn -9223372036854775808 hoặc lớn hơn 9223372036854775807.

  • Float- Một chuỗi biểu thị một số trong ký hiệu khoa học. Chuỗi bao gồm một loạt các số theo sau là một số nhận dạng số mũ (chữ E hoặc e theo sau là dấu cộng (+) hoặc dấu trừ (-) tùy chọn và một loạt các số). Chuỗi có thể bắt đầu bằng dấu cộng (+) hoặc dấu trừ (-).

  • String - Một chuỗi ký tự bình thường.

Sau đây là một số ví dụ về cách sử dụng từng kiểu dữ liệu. Một lần nữa, mỗi kiểu dữ liệu sẽ được thảo luận chi tiết trong các chương tiếp theo. Điều này chỉ giúp bạn bắt kịp tốc độ với mô tả ngắn gọn về các loại dữ liệu được đề cập ở trên.

Số nguyên

Ví dụ về cách sử dụng kiểu dữ liệu số được hiển thị trong chương trình sau. Chương trình này hiển thị phép cộng 2 số nguyên.

Example

/* Main program 
The below program is used to add numbers 
Call the add function */ 
add(5,6)  

exit 
add:  

parse arg a,b 
say a + b

Đầu ra của chương trình trên sẽ là:

11

Số nguyên lớn

Chương trình sau đây cho thấy khả năng của Rexx để xử lý các số nguyên lớn. Chương trình này hướng dẫn cách cộng 2 số nguyên lớn.

Example

/* Main program 
The below program is used to add numbers 
Call the add function */ 
add(500000000000,6000000000000000000000)  

exit 
add:  

parse arg a,b 
say a + b

Đầu ra của chương trình trên sẽ là:

6.00000000E+21

Thập phân

Chương trình sau đây cho thấy khả năng của Rexx để xử lý các số thập phân. Chương trình này hướng dẫn cách cộng 2 số thập phân.

Example

/* Main program 
The below program is used to add numbers 
Call the add function */ 
add(5.5,6.6)  

exit 
add:  

parse arg a,b 
say a + b

Đầu ra của chương trình trên sẽ là:

12.1

Phao nổi

Ví dụ sau đây cho thấy các trường hợp cách một số có thể hoạt động như một số thực.

Example

/* Main program 
The below program is used to add numbers 
Call the add function */ 
add(12E2,14E4)  

exit 
add:  

parse arg a,b 
say a + b

Đầu ra của chương trình trên sẽ là:

141200

Chuỗi

Ví dụ về cách sử dụng kiểu dữ liệu Tuple được trình bày trong chương trình sau.

Ở đây chúng tôi đang xác định một Tuple Ptrong đó có 3 điều khoản. Cáctuple_size là một hàm có sẵn được định nghĩa trong Rexx có thể được sử dụng để xác định kích thước của tuple.

Example

/* Main program */ 
display("hello")  

exit 
display:  

parse arg a 
say a

Đầu ra của chương trình trên sẽ là:

hello

Trong Rexx, tất cả các biến được ràng buộc với câu lệnh '='. Tên biến đôi khi được gọi là ký hiệu. Chúng có thể bao gồm các chữ cái, chữ số và các ký tự như '. ! ? _'. Tên biến bạn tạo không được bắt đầu bằng chữ số hoặc dấu chấm. Tên biến đơn giản không bao gồm dấu chấm. Tên biến bao gồm dấu chấm được gọi là biến ghép và đại diện cho một mảng hoặc bảng.

Sau đây là các loại biến cơ bản trong Rexx cũng đã được giải thích trong chương trước -

  • Integers- Điều này được sử dụng để biểu diễn một số nguyên hoặc một số thực. Một ví dụ cho điều này là 10.

  • Big integers - Điều này đại diện cho một giá trị số nguyên lớn.

  • Decimal - Giá trị thập phân là một chuỗi số có chứa dấu thập phân nhưng không có số mũ.

  • Float - Giá trị float là một chuỗi biểu thị một số trong ký hiệu khoa học.

  • String - Một loạt các ký tự xác định một chuỗi trong Rexx.

Các loại hàm biến khác nhau

Trong phần này, chúng ta sẽ thảo luận về các chức năng khác nhau mà một biến có thể thực hiện.

Khai báo biến

Cú pháp chung của việc xác định một biến được hiển thị như sau:

var-name = var-value

Ở đâu

  • var-name - Đây là tên của biến.

  • var-value - Đây là giá trị liên kết với biến.

Chương trình sau đây là một ví dụ về khai báo biến:

Example

/* Main program */ 
X = 40 
Y = 50 
Result = X + Y 
say Result

Trong ví dụ trên, chúng ta có 2 biến, một là X được ràng buộc với giá trị 40 và tiếp theo là Y được ràng buộc với giá trị của 50. Một biến khác được gọi là Kết quả được liên kết với việc bổ sungX and Y.

Kết quả của chương trình trên sẽ như sau:

90

Đặt tên biến

Tên biến đôi khi được gọi là ký hiệu. Chúng có thể bao gồm các chữ cái, chữ số và các ký tự như '. ! ? _ '. Tên biến bạn tạo không được bắt đầu bằng chữ số hoặc dấu chấm.

Nếu một biến chưa được gán giá trị, nó được gọi là chưa được khởi tạo. Giá trị của một biến chưa được khởi tạo là tên của chính biến đó được viết hoa.

Ví dụ về một biến chưa được gán như sau:

Example

/* Main program */ 
unassignedvalue 
say unassignedvalue

Nếu bạn chạy chương trình trên, bạn sẽ nhận được kết quả sau:

UNASSIGNEDVALUE
sh: UNASSIGNEDVALUE: command not found
     2 *-* unassignedvalue 
       >>>   "UNASSIGNEDVALUE"
       +++   "RC(127)"

Các biến có thể được gán giá trị nhiều lần. Chương trình dưới đây cho thấy cách giá trị của X có thể được gán một giá trị nhiều lần.

Example

/* Main program */ 
X = 40 
X = 50 
say X

Kết quả của chương trình trên sẽ như sau:

50

In các biến

Giá trị của các biến được in bằng cách sử dụng saychỉ huy. Sau đây là một ví dụ về việc in nhiều biến.

Example

/* Main program */ 
X = 40 

/* Display an Integer */ 
say X 
Y = 50.5 

/* Display a Float */ 
say Y 
Z = "hello" 

/* Display a string */ 
say Z

Kết quả của chương trình trên sẽ như sau:

40 
50.5 
hello

Một toán tử là một ký hiệu yêu cầu trình biên dịch thực hiện các thao tác toán học hoặc logic cụ thể.

Rexx có nhiều loại toán tử khác nhau cũng được giải thích chi tiết như sau:

  • Toán tử số học
  • Toán tử quan hệ
  • Toán tử logic
  • Toán tử bitwise

Toán tử số học

Ngôn ngữ Rexx hỗ trợ các Toán tử số học bình thường như bất kỳ ngôn ngữ nào. Sau đây là các toán tử số học có sẵn trong Rexx.

Hiển thị ví dụ

Nhà điều hành Sự miêu tả Thí dụ
+ Phép cộng hai toán hạng 1 + 2 sẽ cho 3
- Trừ toán hạng thứ hai với toán hạng đầu tiên 1 - 2 sẽ cho -1
Phép nhân của cả hai toán hạng 2 ∗ 2 sẽ cho 4
/ Chia tử số cho mẫu số 2/2 sẽ cho 1
// Phần dư của số thứ nhất chia cho số thứ hai 3 // 2 sẽ cho 1
% Thành phần div sẽ thực hiện phép chia và trả về thành phần số nguyên. 3% 2 sẽ cho 1

Toán tử quan hệ

Toán tử quan hệ cho phép so sánh các đối tượng. Sau đây là các toán tử quan hệ có sẵn trong Rexx. Trong Rexx, giá trị true được ký hiệu là 1 và giá trị false được ký hiệu là 0.

Hiển thị ví dụ

Nhà điều hành Sự miêu tả Thí dụ
== Kiểm tra sự bằng nhau giữa hai đối tượng 2 = 2 sẽ cho 1
< Kiểm tra xem đối tượng bên trái có nhỏ hơn toán hạng bên phải hay không. 2 <3 sẽ cho 1
= < Kiểm tra xem đối tượng bên trái nhỏ hơn hoặc bằng toán hạng bên phải. 2 = <3 sẽ cho 1
> Kiểm tra xem đối tượng bên trái có lớn hơn toán hạng bên phải hay không. 3> 2 sẽ cho 1
> = Kiểm tra xem đối tượng bên trái có lớn hơn hoặc bằng toán hạng bên phải hay không. 3> 2 sẽ cho 1

Toán tử logic

Các toán tử logic được sử dụng để đánh giá các biểu thức Boolean. Sau đây là các toán tử logic có sẵn trong Rexx.

Hiển thị ví dụ

Nhà điều hành Sự miêu tả Thí dụ
& Đây là toán tử logic "và" 1 hoặc 1 sẽ cho 1
| Đây là toán tử logic "hoặc" 1 hoặc 0 sẽ cho 1
\ Đây là toán tử logic "không phải" \ 0 sẽ cho 1
&& Đây là toán tử “hoặc” độc quyền hợp lý 1 && 0 sẽ cho 1

Toán tử Bitwise

Groovy cung cấp bốn toán tử bitwise. Dưới đây là các toán tử bitwise có sẵn trong Groovy.

Hiển thị ví dụ

Sr.No. Nhà điều hành & Mô tả
1

bitand

Đây là toán tử "và" theo bitwise

2

bitor

Đây là toán tử "hoặc" theo bitwise

3

bitxor

Đây là bitwise "xor" hoặc Exclusive hoặc toán tử

ưu tiên điều hành

Bảng sau đây cho thấy ưu tiên toán tử cho các toán tử Rexx theo thứ tự ưu tiên giảm dần của ưu tiên của chúng.

Các nhà khai thác Quyền ưu tiên
Toán tử tiền tố + - \
Cộng và trừ + -
Toán tử so sánh = ==> <> = <=
Logic AND &
Logic HOẶC |
ĐỘC QUYỀN HOẶC &&

Mảng trong bất kỳ ngôn ngữ lập trình nào cho phép bạn nhóm một danh sách các giá trị cùng kiểu. Việc sử dụng mảng là nó cho phép bạn xây dựng một danh sách các loại giá trị tương tựsortable, searchable và có thể được easily manipulated. Rexx cũng cho phép người ta xác định mảng. Các mảng này có thể là một chiều hoặc nhiều chiều.

Mảng rexx có thể thưa thớt. Có nghĩa là, không phải mọi vị trí mảng đều phải có giá trị hoặc thậm chí được khởi tạo. Có thể có các vị trí mảng trống hoặc vị trí giữa các vị trí có chứa các phần tử dữ liệu. Hoặc mảng có thể dày đặc, trong đó các vị trí mảng liên tiếp đều chứa các phần tử dữ liệu.

Trong nhiều ngôn ngữ lập trình, bạn phải quan tâm đến chỉ số con của mục nhập đầu tiên trong bảng là gì. Chỉ số con đầu tiên là 0 hay 1? Trong Rexx, chỉ số đầu tiên là bất cứ thứ gì bạn sử dụng! Vì vậy, hãy nhập phần tử mảng đầu tiên vào vị trí 0 hoặc 1 tùy thích.

array_name.0 = ‘first element’

hoặc là

array_name.1 = ‘first element’

Hãy xem xét các hoạt động khác nhau có sẵn cho mảng.

Tạo Mảng

Mảng được tạo với cùng một quy ước đặt tên được sử dụng cho các biến trong Rexx.

Cú pháp chung để tạo mảng như sau:

Arrayname.index = value

Ở đâu

  • Arrayname - Đây là tên được cung cấp cho mảng.

  • Index - Đây là vị trí chỉ mục trong mảng để tham chiếu đến một phần tử cụ thể.

  • Value - Đây là giá trị được gán cho phần tử chỉ số trong mảng.

Ví dụ về khai báo mảng như sau:

Example

/* Main program */ 
list.1 = 0 
list.2 = 0 
list.3 = 0

Những điểm sau đây cần lưu ý về chương trình trên:

  • Tên của mảng được đưa ra dưới dạng danh sách
  • Có 3 phần tử của mảng được khởi tạo bằng giá trị 0.

Gán giá trị cho một phần tử mảng

Giá trị có thể được gán lại cho các phần tử mảng theo cách giống như các phần tử mảng được khởi tạo.

Chương trình sau đây là một ví dụ về các giá trị có thể được gán cho các giá trị chỉ mục khác nhau của một mảng hiện có.

/* Main program */ 
list.1 = 0 
list.2 = 0 
list.3 = 0 

/* Assigning new values to the array*/ 
list.1 = 10 
list.3 = 30

Hiển thị các giá trị của một mảng

Các giá trị của một mảng có thể được hiển thị bằng cách tham chiếu đến vị trí chỉ mục của phần tử mảng. Ví dụ sau cho thấy để truy cập các phần tử khác nhau của mảng.

Example

/* Main program */ 
list.1 = 0 
list.2 = 0 
list.3 = 0 

/* Assigning new values to the array*/ 
list.1 = 10 
list.3 = 30 
say list.1 
say list.2 
say list.3

Kết quả của chương trình trên sẽ như sau:

10
0
30

Sao chép Mảng

Tất cả các phần tử của một mảng có thể được sao chép vào một mảng khác. Cú pháp chung của điều này như sau:

Newarray. = sourcearray.

Ở đâu

  • Newarray - Đây là mảng mới trong đó các phần tử cần được sao chép vào.

  • Sourcearray - Đây là mảng nguồn mà từ đó các phần tử cần được sao chép.

Một ví dụ về cách các hoạt động sao chép cho mảng có thể được thực hiện trong chương trình sau:

Example

/* Main program */ 
list.1 = 0 
list.2 = 0 
list.3 = 0 

/* Assigning new values to the array*/ 
list.1 = 10 
list.3 = 30 
listnew. = list. 

say listnew.1 
say listnew.2 
say listnew.3

Đầu ra của chương trình trên sẽ là:

10
0
30

Lặp lại qua các phần tử mảng

Các phần tử của một mảng cũng có thể được lặp lại bằng cách sử dụng các câu lệnh lặp có sẵn trong Rexx. Một ví dụ về cách có thể thực hiện điều này như sau:

Example

/* Main program */ 
list.1 = 10 
list.2 = 20 
list.3 = 30 

number_of_elements = 3 
do j = 1 to number_of_elements 
say list.j 
end

Các điểm sau đây cần được lưu ý về chương trình trên:

  • Các do loop được sử dụng để lặp qua các phần tử của mảng.

  • Biến number_of_elements được sử dụng để lưu trữ số lượng phần tử trong mảng.

  • Các variable j được sử dụng để lặp qua từng phần tử của mảng.

Đầu ra của chương trình trên sẽ là:

10
20
30

Mảng hai chiều

Nó cũng đã được đề cập rằng chúng ta có thể xây dựng các mảng đa chiều trong Rexx. Hãy xem một ví dụ về cách chúng ta có thể triển khai mảng 2 chiều.

Example

/* Main program */ 
list.1 = 10 
list.1.1 = 11 
list.1.2 = 12 

say list.1 
say list.1.1 
say list.1.2

Kết quả của chương trình trên sẽ được hiển thị như sau:

10
11
12

Điểm sau đây cần lưu ý về chương trình trên:

  • Để tạo một mảng đa chiều, chúng ta có thể sử dụng một lớp lập chỉ mục khác. Vì vậy, trong ví dụ của chúng tôi, chúng tôi đã sử dụnglist.1.1 để tạo một mảng bên trong khác cho giá trị chỉ số 1 của mảng danh sách.

Cho đến nay chúng ta đã thấy các câu lệnh được thực hiện lần lượt theo cách tuần tự. Ngoài ra, các câu lệnh được cung cấp trong Rexx để thay đổi luồng điều khiển trong logic của chương trình. Sau đó, chúng được phân loại thành luồng báo cáo kiểm soát mà chúng ta sẽ nghiên cứu chi tiết.

Một câu lệnh lặp cho phép chúng ta thực hiện một câu lệnh hoặc một nhóm câu lệnh nhiều lần. Hình minh họa sau đây là dạng chung của câu lệnh lặp trong hầu hết các ngôn ngữ lập trình.

Hãy để chúng tôi thảo luận về các vòng lặp khác nhau được hỗ trợ bởi Rexx.

Sr.No. Loại vòng lặp & Mô tả
1 làm vòng lặp

Các do loopđược sử dụng để thực hiện một số câu lệnh trong một số lần nhất định. Số lần câu lệnh cần được thực hiện được xác định bởi giá trị được truyền vào vòng lặp do.

2 vòng lặp do-while

Câu lệnh do-while được sử dụng để mô phỏng vòng lặp while đơn giản có trong các ngôn ngữ lập trình khác.

3 vòng lặp do-cho đến

Vòng lặp do-Until là một biến thể nhỏ của vòng lặp do while. Vòng lặp này thay đổi trong thực tế là thoát ra khi điều kiện được đánh giá là sai.

Lặp lại có Kiểm soát

Các vòng lặp do có thể được cung cấp để thực hiện lặp lại có kiểm soát các câu lệnh.

Cú pháp

Cú pháp chung của loại câu lệnh này như sau.

do index = start [to limit] [by increment] [for count] 
statement #1 
statement #2 
end

Sự khác biệt trong câu lệnh này là có một chỉ mục được sử dụng để kiểm soát số lần vòng lặp được thực hiện. Thứ hai, có các tham số cho biết giá trị mà chỉ mục nên bắt đầu, kết thúc ở đâu và giá trị gia tăng là gì.

Sơ đồ dòng chảy

Hãy xem sơ đồ của vòng lặp này -

Từ sơ đồ trên, bạn có thể thấy rõ rằng vòng lặp được thực hiện dựa trên giá trị chỉ mục và cách giá trị chỉ mục được tăng lên.

Chương trình sau đây là một ví dụ về câu lệnh lặp có kiểm soát.

Thí dụ

/* Main program */ 
do i = 0 to 5 by 2 
   say "hello" 
end

Trong chương trình trên, giá trị của count iđược đặt thành 0 đầu tiên. Sau đó, nó được tăng lên theo số đếm 2 cho đến khi giá trị không lớn hơn 5.

Đầu ra của đoạn mã trên sẽ là:

hello 
hello 
hello

Cấu trúc ra quyết định yêu cầu người lập trình chỉ định một hoặc nhiều điều kiện để được đánh giá hoặc kiểm tra bởi chương trình.

Sơ đồ sau đây cho thấy dạng chung của cấu trúc ra quyết định điển hình được tìm thấy trong hầu hết các ngôn ngữ lập trình.

Có một câu lệnh hoặc các câu lệnh sẽ được thực hiện nếu điều kiện được xác định là truevà tùy chọn, các câu lệnh khác sẽ được thực thi nếu điều kiện được xác định là false.

Hãy xem xét các tuyên bố ra quyết định khác nhau có sẵn trong Rexx.

Sr.No. Tuyên bố & Mô tả
1 Câu lệnh if

Tuyên bố ra quyết định đầu tiên là iftuyên bố. Anif câu lệnh bao gồm một biểu thức Boolean theo sau là một hoặc nhiều câu lệnh.

2 Câu lệnh if-else

Câu lệnh ra quyết định tiếp theo là câu lệnh if-else. Anif có thể được theo sau bởi một câu lệnh else tùy chọn, thực thi khi biểu thức Boolean sai.

Câu lệnh If lồng nhau

Đôi khi có một yêu cầu để có multiple if statementsđược nhúng bên trong nhau, càng tốt trong các ngôn ngữ lập trình khác. Trong Rexx cũng có thể điều này.

Cú pháp

if (condition1) then 
   do 
      #statement1 
   end 
else 
   if (condition2) then 
      do 
      #statement2 
   end

Sơ đồ dòng chảy

Sơ đồ luồng của lồng nhau if như sau:

Hãy lấy một ví dụ về lồng nhau if tuyên bố -

Thí dụ

/* Main program */ 
i = 50 
if (i < 10) then 
   do 
      say "i is less than 10" 
   end 
else 
if (i < 7) then 
   do 
      say "i is less than 7" 
   end 
else 
   do 
      say "i is greater than 10" 
   end

Đầu ra của chương trình trên sẽ là:

i is greater than 10

Chọn câu lệnh

Rexx cung cấp câu lệnh select có thể được sử dụng để thực thi các biểu thức dựa trên đầu ra của câu lệnh select.

Cú pháp

Dạng chung của câu lệnh này là -

select 
when (condition#1) then 
statement#1 

when (condition#2) then 
statement#2 
otherwise 

defaultstatement 
end

Hoạt động chung của câu lệnh này như sau:

  • Câu lệnh select có một loạt các câu lệnh when để đánh giá các điều kiện khác nhau.

  • Mỗi when clause có một điều kiện khác cần được đánh giá và câu lệnh tiếp theo được thực thi.

  • Câu lệnh khác được sử dụng để chạy bất kỳ câu lệnh mặc định nào nếu điều kiện trước đó không evaluate to true.

Sơ đồ dòng chảy

Sơ đồ dòng chảy của select tuyên bố như sau

Chương trình sau đây là một ví dụ về câu lệnh trường hợp trong Rexx.

Thí dụ

/* Main program */ 
i = 50 
select 
when(i <= 5) then 
say "i is less than 5" 

when(i <= 10) then 
say "i is less than 10" 

otherwise 
say "i is greater than 10" 
end

Đầu ra của chương trình trên sẽ là:

i is greater than 10

Rexx có các kiểu dữ liệu sau đây khi nói đến số.

  • Integer- Một chuỗi số không chứa dấu thập phân hoặc số mũ. Ký tự đầu tiên có thể là dấu cộng (+) hoặc dấu trừ (-). Số được đại diện phải nằm trong khoảng từ -2147483648 đến 2147483647, bao gồm cả.

  • Big Integer- Chuỗi số không chứa dấu thập phân hoặc số mũ. Ký tự đầu tiên có thể là dấu cộng (+) hoặc dấu trừ (-). Số được đại diện phải nằm trong khoảng từ -9223372036854775808 đến 2147483648, bao gồm hoặc từ 2147483648 đến 9223372036854775807.

  • Decimal - Một trong các định dạng sau -

    • Một chuỗi số có chứa dấu thập phân nhưng không có số nhận dạng số mũ, trong đó p đại diện cho độ chính xác và sđại diện cho tỷ lệ của số thập phân mà chuỗi đại diện. Ký tự đầu tiên có thể là dấu cộng (+) hoặc dấu trừ (-).

    • Chuỗi số không chứa dấu thập phân hoặc số nhận dạng số mũ. Ký tự đầu tiên có thể là dấu cộng (+) hoặc dấu trừ (-). Số được biểu thị nhỏ hơn -9223372036854775808 hoặc lớn hơn 9223372036854775807.

  • Float- Một chuỗi biểu thị một số trong ký hiệu khoa học. Chuỗi bao gồm một loạt các số theo sau là một số nhận dạng số mũ (chữ E hoặc e theo sau là dấu cộng (+) hoặc dấu trừ (-) tùy chọn và một loạt các số). Chuỗi có thể bắt đầu bằng dấu cộng (+) hoặc dấu trừ (-).

Bây giờ chúng ta hãy xem xét sự khác biệt methods available for numbers.

Sr.No. Các phương thức có sẵn cho Numbers
1 ABS

Phương thức này trả về giá trị tuyệt đối của một số đầu vào.

2 TỐI ĐA

Phương thức này trả về giá trị lớn nhất từ ​​một danh sách các số.

3 MIN

Phương thức này trả về giá trị nhỏ nhất từ ​​một danh sách các số.

4 NGẪU NHIÊN

Phương thức này trả về một số được tạo ngẫu nhiên.

5 KÝ TÊN

Trả về 1 nếu số lớn hơn 0 hoặc 0 nếu số là 0 hoặc -1 nếu số nhỏ hơn 0.

6 TRUNC

Phương pháp này cắt bớt một số.

Các chuỗi trong Rexx được biểu thị bằng một dãy ký tự. Chương trình sau đây là một ví dụ về chuỗi:

/* Main program */ 
a = "This is a string" 
say a

Kết quả của chương trình trên như sau:

This is a string

Hãy thảo luận về một số phương pháp có sẵn trong Rexx cho chuỗi.

Sr.No. Các phương thức có sẵn trong Rexx cho chuỗi
1 trái

Phương thức này trả về một số ký tự nhất định từ bên trái của chuỗi.

2 đúng

Phương thức này trả về một số ký tự nhất định từ bên phải của chuỗi.

3 chiều dài

Phương thức này trả về số ký tự trong chuỗi.

4 đảo ngược

Phương thức này trả về các ký tự ở định dạng ngược lại.

5 so sánh

Phương pháp này so sánh 2 chuỗi. Trả về "0" nếu "string1" và "string2" giống hệt nhau. Nếu không, nó trả về vị trí của ký tự đầu tiên không khớp.

6 bản sao

Phương pháp này sao chép một string n số lần.

7 substr

Phương thức này nhận một chuỗi con từ một chuỗi cụ thể.

số 8 pos

Phương thức này trả về vị trí của một chuỗi trong chuỗi khác.

9 delstr

Phương thức này xóa một chuỗi con khỏi một chuỗi.

Mã trong Rexx thường được chia thành Hàm và Chương trình con. Sử dụng các hàm giúp tách mã thành nhiều đơn vị hợp lý hơn. Chúng ta hãy xem xét các chức năng này một cách chi tiết.

Xác định một chức năng

Cú pháp của một khai báo hàm như sau:

FunctionName: 
PARSE ARG arguement1, arguement2… arguementN 
Return value

Ở đâu,

  • FunctionName - Đây là tên được gán cho chức năng.

  • PARSE ARG - Đây là các từ khóa trong Rexx được sử dụng để đề cập đến các tham số đang được truyền vào hàm.

  • arguement1, arguement2… arguementN - Đây là các đối số được truyền cho hàm.

  • Return value - Đây là giá trị được trả về bởi hàm.

Chương trình sau đây là một ví dụ đơn giản về cách các hàm được sử dụng trong Rexx.

/* Main program */ 
say add(5,6) 
exit 
add: 
PARSE ARG a,b 
return a + b

Những điều sau đây cần được lưu ý về chương trình trên:

  • Chúng ta đang định nghĩa một hàm có tên là add chấp nhận 2 tham số a và b.

  • Hàm sử dụng câu lệnh return để trả về tổng của a và b.

  • Câu lệnh exit phải được sử dụng để biểu thị sự kết thúc của chương trình chính.

Kết quả của chương trình trên sẽ như sau:

11

Làm việc với các đối số

Trong Rexx, có những hàm cụ thể có thể được thực hiện để làm việc với các đối số. Hãy xem xét một số lập luận như vậy.

tranh luận

Phương thức này được sử dụng để trả về số lượng đối số được xác định cho hàm.

Syntax -

arg()

Parameters - Không có

Return Value - Phương thức này trả về số lượng đối số được xác định cho hàm.

Example -

/* Main program */ 
say add(5,6) 
exit 
add: 
PARSE ARG a,b 

say arg() 
return a + b

Output - Khi chạy đoạn chương trình trên ta sẽ được kết quả như sau.

2 
11

arg (chỉ mục)

Phương thức này được sử dụng để trả về giá trị của đối số tại vị trí cụ thể.

Syntax -

arg(index)

Parameter -

  • Index - Vị trí chỉ mục của đối số được trả về.

Return Value - Phương thức này trả về giá trị của đối số tại vị trí cụ thể.

Example -

/* Main program */ 
say add(5,6) 
exit 
add: 
PARSE ARG a,b 

say arg(1) 
return a + b

Output - Khi chạy đoạn chương trình trên ta sẽ được kết quả như sau.

5 
11

Các hàm đệ quy

Một hàm hoặc quy trình đệ quy là một hàm hoặc thói quen gọi chính nó. Bất kỳ hàm đệ quy nào cũng có thể được mã hóa theo kiểu không đệ quy truyền thống (hoặc lặp lại), nhưng đôi khi đệ quy cung cấp một giải pháp vấn đề tốt hơn. Không phải tất cả các ngôn ngữ lập trình đều hỗ trợ đệ quy; Rexx thì có.

Hãy xem một ví dụ về chương trình giai thừa nổi tiếng sử dụng các hàm đệ quy trong Rexx.

/* Main program */ 
do n = 1 to 5 
say 'The factorial of' n 'is:' factorial( n ) 
end 
return  

/* Function to get factorial */ 
factorial : procedure 
n = arg(1) 
if n = 1 then 
return 1 
return n * factorial( n - 1 )

Kết quả của chương trình trên như sau:

The factorial of 1 is: 1
The factorial of 2 is: 2 
The factorial of 3 is: 6 
The factorial of 3 is: 24 
The factorial of 3 is: 120

Ngăn xếp đôi khi được gọi là hàng đợi dữ liệu ngoài, nhưng chúng tôi tuân theo cách sử dụng phổ biến và gọi nó là ngăn xếp. Nó là một khối bộ nhớ về mặt logic bên ngoài Rexx. Các hướng dẫn như đẩy và xếp hàng đặt dữ liệu vào ngăn xếp và các hướng dẫn như kéo và phân tích cú pháp kéo trích xuất dữ liệu từ đó. Hàm tích hợp sẵn trong hàng đợi báo cáo có bao nhiêu mục trong ngăn xếp.

Hãy xem một ví dụ về ngăn xếp.

/* STACK: */
/* */ 
/* This program shows how to use the Rexx Stack as either a */ 

/* stack or a queue. */ 
do j = 1 to 3 
push ‘Stack: line #’ || j 

/* push 3 lines onto the stack */ 
end 
do j = 1 to queued() 

/* retrieve and display LIFO */ 
pull line 
say line 
end 
do j = 1 to 3 queue ‘Queue: line #’ || j 

/* queue 3 lines onto the stack */ 
end 
do queued() 

/* retrieve and display FIFO */ 
pull line 
say line 
end 
exit 0

Vòng lặp do đầu tiên trong chương trình đặt ba dòng dữ liệu vào ngăn xếp. Nó sử dụng lệnh push để làm điều này. Chúng tôi đánh số các dòng để khi chúng được truy xuất theo thứ tự LIFO, thứ tự của chúng được rõ ràng.

Các mục được đặt vào ngăn xếp bằng lệnh đẩy được truy xuất theo thứ tự LIFO -

do j = 1 to 3 
push ‘Stack: line #’ || j     /* push 3 lines onto the stack */ 
end

Khối mã tiếp theo cho thấy việc sử dụng hàm tích hợp sẵn trong hàng đợi để khám phá số dòng trên ngăn xếp, cũng như một vòng lặp để lấy tất cả các dòng từ ngăn xếp -

do j = 1 to queued()    /* retrieve and display LIFO */ 
pull line 
say line 
end

Vì ba mục đã được đặt trên ngăn xếp thông qua đẩy, chúng được truy xuất theo thứ tự LIFO.

Kết quả của chương trình trên sẽ như sau.

STACK: LINE #3 
STACK: LINE #2 
STACK: LINE #1

Rexx cung cấp một số phương pháp khi làm việc với I / O. Rexx cung cấp các lớp dễ dàng hơn để cung cấp các chức năng sau cho tệp.

  • Đọc tệp
  • Ghi vào tệp
  • Xem tệp là tệp hay thư mục

Các chức năng có sẵn trong Rexx cho I / O Tệp dựa trên cả đầu vào dòng và đầu vào ký tự và chúng tôi sẽ xem xét chi tiết các chức năng có sẵn cho cả hai.

Hãy cùng khám phá một số thao tác với tệp mà Rexx cung cấp. Với mục đích của những ví dụ này, chúng tôi sẽ giả định rằng có một tệp được gọi làNewFile.txt trong đó có các dòng văn bản sau -

Example1

Example2

Example3

Tệp này sẽ được sử dụng cho các thao tác đọc và ghi trong các ví dụ sau. Ở đây chúng ta sẽ thảo luận về cách đọc nội dung trên tệp theo những cách khác nhau.

Đọc nội dung của tệp một dòng tại một thời điểm

Các hoạt động chung trên tệp được thực hiện bằng cách sử dụng các phương pháp có sẵn trong chính thư viện Rexx. Việc đọc tệp là thao tác đơn giản nhất trong tất cả các thao tác trong Rexx.

Hãy xem chức năng được sử dụng để thực hiện điều này.

linein

Phương thức này trả về một dòng từ tệp văn bản. Tệp văn bản là tên tệp được cung cấp làm tham số đầu vào cho hàm.

Syntax -

linein(filename)

Parameter -

  • filename - Đây là tên của tệp mà từ dòng cần đọc.

Return Value - Phương thức này trả về một dòng của tệp tại một thời điểm.

Example -

/* Main program */ 
line_str = linein(Example.txt) 
say line_str

Đoạn mã trên khá đơn giản trong thực tế là Example.txttên tệp được cung cấp cho hàm linein. Sau đó, hàm này đọc một dòng văn bản và cung cấp kết quả cho biếnline_str.

Output - Khi chạy đoạn chương trình trên ta sẽ được kết quả như sau.

Example1

Đọc nội dung của tệp cùng một lúc

Trong Rexx, việc đọc tất cả nội dung của tệp có thể đạt được với sự trợ giúp của câu lệnh while. Câu lệnh while sẽ đọc từng dòng, từng dòng một cho đến khi kết thúc tệp.

Dưới đây là một ví dụ về cách đạt được điều này.

/* Main program */ 
do while lines(Example.txt) > 0  
line_str = linein(Example.txt) 
say line_str 
end

Trong chương trình trên, cần lưu ý những điều sau:

  • Hàm dòng đọc Example.txt tập tin.

  • Hàm while được sử dụng để kiểm tra xem có các dòng tiếp theo trong tệp Example.txt hay không.

  • Đối với mỗi dòng được đọc từ tệp, line_strbiến giữ giá trị của dòng hiện tại. Điều này sau đó được gửi đến bảng điều khiển dưới dạng đầu ra.

Output - Khi chạy đoạn chương trình trên ta sẽ được kết quả như sau.

Example1 
Example2 
Example3

Ghi nội dung vào tệp

Cũng giống như đọc tệp, Rexx cũng có khả năng ghi vào tệp. Hãy xem chức năng được sử dụng để thực hiện điều này.

dây chuyền

Phương thức này ghi một dòng vào tệp. Tệp mà dòng cần được ghi vào được cung cấp làm tham số cho câu lệnh lineout.

Syntax -

lineout(filename)

Parameter -

  • filename - Đây là tên của tệp mà từ đó dòng cần được ghi tới.

Return Value- Phương thức này trả về trạng thái của hàm lineout. Giá trị được trả về là 0 nếu dòng được viết thành công nếu không giá trị của 1 sẽ được trả về.

Example -

/* Main program */ 
out = lineout(Example.txt,"Example4")

Output - Bất cứ khi nào đoạn mã trên được chạy, dòng “Ví dụ4” sẽ được ghi vào tệp Example.txt.

Trong chương này, chúng ta sẽ thảo luận về một số chức năng khác có sẵn cho tệp.

Sr.No. Chức năng cho tệp
1 Dòng

Hàm này trả về giá trị 1 hoặc số dòng còn lại để đọc trong luồng đầu vào. Tên tệp được cung cấp làm đầu vào cho hàm.

2 suối

Chức năng này được sử dụng để kiểm tra trạng thái của một tập tin. Đôi khi cần phải kiểm tra trạng thái của một tệp trước khi nó được sử dụng. Nếu tệp bị hỏng hoặc không có sẵn, thì không thể thực hiện thêm thao tác nào trên tệp. Vì vậy, việc đầu tiên kiểm tra trạng thái của tệp sẽ có ý nghĩa hơn.

3 buồn rầu

Hàm này được sử dụng để đọc từng ký tự trong một tệp. Đôi khi các chương trình yêu cầu đọc ký tự tệp một cách khôn ngoan và do đó chức năng này có thể được sử dụng cho mục đích này.

4 ký tự

Hàm này trả về 1 hoặc số ký tự còn lại để đọc trong chính tệp. Tên tệp được đề cập như một tham số cho hàm.

5 charout

Hàm này được sử dụng để ghi từng ký tự vào một tệp. Tên tệp được nhập làm tham số cho hàm.

Trong bất kỳ ngôn ngữ lập trình nào, toàn bộ chương trình được chia thành các mô-đun logic. Điều này giúp bạn viết mã dễ dàng hơn và có thể bảo trì dễ dàng. Đây là yêu cầu cơ bản đối với bất kỳ ngôn ngữ lập trình nào.

Trong Rexx, các mô-đun có thể được viết bằng chương trình con và các hàm. Chúng ta hãy xem xét chi tiết các chương trình con.

Định nghĩa một chương trình con

Cú pháp của một khai báo hàm như sau:

FunctionName: 
   Statement#1 
   Statement#2 
   …. 
   Statement#N

Ở đâu,

  • FunctionName - Đây là tên được gán cho chương trình con.

  • Statement#1 .. Statement#N - Đây là danh sách các câu lệnh tạo nên chương trình con.

Chương trình sau đây là một ví dụ đơn giản cho thấy việc sử dụng các chương trình con.

/* Main program */ 
call add 
exit 
add: 
a = 5 
b = 10 
c = a + b 
say c

Những điều sau đây cần được lưu ý về chương trình trên:

  • Chúng tôi đang xác định một chương trình con được gọi là add.

  • Chương trình con thực hiện một chức năng thêm đơn giản.

  • Câu lệnh exit phải được sử dụng để biểu thị sự kết thúc của chương trình chính.

Kết quả của chương trình trên sẽ như sau:

15

Làm việc với các đối số

Nó cũng có thể làm việc với các đối số trong Rexx. Ví dụ sau đây cho thấy điều này có thể đạt được như thế nào.

/* Main program */ 
call add 1,2 
exit 
add: 
PARSE ARG a,b 
c = a + b 
say c

Những điều sau đây cần được lưu ý về chương trình trên:

  • Chúng tôi đang định nghĩa một chương trình con có tên là add, có 2 tham số.

  • Trong các chương trình con, 2 tham số được phân tích cú pháp bằng từ khóa PARSE và ARG.

Kết quả của chương trình trên sẽ như sau:

3

Các phương pháp lập luận khác nhau

Hãy xem xét một số phương pháp khác có sẵn cho các đối số.

tranh luận

Phương thức này được sử dụng để trả về số lượng đối số được xác định cho chương trình con.

Syntax -

arg()

Parameters - Không có

Return Value - Phương thức này trả về số đối số được xác định cho chương trình con.

Example -

/* Main program */ 
call add 1,2 
exit 
add: 
PARSE ARG a,b 

say arg() 
c = a + b 
say c

Khi chạy chương trình trên, chúng ta sẽ nhận được kết quả như sau.

2 
3

arg (chỉ mục)

Phương thức này được sử dụng để trả về giá trị của đối số tại vị trí cụ thể.

Syntax -

arg(index)

Parameters

  • Index - Vị trí chỉ mục của đối số được trả về.

Return Value - Phương thức này trả về giá trị của đối số tại vị trí cụ thể.

Example -

/* Main program */ 
call add 1,2 
exit 
add: 
PARSE ARG a,b 

say arg(1) 
c = a + b 
say c

Khi chạy chương trình trên, chúng ta sẽ nhận được kết quả như sau.

1 
3

Mỗi ngôn ngữ lập trình đều có một số chức năng cài sẵn giúp lập trình viên thực hiện một số tác vụ thông thường. Rexx cũng có rất nhiều chức năng được tích hợp sẵn.

Hãy xem xét tất cả các chức năng này có sẵn trong Rexx.

Sr.No. Các chức năng có sẵn trong Rexx
1 ĐỊA CHỈ

Phương thức này trả về tên của môi trường mà các lệnh Rexx hiện đang chạy.

2 TIẾNG KÊU BÍP

Phương pháp này tạo ra âm thanh trong hệ thống ở tần số và thời lượng cụ thể.

3 Loại dữ liệu

Phương thức này trả về giá trị 'NUM' nếu đầu vào là một số hợp lệ khác, nó sẽ trả về giá trị 'CHAR'. Bạn cũng có thể chỉ định nếu bạn muốn so sánh giá trị đầu vào với giá trị NUM hoặc CHAR. Trong mỗi trường hợp, giá trị trả về sẽ là 1 hoặc 0 tùy thuộc vào kết quả.

4 NGÀY

Phương thức này trả về ngày địa phương ở định dạng sau.

5 SỐ

Phương thức này trả về cài đặt hiện tại của SỐ ĐOẠN SỐ như được xác định trong hệ thống hiện tại.

6 ERRORTEXT

Phương thức này trả về thông báo lỗi Rexx được liên kết với số lỗi 'errorno'. Xin lưu ý rằng số lỗi phải là giá trị từ 0 đến 99. Điều này hữu ích trong trường hợp trong đó chương trình của bạn trả về mã lỗi và bạn muốn biết mã lỗi có nghĩa là gì.

7 HÌNH THỨC

Phương thức này trả về cài đặt hiện tại của 'MẪU SỐ' được sử dụng để thực hiện các phép tính toán học trên hệ thống.

số 8 THỜI GIAN

Phương thức này trả về giờ địa phương ở định dạng đồng hồ 24 giờ như được hiển thị trong chương trình sau.

9 TÊN NGƯỜI DÙNG

Phương thức này trả về id người dùng hiện tại đã đăng nhập vào hệ thống.

10 XRANGE

Phương thức này trả về các ký tự trong phạm vi được chỉ định bởi ký tự bắt đầu và kết thúc.

11 X2D

Phương thức này trả về chuyển đổi thập phân của một hexstring value.

12 X2C

Phương thức này trả về chuyển đổi ký tự của một giá trị chuỗi lục phân.

Một trong những ưu điểm lớn nhất của Rexx là khả năng tạo các tập lệnh có thể tái sử dụng. Thông thường trong các tổ chức ngày nay, việc có các tập lệnh có thể sử dụng lại là một giá trị bổ sung lớn trong việc tiết kiệm thời gian để thực hiện các công việc lặp đi lặp lại phổ biến.

Ví dụ, các nhóm công nghệ trong một tổ chức CNTT có thể cần phải có các tập lệnh để thực hiện các công việc thông thường hàng ngày. Các tác vụ này có thể bao gồm tương tác với hệ điều hành. Sau đó, các tập lệnh này có thể được lập trình để xử lý các mã trả về xấu hoặc lỗi.

Rexx cung cấp rất nhiều lệnh hệ thống có thể được sử dụng để thực hiện các tác vụ lặp đi lặp lại như vậy. Hãy xem xét một số lệnh hệ thống có sẵn trong Rexx.

dir

Đây là lệnh liệt kê thư mục thông thường được sử dụng trong Windows.

Cú pháp

dir

Thông số

không ai

Giá trị trả lại

Phương thức này trả về danh sách thư mục hiện tại trên hệ thống.

Thí dụ

/* Main program */ 
dir

Đầu ra phụ thuộc vào thư mục trong hệ thống.

Chương trình sau đây chỉ là một ví dụ.

Đầu ra

Volume in drive D is LENOVO 
Volume Serial Number is BAC9-9E3F  
Directory of D:\ 
04/06/2016  12:52 AM           268,205 100008676689.pdf 
10/20/2015  08:51 PM    <DIR>          data 
06/01/2016  10:23 AM                31 Example.txt 
10/28/2014  06:55 PM    <DIR>          Intel 
06/02/2016  11:15 AM                23 main.rexx 
12/22/2014  08:49 AM    <DIR>          PerfLogs  
12/13/2015  11:45 PM    <DIR>          Program Files 
12/24/2015  10:26 AM    <DIR>          Program Files (x86) 
07/17/2015  01:21 AM    <DIR>          Users 
12/23/2015  10:01 AM    <DIR>          Windows 
               3 File(s)        268,259 bytes 
               7 Dir(s)     202,567,680 bytes free

Một ví dụ khác về dir commandđược hiển thị trong chương trình sau đây. Chỉ lần này, chúng tôi đang sử dụngspecial rc variable. Biến này là đặc biệt trong Rexx và cung cấp cho bạn trạng thái thực thi các lệnh hệ thống. Nếu giá trị trả về là 0, thì điều đó có nghĩa là lệnh được thực hiện thành công. Nếu không, số lỗi sẽ được đưa ra trong tên biến rc.

Thí dụ

/* Main program */ 
dir 
if rc = 0 then 
   say 'The command executed successfully' 
else 
   say 'The command failed, The error code is =' rc

Khi chạy chương trình trên, chúng ta sẽ nhận được kết quả như sau.

Đầu ra

The command failed, The error code is = 127

Lệnh chuyển hướng

Rexx cũng có khả năng sử dụng các lệnh chuyển hướng. Các lệnh chuyển hướng sau có sẵn trong Rexx.

  • < - Lệnh này được sử dụng để nhận đầu vào đến từ một tệp.

  • >- Lệnh này dùng để xuất nội dung ra tệp. Nếu tệp tồn tại, nó sẽ bị ghi đè.

  • >>- Điều này cũng được sử dụng để xuất nội dung ra tệp. Nhưng đầu ra được thêm vào cuối tệp để bảo toàn nội dung hiện có của tệp.

Hãy xem một ví dụ về cách chúng ta có thể sử dụng các lệnh chuyển hướng. Trong ví dụ sau, chúng tôi đang sử dụng lệnh sắp xếp để sắp xếp một tệp có tênsortin.txt. Dữ liệu từ tệp được gửi đến lệnh sắp xếp. Đầu ra của lệnh sắp xếp sau đó được gửi đến tệp sortout.txt.

Thí dụ

/* Main program */ 
'sort <sortin.txt> sortout.txt'

Giả sử rằng tệp sortin.txt có dữ liệu sau.

Đầu ra

b 
c 
a

Tập tin sortout.txt sau đó sẽ có dữ liệu sau.

a 
b 
c

Chức năng ĐỊA CHỈ

Phương pháp này được sử dụng để tìm ra môi trường mặc định được sử dụng cho các luồng Đầu vào, Lỗi và Đầu ra.

Cú pháp

ADDRESS(options)

Thông số

  • Các tùy chọn cho địa chỉ của một hệ thống cụ thể là gì.

Giá trị trả lại

Phương thức này trả về tên của môi trường cho các luồng Đầu vào, Lỗi và Đầu ra.

Thí dụ

/* Main program */ 
say ADDRESS('I') 
say ADDRESS('O') 
say ADDRESS('E')

Khi chạy chương trình trên, chúng ta sẽ nhận được kết quả như sau.

Đầu ra

INPUT NORMAL 
REPLACE NORMAL 
REPLACE NORMAL

XML là một ngôn ngữ mã nguồn mở, di động cho phép các lập trình viên phát triển các ứng dụng mà các ứng dụng khác có thể đọc được, bất kể hệ điều hành và / hoặc ngôn ngữ phát triển. Đây là một trong những ngôn ngữ phổ biến nhất được sử dụng để trao đổi dữ liệu giữa các ứng dụng.

XML là gì?

Ngôn ngữ đánh dấu mở rộng XML là một ngôn ngữ đánh dấu giống như HTML hoặc SGML. Điều này được khuyến nghị bởi World Wide Web Consortium và có sẵn như một tiêu chuẩn mở. XML cực kỳ hữu ích để theo dõi lượng dữ liệu vừa và nhỏ mà không yêu cầu xương sống dựa trên SQL.

Đối với tất cả các ví dụ mã XML của chúng tôi, hãy sử dụng tệp XML đơn giản sau movies.xml để xây dựng tệp XML và đọc tệp sau đó.

<collection shelf = "New Arrivals"> 
   <movie title = "Enemy Behind"> 
      <type>War, Thriller</type> 
      <format>DVD</format> 
      <year>2003</year> 
      <rating>PG</rating> 
      <stars>10</stars> 
      <description>Talk about a US-Japan war</description> 
   </movie> 
   
   <movie title = "Transformers"> 
      <type>Anime, Science Fiction</type> 
      <format>DVD</format> 
      <year>1989</year> 
      <rating>R</rating> 
      <stars>8</stars> 
      <description>A schientific fiction</description> 
   </movie> 
   
   <movie title = "Trigun"> 
      <type>Anime, Action</type> 
      <format>DVD</format> 
      <year>1986</year> 
      <rating>PG</rating> 
      <stars>10</stars> 
      <description>Vash the Stam pede!</description> 
   </movie> 
   
   <movie title = "Ishtar"> 
      <type>Comedy</type> 
      <format>VHS</format> 
      <year>1987</year> 
      <rating>PG</rating> 
      <stars>2</stars> 
      <description>Viewable boredom </description> 
   </movie> 
</collection>

Bắt đầu

Theo mặc định, chức năng xml không được bao gồm trong trình thông dịch Rexx. Để làm việc với XML trong Rexx, cần tuân theo các bước sau.

  • Tải xuống các tệp sau -

    • Rexxxml - www.interlog.com/~ptjm/

    • Libxml2 - www.ctindustries.net/libxml/

    • iconv-1.9.2.win32 - www.xmlsoft.org/sources/win32/oldreleases/

    • libxslt-1.1.26.win32 - www.xmlsoft.org/sources/win32/oldreleases/

  • Giải nén tất cả các tệp và đảm bảo chúng được đưa vào đường dẫn hệ thống.

Đang tải các hàm XML

Khi tất cả các tệp trong phần trên đã được tải xuống và đăng ký thành công, bước tiếp theo là viết mã để tải các chức năng Rexx XML. Điều này được thực hiện với đoạn mã sau.

rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs') 

if rcc then do 
   say rxfuncerrmsg() 
   exit 1 
end 
call xmlloadfuncs

Những điều sau đây có thể được lưu ý về chương trình trên:

  • Chức năng rxfuncaddđược sử dụng để tải các thư viện bên ngoài. Cácxmlloadfuncs hàm được sử dụng để tải tất cả các thư viện trong rexxxml tập tin vào bộ nhớ.

  • Nếu giá trị của rcc <> 0, thì nó sẽ dẫn đến lỗi. Đối với điều này, chúng ta có thể gọirxfuncerrmsg để cung cấp cho chúng tôi thêm chi tiết về thông báo lỗi.

  • Cuối cùng chúng tôi thực hiện cuộc gọi đến xmlloadfuncs, để tất cả chức năng liên quan đến xml hiện có thể được kích hoạt trong chương trình Rexx.

Hãy xem xét các methods available for XML in Rexx.

xmlVersion

Phương thức này trả về phiên bản của các thư viện XML và XSLT được sử dụng trên hệ thống.

Cú pháp

xmlVersion()

Thông số

không ai

Giá trị trả lại

Phương thức này trả về phiên bản của các thư viện XML và XSLT được sử dụng trên hệ thống.

Thí dụ

rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs') 

if rcc then do 
   say rxfuncerrmsg() 
   exit 1 
end 
call xmlloadfuncs 
say xmlVersion()

Khi chạy chương trình trên, chúng ta sẽ nhận được kết quả như sau. Điều này một lần nữa phụ thuộc vào phiên bản của các thư viện XML đang được sử dụng trên hệ thống.

Đầu ra

1.0.0 20631 10126

xmlParseXML

Hàm này được sử dụng để phân tích cú pháp dữ liệu XML được gửi đến hàm. Cây tài liệu được trả về bởi hàm.

Cú pháp

xmlParseXML(filename)

Thông số

  • Filename - Đây là tên của tệp XML cần được phân tích cú pháp.

Giá trị trả lại

Cây tài liệu được trả về bởi hàm. Khác trả về 0, nếu có lỗi.

Thí dụ

rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs') 

if rcc then do 
   say rxfuncerrmsg() 
   exit 1 
end 
call xmlloadfuncs 

say xmlVersion() 
sw = xmlParseXML('test.xml')

Đầu ra

Không có đầu ra chung.

xmlFindNode

Phương pháp này đánh giá XPath expressionchuyển cho nó. Điều này được sử dụng để phân tích cú pháp cây tài liệu để tạo ranodeset có thể được xử lý thêm.

Cú pháp

xmlParseXML(XPath,document)

Thông số

  • XPath - Đây là đường dẫn của nút trong tệp xml.

  • document - Đây là tài liệu XML

Giá trị trả lại

Đánh giá biểu thức XPath và trả về kết quả là một tập hợp nút có thể được sử dụng sau này.

Thí dụ

rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs') 

if rcc then do 
   say rxfuncerrmsg() 
   exit 1 
end 
call xmlloadfuncs

say xmlVersion() 
document = xmlParseXML('test.xml') 
nodeset = xmlFindNode('//movie', document) 
say xmlNodesetCount(nodeset)

Khi chạy chương trình trên, chúng ta sẽ nhận được kết quả như sau.

Đầu ra

4

Đầu ra hiển thị số lượng nút phim trong danh sách xml của chúng tôi

xmlEvalExpression

Phương thức dưới đây được sử dụng để đánh giá biểu thức XPath và trả về kết quả là một chuỗi.

Cú pháp

xmlParseXML(XPath,Node)

Thông số

  • XPath - Đây là đường dẫn của nút trong tệp xml.

  • document - Phần tử nút cụ thể.

Giá trị trả lại

Một chuỗi được trả về dựa trên biểu thức XPath được gửi đến nó.

Thí dụ

rcc = rxfuncadd('XMLLoadFuncs', 'rexxxml', 'xmlloadfuncs') 

if rcc then do 
   say rxfuncerrmsg() 
   exit 1 
end 
call xmlloadfuncs 

document = xmlParseXML('test.xml') 
nodeset = xmlFindNode('//movie', document) 
do j = 1 to xmlNodesetCount(nodeset) 
value = xmlEvalExpression('type', xmlNodesetItem(nodeset, j)) 
say value 
end

Khi chạy chương trình trên, chúng ta sẽ nhận được kết quả như sau.

Đầu ra

War, Thriller 
Anime, Science Fiction 
Anime, Action 
Comedy

Regina là một trình thông dịch Rexx khác có sẵn để biên dịch và chạy các chương trình Rexx. Trang web chính thức của Regina là - www.regina-rexx.sourceforge.net/

Một số ưu điểm của việc sử dụng Regina như sau:

  • Regina có thể chạy trên mọi nền tảng dù là Windows, Linux hay Mac OS.

  • Regina hoạt động theo tất cả các tiêu chuẩn hiện có.

  • Regina có một cộng đồng lớn theo dõi và do đó có rất nhiều diễn đàn và tài liệu học tập dành cho Regina.

  • Regina có sẵn rất nhiều công cụ để viết và thử nghiệm các chương trình Rexx.

  • Trong Regina, bạn có thể chạy các lệnh không thể thực hiện được trong Trình thông dịch Rexx mặc định. Ví dụ: nếu bạn bao gồm các cài đặt cấu hình nhất định, bạn thực sự có thể chạy các lệnh cấp hệ thống cơ bản, điều này không thể thực hiện được trong Rexx.

Khi bạn cài đặt Rexx thông qua tài liệu cài đặt Chapter 2 – Rexx Environment, trình thông dịch Regina được cài đặt cùng với nó.

Bây giờ chúng ta hãy xem một số phương pháp phổ biến có sẵn khi sử dụng Regina. Các chức năng này là các chức năng mở rộng không có sẵn khi sử dụng bình thường.

Để sử dụng các chức năng mở rộng, bạn cần bao gồm dòng mã sau. Điều này cho phép sử dụng các chức năng mở rộng của Regina.

options arexx_bifs

Thứ hai trong khi chạy tất cả các chương trình Rexx, hãy sử dụng lệnh sau.

regina main.rexx

Where,

  • regina - Đây là trình thông dịch được sử dụng cho các chương trình Rexx.

  • main.rexx - Chương trình Rexx của bạn.

Bây giờ chúng ta sẽ thảo luận chi tiết về các functions of Regina Rexx Interpreter.

Sr.No. Các chức năng của Regina Rexx Interpreter
1 b2c

Phương thức này được sử dụng để chuyển đổi một giá trị nhị phân thành một giá trị chuỗi.

2 bitcomp

Phương thức được sử dụng để so sánh 2 chuỗi bit, từng bit.

3 bittst

Phương thức này được sử dụng để chỉ ra trạng thái của bit được chỉ định trong chuỗi bit.

4 tìm thấy

Phương thức này được sử dụng để tìm kiếm sự xuất hiện đầu tiên của một chuỗi trong một chuỗi khác.

5 getenv

Phương thức này trả về giá trị của một biến môi trường trên hệ thống.

6 bệnh hoạn

Phương thức này được sử dụng để lấy giá trị của id tiến trình đang chạy hiện tại.

7 băm

Phương thức này trả về thuộc tính băm của một chuỗi dưới dạng số thập phân. Nó cũng cập nhật giá trị băm bên trong của chuỗi.

số 8 biện minh

Phương thức này được sử dụng để thêm justify hoặc trim giá trị của một chuỗi dựa trên giá trị độ dài.

9 putenv

Phương thức này được sử dụng để đặt giá trị của một biến môi trường.

10 danh mục

Phương thức này nhận giá trị của thư mục hiện tại trên hệ thống.

11 chdir

Phương pháp này thay đổi giá trị của thư mục làm việc hiện tại trên hệ thống.

12 randu

Phương thức này trả về một số giả ngẫu nhiên từ 0 đến 1.

Một trong những tính năng mạnh mẽ nhất của Rexx là khả năng phân tích cú pháp các giá trị văn bản. Bạn có thể sẽ không thấy điều này trong bất kỳ ngôn ngữ lập trình nào khác.

Định dạng chung của câu lệnh phân tích cú pháp như sau:

Cú pháp

PARSE {UPPER|LOWER|CASELESS} source {template}

Where,

  • UPPER - Nguồn được chuyển thành chữ hoa trước khi phân tích cú pháp.

  • LOWER - Nguồn được chuyển đổi thành chữ thường trước khi phân tích cú pháp.

  • CASELESS - Khi tham số này được truyền, cách viết hoa sẽ bị bỏ qua.

  • source- Đây là nguồn cần được phân tích cú pháp. Có nhiều tùy chọn có sẵn cho việc này và có thể là bất kỳ tùy chọn nào sau đây -

    • ARG - Các đối số của chương trình hoặc thủ tục có thể được sử dụng làm nguồn.

    • LINEIN - Đầu vào dòng tiếp theo có thể được sử dụng làm nguồn.

    • SOURCE - Thông tin nguồn của chương trình có thể được sử dụng làm nguồn.

    • VAR name - Giá trị của một tên biến có thể được sử dụng làm nguồn.

  • template- Tham số này chỉ định cách phân tích cú pháp nguồn. Có nhiều tùy chọn có sẵn cho việc này. Một số trong số chúng được đề cập dưới đây.

    • variable name - Đây là giá trị được gán cho biến.

    • literal string - Một chuỗi ký tự có thể được sử dụng một mẫu để tách chuỗi.

    • #- Vị trí ký tự tuyệt đối trong chính nguồn. Vì vậy, nếu bạn chỉ định giá trị là 5, ký tự thứ 5 sẽ được sử dụng.

    • +#- Vị trí ký tự tương đối trong chính nguồn. Vì vậy, nếu bạn chỉ định giá trị là 5, ký tự thứ 5 sẽ được sử dụng tương đối.

Hãy xem một ví dụ đơn giản về cách phân tích cú pháp có thể được thực hiện trong Rexx.

Thí dụ

/* Main program */ 
parse value 'This is a Tutorial' with word1 word2 word3 word4 
say "'"word1"'" 
say "'"word2"'" 
say "'"word3"'" 
say "'"word4"'"

Chương trình trên phân tích cú pháp các từ trong cụm từ. Khi một giá trị bao gồm các từ chỉ được phân tách bằng một dấu cách và không có dấu cách ở đầu hoặc cuối, giá trị này dễ dàng phân tích cú pháp thành một số từ đã biết như sau.

Hàm phân tích cú pháp được sử dụng trong Rexx để nhận một giá trị chuỗi và sau đó chia nhỏ chúng thành các từ. Trong ví dụ trên, các từ sau đó được tách và sau đó được lưu trữ trong các biến từ.

Kết quả của chương trình trên sẽ như sau:

'This' 
'is' 
'a' 
'Tutorial'

Một ví dụ khác về phân tích cú pháp được hiển thị trong chương trình sau. Lần này chúng ta đang sử dụng mệnh đề while để phân tích cú pháp.

Thí dụ

/* Main program */ 
phrase = 'This is a Tutorial' 

do while phrase <> '' 
   parse var phrase word phrase 
   say "'"word"'" 
   end

Chương trình trên sẽ cho kết quả sau:

'This' 
'is' 
'a' 
'Tutorial'

Phân tích cú pháp vị trí

Rexx cũng cho phép một người làm việc với phân tích cú pháp vị trí. Hãy xem một ví dụ về cách chúng ta có thể phân tích cú pháp theo vị trí với câu lệnh phân tích cú pháp.

Thí dụ

/* Main program */ 
testString = "Doe       John M.   03/03/78  Mumbai              India"; 
parse var testString name1 11 name2 21 birthday 31 town 51 country 
say name1 
say name2 
say birthday 
say town 
say country

Từ ví dụ trên, bạn có thể lưu ý rằng cùng với tên biến, chúng tôi cũng đang chỉ định nơi chuỗi sẽ kết thúc. Vì vậy, đối với tên1, chúng ta nên kết thúc bằng ký tự thứ 11 và sau đó bắt đầu phân tích cú pháp tên2.

Kết quả của chương trình trên sẽ như sau:

Doe 
John M. 
03/03/78 
Mumbai 
India

Bạn cũng có thể dùng relative positional parsing trong trường hợp này.

Thí dụ

/* Main program */ 
testString = "Doe       John M.   03/03/78  Mumbai              India"; 
parse var testString name1 +10 name2 +10 birthday +10 town +20 country 
say name1 
say name2 
say birthday 
say town 
say country

Kết quả của chương trình trên sẽ như hình dưới đây.

Doe 
John M. 
03/03/78 
Mumbai 
India

Trong Rexx, lệnh tín hiệu thường được sử dụng cho hai mục đích, đó là -

  • Một là chuyển quyền điều khiển sang một phần khác của chương trình. Điều này thường giống như nhãn go-to được sử dụng trong các ngôn ngữ lập trình khác.

  • Hai là đi đến một nhãn bẫy cụ thể.

Nếu lệnh tín hiệu được sử dụng trong bất kỳ lệnh hướng dẫn nào sau đây, cấu trúc điều khiển đang chờ xử lý sẽ tự động bị vô hiệu hóa.

  • nếu ... thì ... khác ...

  • làm ... kết thúc

  • do i = 1 to n ... end [và các vòng lặp tương tự]

  • chọn khi ... sau đó ... ... vv. nếu không thì ... kết thúc

Cú pháp chung của câu lệnh signal được trình bày như sau:

Cú pháp

signal labelName  
   
signal [ VALUE ] labelExpression

Hãy xem một ví dụ về cách sử dụng câu lệnh tín hiệu.

Thí dụ

/* Main program */ 
n = 100.45 

if \ datatype( n, wholenumber ) then 
   signal msg 
   say 'This is a whole number' 
   return 0 
msg : 
   say 'This is an incorrect number'

Kết quả của chương trình trên sẽ như hình dưới đây.

Đầu ra

This is an incorrect number.

Nếu bạn thay đổi giá trị của biến n thành một số nguyên như trong chương trình sau:

/* Main program */ 
n = 100 

if \ datatype( n, wholenumber ) then 
   signal msg 
   say ' This is a whole number ' 
   return 0 
msg : 
   say ' This is an incorrect number '

Bạn sẽ nhận được kết quả sau:

This is a whole number

Người ta cũng có thể chuyển sang giá trị của nhãn như trong chương trình sau:

/* Main program */ 
n = 1 

if \ datatype( n, wholenumber ) then 
   signal msg 

if n < 1 | n > 3 then 
   signal msg  
   signal value n 
   3 : say 'This is the number 3' 
   2 : say ' This is the number 2' 
   1 : say ' This is the number 1' 
   return n 
msg : 
   say ' This is an incorrect number ' 
   exit 99

Kết quả của chương trình trên sẽ được hiển thị như sau:

This is the number 1

Kích hoạt / Hủy kích hoạt chuyển nhãn bẫy

Như chúng ta đã đề cập trước đó, lệnh tín hiệu cũng có thể được sử dụng để chuyển điều khiển đến nhãn bẫy.

Cú pháp chung của chuyển nhãn Trap được đưa ra như sau:

Cú pháp

signal ON conditionName [ NAME Label ] 
  
signal OFF conditionName

Ở đâu,

  • conditionName - Đây là điều kiện để bật hoặc tắt tín hiệu.

  • Label - Nhãn tùy chọn mà chương trình sẽ được chuyển hướng đến.

Hãy xem một ví dụ về việc sử dụng chuyển nhãn bẫy.

Thí dụ

/* Main program */ 
signal on error 
signal on failure 
signal on syntax 
signal on novalue 
beep(1) 
signal off error 
signal off failure 
signal off syntax 
signal off novalue 
exit 0 
error: failure: syntax: novalue: 
say 'An error has occured'

Trong ví dụ trên, trước tiên chúng ta bật các tín hiệu lỗi. Sau đó, chúng tôi thêm một câu lệnh sẽ dẫn đến lỗi. Sau đó, chúng tôi có nhãn bẫy lỗi để hiển thị thông báo lỗi tùy chỉnh.

Kết quả của chương trình trên sẽ như sau:

An error has occurred.

Gỡ lỗi là một tính năng quan trọng trong bất kỳ ngôn ngữ lập trình nào. Nó giúp nhà phát triển chẩn đoán lỗi, tìm ra nguyên nhân gốc rễ và sau đó giải quyết chúng cho phù hợp. Trong Rexx, tiện ích theo dõi được sử dụng để gỡ lỗi. Lệnh theo dõi có thể được thực hiện theo 2 cách, một là chế độ hàng loạt và hai là chế độ tương tác. Hãy xem cách thực hiện cả hai tùy chọn.

Theo dõi ở chế độ hàng loạt

Lệnh theo dõi được sử dụng để cung cấp mức chi tiết của từng lệnh Rexx được thực thi.

Cú pháp chung của câu lệnh theo dõi được hiển thị như sau:

Cú pháp

trace [setting]

Nơi cài đặt có thể là bất kỳ ai trong số các tùy chọn sau -

  • A - Theo dõi tất cả các lệnh.

  • C - Chỉ theo dõi các lệnh chủ được gửi đến hệ điều hành.

  • E - Chỉ theo dõi các lệnh máy chủ được gửi đến hệ điều hành dẫn đến lỗi.

  • F - Chỉ theo dõi các lệnh máy chủ được gửi đến hệ điều hành dẫn đến lỗi.

  • I - Điều này cung cấp khả năng truy tìm mức trung gian của các lệnh Rexx.

  • L - Tùy chọn này là nếu bạn muốn gắn nhãn truy tìm khi nó xảy ra.

  • N - Đây là tùy chọn mặc định mà không có dấu vết nào xảy ra.

Hãy xem một ví dụ về lệnh trace.

Thí dụ

/* Main program */ 
trace A 

/* Main program */ 
n = 100.45 if datatype( n, wholenumber ) then signal msg 

say 'This is a whole number' 
return 0 

msg : 
   say ' This is an incorrect number '

Kết quả của chương trình trên sẽ như sau:

5 *-* n = 100.45 if datatype( n, wholenumber ) then signal msg
   7 *-* say 'This is a whole number
This is a whole number                                                   
   8 *-* return 0

Từ đầu ra, bạn có thể thấy rằng một dấu vết bổ sung đã được thêm vào đầu ra của chương trình. Những điều sau đây có thể được lưu ý về đầu ra:

  • Số dòng cùng với câu lệnh được thực thi được thêm vào đầu ra theo dõi.

  • Mỗi dòng được thực thi được hiển thị trong đầu ra theo dõi.

Chức năng theo dõi

Theo dõi cũng có thể được kích hoạt với sự trợ giúp của chức năng theo dõi. Cú pháp chung và ví dụ được hiển thị bên dưới.

Cú pháp

trace()

Hàm trên trả về mức theo dõi hiện tại.

Thông số

không ai

Giá trị trả lại

Hàm trên cung cấp mức theo dõi hiện tại.

Thí dụ

/* Main program */ 
say trace() 

/* Main program */ 
n = 100.45 if datatype( n, wholenumber ) then signal msg 

say 'This is a whole number' 
return 0 
msg : 

say 'This is an incorrect number '

Kết quả của chương trình trên sẽ như sau.

N 
This is an incorrect number

Dòng đầu tiên của N biểu thị rằng dấu vết được đặt thành Bình thường.

Đặt giá trị theo dõi

Mức theo dõi có thể được thiết lập bằng chức năng theo dõi. Cú pháp chung và ví dụ được hiển thị bên dưới.

Cú pháp

trace(travel_level)

Thông số

  • trace_level - Điều này tương tự như các tùy chọn có sẵn để thiết lập mức theo dõi.

Giá trị trả lại

Hàm trên cung cấp mức theo dõi hiện tại.

Thí dụ

/* Main program */ 
say trace() 
current_trace = trace('A') 
say current_trace 

/* Main program */ 
n = 100.45 if datatype( n, wholenumber ) then 
signal msg say 'This is a whole number' 
return 0 
msg : 
say ' This is an incorrect number '

Kết quả của chương trình trên sẽ như sau:

N 
   4 *-* say current_trace 
N 
   6 *-* n = 100.45 
   7 *-* if \ datatype( n, wholenumber ) then 
   8 *-* signal msg 
   12 *-* say 'This is an incorrect number' 
'This is an incorrect number'

Theo dõi tương tác

Theo dõi tương tác là trong đó, truy tìm được thực hiện khi chương trình chạy. Cũng giống như trong một IDE chẳng hạn như Visual Studio cho .Net, trong đó bạn có thể thêm các điểm ngắt và xem cách mỗi câu lệnh thực thi, tương tự ở đây, bạn cũng có thể xem chương trình khi mỗi dòng mã chạy.

Cú pháp chung như sau:

Cú pháp

trace ?options

Trong đó, các tùy chọn giống nhau đối với lệnh theo dõi như hình dưới đây.

  • A - Theo dõi tất cả các lệnh

  • C - Chỉ theo dõi các lệnh chủ được gửi đến hệ điều hành.

  • E - Chỉ theo dõi các lệnh máy chủ được gửi đến hệ điều hành dẫn đến lỗi.

  • F - Chỉ theo dõi các lệnh máy chủ được gửi đến hệ điều hành dẫn đến lỗi.

  • I - Điều này cung cấp khả năng truy tìm mức trung gian của các lệnh Rexx.

  • L - Tùy chọn này là nếu bạn muốn gắn nhãn truy tìm khi nó xảy ra.

  • N - Đây là tùy chọn mặc định mà không có dấu vết nào xảy ra.

Hãy xem một ví dụ về việc triển khai theo dõi tích cực.

Thí dụ

/* Main program */ 
trace ?A

/* Main program */ 
n = 100.45 if datatype( n, wholenumber ) then 
signal msg 

say 'This is a whole number' 
return 0 
msg : say 'This is an incorrect number'

Kết quả của chương trình trên sẽ như trong chương trình sau. Dấu vết sẽ dừng lại ở mỗi dòng mã; thì bạn cần nhấn nút Enter để chuyển sang dòng mã tiếp theo.

This is an incorrect number
       +++ "LINUX COMMAND /home/cg/root/5798511/main.rex"
     5 *-* n = 100.45 if datatype( n, wholenumber ) then 
+++ Interactive trace. "Trace Off" to end debug, ENTER to Continue. +++
     6 *-* signal msg 
    10 *-* msg :
    10 *-* say 'This is an incorrect number'

Rexx cũng có khả năng xử lý lỗi như trong các ngôn ngữ lập trình khác.

Sau đây là một số tình trạng lỗi khác nhau được thấy trong Rexx.

  • ERROR - Điều này thậm chí được nâng lên bất cứ khi nào một lệnh được gửi đến hệ điều hành dẫn đến lỗi.

  • FAILURE - Điều này thậm chí còn được nâng lên bất cứ khi nào một lệnh được gửi đến hệ điều hành dẫn đến lỗi.

  • HALT- Điều này thường được nâng lên bất cứ khi nào một hoạt động phụ thuộc vào một hoạt động khác. Một ví dụ là nếu hoạt động I / O đang bị tạm dừng vì bất kỳ lý do gì.

  • NOVALUE - Sự kiện này được đưa ra khi một giá trị chưa được gán cho một biến.

  • NOTREADY - Điều này được tạo ra bởi bất kỳ thiết bị I / O nào chưa sẵn sàng chấp nhận bất kỳ hoạt động nào.

  • SYNTAX - Sự kiện này được nêu ra nếu có bất kỳ lỗi cú pháp nào trong mã.

  • LOSTDIGITS - Sự kiện này được nêu ra khi một phép toán số học dẫn đến mất chữ số trong quá trình thực hiện.

Lỗi bẫy

Lỗi được mắc kẹt với sự trợ giúp của lệnh tín hiệu. Hãy xem cú pháp và một ví dụ về điều này.

Cú pháp

signal on [Errorcondition]

Ở đâu,

  • Errorcondition - Đây là điều kiện lỗi được đưa ra ở trên.

Thí dụ

Hãy xem một ví dụ về điều này.

/* Main program */ 
signal on error 
signal on failure 
signal on syntax 
signal on novalue beep(1) 
signal off error 
signal off failure
signal off syntax 
signal off novalue 
exit 0 
error: failure: syntax: novalue: 
say 'An error has occured'

Trong ví dụ trên, trước tiên chúng ta bật các tín hiệu lỗi. Sau đó, chúng tôi thêm một câu lệnh sẽ dẫn đến lỗi. Sau đó, chúng tôi có nhãn bẫy lỗi để hiển thị thông báo lỗi tùy chỉnh.

Kết quả của chương trình trên sẽ như hình dưới đây.

An error has occurred.

Ví dụ về mã lỗi được hiển thị trong chương trình sau.

/* Main program */ 
signal on error 
signal on failure 
signal on syntax 
signal on novalue beep(1) 
exit 0 
error: failure: syntax: novalue: 

say 'An error has occured' 
say rc 
say sigl

Kết quả của chương trình trên sẽ như hình dưới đây.

An error has occured 
40 
6

Khi bạn cài đặt ooRexx theo chương môi trường, bạn cũng sẽ có khả năng làm việc với các lớp và đối tượng. Xin lưu ý rằng tất cả mã sau cần được chạy trong trình thông dịch ooRexx. Trình thông dịch Rexx thông thường sẽ không thể chạy mã hướng đối tượng này.

Khai báo lớp và phương pháp

Một lớp được định nghĩa với khai báo Cú pháp sau.

Cú pháp

::class classname

Ở đâu classname là tên được đặt cho lớp.

Một phương thức trong một lớp được định nghĩa với khai báo Cú pháp sau.

Cú pháp

::method methodname

Ở đâu methodname là tên được đặt cho phương thức.

Một thuộc tính trong một lớp được định nghĩa với khai báo Cú pháp bên dưới.

Cú pháp

::attribute propertyname

Ở đâu propertyname là tên được đặt cho tài sản.

Thí dụ

Sau đây là một ví dụ về một lớp trong Rexx.

::class student 
::attribute StudentID 
::attribute StudentName

Những điểm sau đây cần lưu ý về chương trình trên.

  • Tên của lớp là học sinh.
  • Lớp có 2 thuộc tính là StudentID và StudentName.

Phương pháp Getter và Setter

Phương thức Getter và Setter được sử dụng để tự động đặt và lấy các giá trị của các thuộc tính. Trong Rexx, khi bạn khai báo một thuộc tính với từ khóa thuộc tính, các phương thức getter và setter đã được đặt sẵn.

Thí dụ

::class student 
::attribute StudentID 
::attribute StudentName

Trong ví dụ trên, sẽ có các phương thức Getter và Setter cho StudentId và StudentName.

Một ví dụ về cách chúng có thể được sử dụng được hiển thị trong chương trình sau.

/* Main program */ 
value = .student~new 
value~StudentID = 1 
value~StudentName = 'Joe' 
say value~StudentID 
say value~StudentName 

exit 0 
::class student 
::attribute StudentID 
::attribute StudentName

Kết quả của chương trình trên sẽ như hình dưới đây.

1 
Joe

Phương pháp phiên bản

Các đối tượng có thể được tạo từ lớp thông qua ~new operator. Một phương thức từ lớp có thể được gọi theo cách sau.

Object~methodname

Ở đâu methodname là phương thức cần được gọi từ lớp.

Thí dụ

Ví dụ sau cho thấy cách một đối tượng có thể được tạo từ một lớp và phương thức tương ứng được gọi.

/* Main program */ 
value = .student~new 
value~StudentID = 1 
value~StudentName = 'Joe' 
value~Marks1 = 10 
value~Marks2 = 20 
value~Marks3 = 30 
total = value~Total(value~Marks1,value~Marks2,value~Marks3) 
say total 

exit 0 
::class student 
::attribute StudentID 
::attribute StudentName 
::attribute Marks1 
::attribute Marks2 
::attribute Marks3 
::method 'Total' 
use arg a,b,c 
return (ABS(a) + ABS(b) + ABS(c))

Kết quả của chương trình trên sẽ như hình dưới đây.

60

Tạo nhiều đối tượng

Người ta cũng có thể tạo nhiều đối tượng của một lớp. Ví dụ sau đây sẽ cho thấy điều này có thể đạt được như thế nào.

Ở đây, chúng ta đang tạo 3 đối tượng (st, st1 và st2) và gọi các thành viên thể hiện và phương thức thể hiện của chúng tương ứng.

Hãy xem một ví dụ về cách nhiều đối tượng có thể được tạo.

Thí dụ

/* Main program */ 
st = .student~new 
st~StudentID = 1 
st~StudentName = 'Joe' 
st~Marks1 = 10 
st~Marks2 = 20 
st~Marks3 = 30 
total = st~Total(st~Marks1,st~Marks2,st~Marks3) 
say total  

st1  =  .student~new 
st1~StudentID = 2 
st1~StudentName = 'John' 
st1~Marks1 = 10 
st1~Marks2 = 20 
st1~Marks3 = 40 
total = st1~Total(st1~Marks1,st1~Marks2,st1~Marks3) 
say total  

st2  =  .student~new 
st2~StudentID = 3 
st2~StudentName = 'Mark' 
st2~Marks1 = 10 
st2~Marks2 = 20 
st2~Marks3 = 30 
total = st2~Total(st2~Marks1,st2~Marks2,st2~Marks3) 
say total  

exit 0 
::class student 
::attribute StudentID 
::attribute StudentName 
::attribute Marks1 
::attribute Marks2 
::attribute Marks3 
::method 'Total' 
use arg a,b,c 
return (ABS(a) + ABS(b) + ABS(c))

Kết quả của chương trình trên sẽ như hình dưới đây.

60 
70 
60

Di sản

Kế thừa có thể được định nghĩa là quá trình trong đó một lớp mua các thuộc tính (phương thức và trường) của lớp khác. Với việc sử dụng kế thừa, thông tin được quản lý theo thứ tự phân cấp.

Lớp kế thừa các thuộc tính của lớp khác được gọi là subclass (lớp dẫn xuất, lớp con) và lớp có các thuộc tính được kế thừa được gọi là superclass (lớp cơ sở, lớp cha).

Hãy xem một ví dụ về kế thừa trong Rexx. Trong ví dụ sau, chúng tôi đang tạo một lớp được gọi làPerson. Từ đó, chúng tôi sử dụng từ khóa lớp con để tạoStudent class như một sub-class of Person.

Thí dụ

/* Main program */ 
st = .student~new 
st~StudentID = 1 
st~StudentName = 'Joe' 
st~Marks1 = 10 
st~Marks2 = 20 
st~Marks3 = 30 
say st~Total(st~Marks1,st~Marks2,st~Marks3)  

exit 0 
::class Person 
::class student subclass Person 
::attribute StudentID 
::attribute StudentName 
::attribute Marks1 
::attribute Marks2 
::attribute Marks3 
::method 'Total' 
use arg a,b,c 
return (ABS(a) + ABS(b) + ABS(c))

Kết quả của chương trình trên sẽ như hình dưới đây.

60

Tính di động là một khía cạnh quan trọng trong bất kỳ ngôn ngữ lập trình nào. Như đã biết, Rexx có sẵn trong nhiều hệ điều hành khác nhau như Windows và Linux. Vì vậy, cần phải đảm bảo rằng khi phát triển một chương trình trên nền tảng Windows, nó có các biện pháp phòng ngừa cần thiết được thực hiện nếu các chương trình tương tự chạy trên nền tảng Linux.

Rexx có khả năng chạy các lệnh cấp hệ thống. Có những lệnh có thể được sử dụng để hiểu hệ điều hành mà nó đang chạy trên đó là gì. Dựa trên kết quả đầu ra, nó có thể thực hiện các hành động thích hợp để xem đâu là các lệnh có thể chạy trên hệ điều hành này.

Thí dụ

Ví dụ sau đây cho thấy cách các hàm phân tích cú pháp được sử dụng để lấy thông tin chi tiết về hệ điều hành mà chương trình đang chạy.

/* Main program */ 
parse version language level date month year. 
parse source system invocation filename. 
language = translate(language) 

if pos('REGINA',language) = 0 then 
   say 'Error , the default interpreter is not Regina' language 
   say 'The Interpreter version/release date is:' date month year 
   say 'The Language level is: ' level say 'The Operating System is'  

   select 
when system = 'WIN32' then 
   'ver'
when system = 'UNIX' | system = 'LINUX' then 
   'uname -a' 
   otherwise 
   say 'Unknown System:' system 
end 
if rc <> 0 then 
   say 'Error :' rc

Đầu ra sẽ khác nhau tùy thuộc vào hệ điều hành. Dưới đây là một đầu ra mẫu.

The Interpreter version/release date: 5 Apr 2015 
The Language level is:  5.00 
The Operating System is 
Unknown System: WIN64 
Bad return code: RC

Rexx cung cấp một số chức năng mở rộng cung cấp nhiều chức năng khác nhau, hầu hết chúng đều cho phép bạn tương tác với Hệ điều hành. Chúng ta hãy xem xét một số chi tiết trong số chúng như được giải thích dưới đây.

Sr.No. Chức năng mở rộng
1 b2c

Hàm này chuyển đổi giá trị nhị phân thành giá trị chuỗi.

2 bitclr

Hàm này được sử dụng để chuyển bit được chỉ định trong chuỗi nhị phân thành 0.

3 bitcomp

Hàm này dùng để so sánh 2 chuỗi nhị phân bắt đầu bằng bit 0.

4 buftype

Hàm này được sử dụng để hiển thị nội dung của ngăn xếp thường được sử dụng trong mục đích gỡ lỗi.

5 hầm mộ

Hàm này được sử dụng để mã hóa một chuỗi.

6 cái nĩa

Chức năng này được sử dụng để sinh ra một tiến trình con mới trên hệ thống.

7 bệnh hoạn

Hàm này lấy id của tiến trình đang chạy hiện tại.

số 8 băm

Hàm này trả về giá trị băm của một chuỗi.

Rexx cung cấp một số hướng dẫn cung cấp nhiều chức năng, hầu hết chúng cho phép bạn tương tác với Hệ điều hành. Hãy xem xét một số chi tiết trong số chúng.

Sr.No. Hướng dẫn Rexx
1 Địa chỉ

Chức năng này được sử dụng để hiển thị môi trường lệnh hiện tại.

2 rơi vãi

Hàm này được sử dụng để bỏ gán một biến.

3 thông dịch

Thông dịch hoặc thực hiện lệnh đã xác định.

4 nop

Chức năng này có nghĩa là không thực hiện thao tác nào. Lệnh này thường được sử dụng trongif statements.

5 Kéo

Điều này được sử dụng để kéo đầu vào từ ngăn xếp hoặc từ luồng mặc định.

6 đẩy

Điều này được sử dụng để đẩy một giá trị lên ngăn xếp Rexx.

Ngôn ngữ Rexx có rất nhiều cách triển khai khác nhau như chúng ta đã thấy trong các chương trước. Mỗi triển khai có chức năng riêng của nó. Hãy xem xét các triển khai khác nhau có sẵn cho Rexx.

OoRexx

Đây là phiên bản hướng đối tượng của Rexx. Theo mặc định, việc triển khai cơ bản Rexx đều dựa trên các thủ tục. Nhưng với ooRexx, bạn có thể cung cấp tính linh hoạt cao hơn bằng cách có cách tiếp cận Hướng đối tượng cho Rexx. Bằng cách sử dụng ooRexx, bạn có thể tái sử dụng tốt hơn thông qua việc tạo các lớp và đối tượng có thể tái sử dụng.

Chương trình sau đây là một ví dụ về một chương trình Rexx đơn giản có thể được chạy với trình triển khai ooRexx.

Thí dụ

/* Main program */ 
say ‘hello’

Để chạy chương trình này, hãy chạy lệnh sau.

rexx main.rexx

Khi bạn chạy lệnh trên, bạn sẽ nhận được kết quả sau.

hello

Netrexx

Điều này dành cho tất cả các nhà phát triển dựa trên Java vì nó cung cấp một giải pháp thay thế dựa trên Java cho ngôn ngữ Rexx. Vì vậy, tất cả các đối tượng đều dựa trên Mô hình đối tượng Java. Ưu điểm của khung công tác này là vì Java là một ngôn ngữ phổ biến rộng rãi nên các nhà phát triển sẽ dễ dàng sử dụng khung công tác này hơn. Vì vậy, trong cách triển khai này, mã Rexx được chuyển đổi thành một chương trình Java sau đó có thể chạy trên bất kỳ máy ảo Java nào.

Đoạn mã sau là một ví dụ về chương trình NetRexx.

Tạo một tệp có tên main.nrx và đặt đoạn mã sau vào tệp.

/* Main program */ 
say ‘hello’

Để biên dịch mã, hãy chạy lệnh sau:

NetRexxC main.nrx

Sau đó, bạn sẽ nhận được kết quả sau. NetRexxC là trình biên dịch chuyển đổi chương trình Rexx sang chương trình java tương đương của nó.

java -cp ";;G:\NetRexx-3.04GA\lib\NetRexxF.jar;." 
-Dnrx.compiler = ecj org.netrexx.process.NetRexxC  main.nrx 
NetRexx portable processor 3.04 GA build 4-20150630-1657 
Copyright (c) RexxLA, 2011,2015.   All rights reserved. 
Parts Copyright (c) IBM Corporation, 1995,2008. 
Program main.nrx 
Compilation of 'main.nrx' successful

Bây giờ bạn có thể chạy chương trình java của mình bằng lệnh java sau.

java main

Khi bạn chạy lệnh trên, bạn sẽ nhận được kết quả sau.

Hello

Brexx

Đây là một triển khai nhẹ của Rexx. Đây là một gói nhẹ hơn so với trình triển khai Rexx tiêu chuẩn. Nhưng nó vẫn có đầy đủ chức năng của Rexx.

Đoạn mã sau đây là một ví dụ về chương trình BRexx.

/* Main program */ 
say ‘hello’

Để chạy chương trình, hãy chạy lệnh sau.

rexx32 main.rexx

Khi bạn chạy lệnh trên, bạn sẽ nhận được kết quả sau.

hello

NetRexx là triển khai java của Rexx. Trong NetRexx, trình triển khai được sử dụng để chuyển đổi chương trình Rexx thành chương trình java mà sau đó có thể chạy trên bất kỳ máy ảo Java nào.

Thiết lập NetRexx

Bước đầu tiên trong NetRexx là thiết lập nó trên máy cục bộ. Để làm điều này, người ta cần thực hiện các bước sau:

Step 1 - Truy cập trang tải xuống NetRexx - http://www.netrexx.org/downloads.nsp

Tải xuống tệp NetRexx.3.04.GA.

Step 2- Đảm bảo rằng java được cài đặt và chạy trên hệ thống của bạn. Bạn có thể xác minh rằng java đang chạy bằng cách sử dụng lệnh java – version.

Ví dụ về đầu ra được hiển thị bên dưới.

H:\>java -version 
java version "1.7.0_79" 
Java(TM) SE Runtime Environment (build 1.7.0_79-b15) 
Java HotSpot(TM) Client VM (build 24.79-b02, mixed mode, sharing)

Step 3- Giải nén nội dung của tập tin nén Netrexx. Sao chép các tệp từ thư mục NetRexx3.04GA \ lib vào thư mục cài đặt java / lib / etc của bạn.

Step 4 - Thêm đường dẫn NetRexx-3.04GA \ bin vào biến đường dẫn trên hệ thống.

Chạy chương trình NetRexx đầu tiên

Tạo một tệp có tên main.nrx và đặt đoạn mã sau vào tệp.

/* Main program */ 
say ‘hello’

Để biên dịch mã, hãy chạy lệnh sau.

NetRexxC main.nrx

Sau đó, bạn sẽ nhận được kết quả sau. NetRexxC là trình biên dịch chuyển đổi chương trình rexx sang chương trình java tương đương.

java -cp ";;G:\NetRexx-3.04GA\lib\NetRexxF.jar;." 
-Dnrx.compiler = ecj org.netrexx.process.NetRexxC  main.nrx 
NetRexx portable processor 3.04 GA build 4-20150630-1657 
Copyright (c) RexxLA, 2011,2015.   All rights reserved. 
Parts Copyright (c) IBM Corporation, 1995,2008. 
Program main.nrx 
Compilation of 'main.nrx' successful

Bây giờ bạn có thể chạy chương trình java của mình bằng lệnh java sau.

java main

Khi bạn chạy lệnh trên, bạn sẽ nhận được kết quả sau.

Hello

Bây giờ chúng ta hãy thảo luận về một số special aspects of the Netrexx library.

Các chuỗi được lập chỉ mục

Trong NetRexx, chuỗi có thể trở thành chỉ mục của mảng. Một ví dụ đã được biểu diễn ở dưới.

Thí dụ

/* Main program */ 
value = 'unknown' 
value['a'] = 'b' 
c = 'a' 
say value[c]

Khi chạy chương trình trên, chúng ta sẽ nhận được kết quả như sau.

Đầu ra

b

Nhiều chỉ mục

Trong NetRexx, bạn có thể có nhiều chỉ mục cho các mảng. Một ví dụ đã được biểu diễn ở dưới.

Thí dụ

/* Main program */ 
value = 'null' 
value['a', 'b'] = 1 
say value['a', 'b']

Khi chạy chương trình trên, chúng ta sẽ nhận được kết quả như sau.

Đầu ra

1

Sr.No. Lệnh & Mô tả
1 hỏi Lệnh

Lệnh này được sử dụng để đọc một dòng từ luồng đầu vào mặc định.

2 chữ số Lệnh

Lệnh này được sử dụng để hiển thị giá trị hiện tại của giá trị các chữ số.

3 lệnh biểu mẫu

Lệnh này được sử dụng để hiển thị giá trị hiện tại của giá trị biểu mẫu.

4 Lệnh chiều dài

Lệnh này được sử dụng để hiển thị độ dài của một giá trị chuỗi.

5 phiên bản Command

Lệnh này được sử dụng để trả về phiên bản hiện tại của NetRexx đang được sử dụng.

6 theo dõi lệnh

Lệnh này được sử dụng để trả về cài đặt theo dõi hiện tại đang được NetRexx sử dụng.

BRexx là một triển khai trọng lượng nhẹ hơn của Rexx. Nó vẫn có rất nhiều chức năng để cung cấp như một phần của việc triển khai Rexx.

Thiết lập BRexx

Bước đầu tiên trong BRexx là thiết lập nó trên máy cục bộ. Để làm điều này, người ta cần thực hiện các bước sau:

Step 1 - Truy cập trang web tải xuống BRexx - https://ftp.gwdg.de/pub/languages/rexx/brexx/html/rx.html

Đi tới phần tải xuống và tải xuống sản phẩm.

Step 2 - Giải nén nội dung của tệp nén Brexx.

Step 3 - Thêm đường dẫn BRexx \ bin vào biến đường dẫn trên hệ thống.

Step 4 - Tạo một biến mới có tên là RXLIB và trỏ nó vào thư mục lib trong thư mục Brexx.

Chạy Chương trình BRexx Đầu tiên

Tạo một tệp có tên main.rexx và đặt đoạn mã sau vào tệp.

/* Main program */ 
say ‘hello’

Để chạy chương trình, hãy chạy lệnh sau.

rexx32 main.rexx

Khi bạn chạy lệnh trên, bạn sẽ nhận được kết quả sau.

hello

Bây giờ chúng ta hãy thảo luận về một số hàm được sử dụng phổ biến nhất hiện có trong thư viện BRexx.

Sr.No. Các chức năng có sẵn trong Thư viện BRexx
1 Lệnh acos

Lệnh này được sử dụng để chuyển đổi cung-cosin của một số.

2 Lệnh cos

Lệnh này được sử dụng để chuyển đổi cosin của một số.

3 lệnh tội lỗi

Lệnh này được sử dụng để nhận chuyển đổi sin của một số.

4 asin Command

Lệnh này được sử dụng để chuyển đổi cung-sin của một số.

5 tan Command

Lệnh này được sử dụng để chuyển đổi tiếp tuyến của một số.

6 atan Command

Lệnh này được sử dụng để chuyển đổi cung-tiếp tuyến của một số.

7 Lệnh mkdir

Lệnh này dùng để tạo một thư mục trong thư mục làm việc hiện tại.

số 8 Lệnh rmdir

Lệnh này dùng để xóa một thư mục trong thư mục làm việc hiện tại.

9 lệnh dir

Lệnh này được sử dụng để trả về toàn bộ danh sách thư mục.

Rexx có khả năng làm việc với nhiều loại cơ sở dữ liệu được liệt kê bên dưới.

  • HSQLDB
  • Oracle
  • Máy chủ SQL
  • MySQL
  • MongoDB

Tất cả thông tin về cơ sở dữ liệu Rexx có thể được tìm thấy khi bạn nhấp vào liên kết sau: https://rexxsql.sourceforge.net/

Trong ví dụ của chúng tôi, chúng tôi sẽ sử dụng MySQL DB làm mẫu. Vì vậy, bước đầu tiên là đảm bảo tải xuống các trình điều khiển được yêu cầu từ trang Rexx SQL để các chương trình Rexx có thể hoạt động với SQL tương ứng. Vì vậy, hãy làm theo các bước tiếp theo để đảm bảo rằng các chương trình Rexx có thể hoạt động với cơ sở dữ liệu MySQL.

Step 1 - Truy cập trang tải xuống trình điều khiển sau từ trang Rexx - https://sourceforge.net/projects/rexxsql/files/rexxsql/2.6/

Step 2 - Tải xuống trình điều khiển MYSQL - rxsql26B3_my_w32_ooRexx

Step 3 - Giải nén nội dung vào máy cục bộ.

Step 4 - Thêm đường dẫn của thư mục đã giải nén vào biến đường dẫn trên máy của bạn.

Đối với tất cả các ví dụ tiếp theo, hãy đảm bảo có các con trỏ sau:

  • Bạn đã tạo một cơ sở dữ liệu TESTDB.

  • Bạn đã tạo một bảng EMPLOYEE trong TESTDB.

  • Bảng này có các trường FIRST_NAME, LAST_NAME, AGE, SEX và THU NHẬP.

  • ID người dùng "testuser" và mật khẩu "test123" được đặt để truy cập TESTDB.

  • Đảm bảo bạn đã tải xuống tệp jar mysql và thêm tệp vào classpath của bạn.

  • Bạn đã xem qua hướng dẫn về MySQL

Kết nối cơ sở dữ liệu

Để thiết lập kết nối cơ sở dữ liệu, trước tiên bạn cần Rexxsql DLL và sau đó sử dụng chức năng SQLConnect để thiết lập kết nối với cơ sở dữ liệu. Cú pháp và ví dụ về cách đạt được điều này được đưa ra dưới đây.

Cú pháp

SQLConnect(cname,username,password,dbname)

Thông số

  • cname - Đây là tên để đặt cho kết nối.

  • username - Tên người dùng để kết nối với cơ sở dữ liệu.

  • password - Mật khẩu để kết nối với cơ sở dữ liệu.

  • dbname - Lược đồ cơ sở dữ liệu để kết nối.

Giá trị trả lại

Giá trị bằng 0 có nghĩa là kết nối cơ sở dữ liệu thành công.

Thí dụ

/* Main program */ 
Call RxFuncAdd 'SQLLoadFuncs', 'rexxsql', 'SQLLoadFuncs' 
Call SQLLoadFuncs 
say SQLConnect(c1,' testuser ',' test123','testdb')

Kết quả của chương trình trên sẽ như hình dưới đây.

0

Tạo bảng cơ sở dữ liệu

Bước tiếp theo sau khi kết nối với cơ sở dữ liệu là tạo các bảng trong cơ sở dữ liệu của chúng tôi. Ví dụ sau đây cho thấy cách tạo bảng trong cơ sở dữ liệu bằng Rexx. Tất cả các lệnh trong Rexx SQL được thực thi bằng cách sử dụng hàm SQLCommand.

Cú pháp

SQLConnect(sname,statement)

Thông số

  • sname - Đây là tên để đặt cho câu lệnh thực thi.

  • statement - Đây là câu lệnh cần được thực thi trên cơ sở dữ liệu.

Giá trị trả lại

Giá trị bằng 0 có nghĩa là lệnh đã thành công.

Thí dụ

/* Main program */ 
Call RxFuncAdd 'SQLLoadFuncs', 'rexxsql', 'SQLLoadFuncs' 
Call SQLLoadFuncs 

if SQLConnect(c1,'testuser','test123','testdb') == 0 then say 'Connect Succedded' 
if SQLCommand(u1,"use testdb") == 0 then say 'Changed database to testdb' 
   sqlstr = 'create table employee (first_name char(20) not null, last_name 
   char(20),age int, sex   
   char(1), income float)' 

if SQLCommand(c2,sqlstr) == 0 then say 'Employee table created'

Kết quả của chương trình trên sẽ như hình dưới đây.

Connect Succedded 
Changed database to testdb 
Employee table created

Thao tác trên bảng cơ sở dữ liệu

Các loại thao tác sau đây thường được thực hiện nhất trên bảng cơ sở dữ liệu.

Sr.No. Hoạt động Mô tả
1 Chèn hoạt động

Nó được yêu cầu khi bạn muốn tạo bản ghi của mình vào một bảng cơ sở dữ liệu.

2 Đọc hoạt động

Hoạt động ĐỌC trên bất kỳ cơ sở dữ liệu nào có nghĩa là lấy một số thông tin hữu ích từ cơ sở dữ liệu.

3 Cập nhật hoạt động

Hoạt động CẬP NHẬT trên bất kỳ cơ sở dữ liệu nào có nghĩa là cập nhật một hoặc nhiều bản ghi đã có sẵn trong cơ sở dữ liệu.

4 Xóa hoạt động

Thao tác DELETE là bắt buộc khi bạn muốn xóa một số bản ghi khỏi cơ sở dữ liệu của mình.

5 Đóng kết nối

Lệnh sau có thể được sử dụng để đóng kết nối với cơ sở dữ liệu.

Thực hiện giao dịch

Giao dịch là một cơ chế đảm bảo tính nhất quán của dữ liệu. Giao dịch có bốn thuộc tính sau:

  • Atomicity - Một giao dịch hoàn tất hoặc không có gì xảy ra cả.

  • Consistency - Một giao dịch phải bắt đầu ở trạng thái nhất quán và để hệ thống ở trạng thái nhất quán.

  • Isolation - Kết quả trung gian của một giao dịch không được hiển thị bên ngoài giao dịch hiện tại.

  • Durability - Một khi giao dịch đã được cam kết, các ảnh hưởng vẫn tồn tại, ngay cả sau khi hệ thống bị lỗi.

Đây là một ví dụ đơn giản về cách thực hiện các giao dịch.

Thí dụ

/* Main program */ 
Call RxFuncAdd 'SQLLoadFuncs', 'rexxsql', 'SQLLoadFuncs' 
Call SQLLoadFuncs 

if SQLConnect(c1,'testuser','test123','testdb') == 0 then say 'Connect Succedded' 
if SQLCommand(u1,"use testdb") == 0 then say 'Changed database to testdb' 
   sqlstr = "DELETE FROM EMPLOYEE WHERE AGE > 20" 

if SQLCommand(c2,sqlstr) == 0 then 
if sqlcommit() == 0 then say committed

Kết quả của chương trình trên sẽ như hình dưới đây.

Connect Succedded 
Changed database to testdb 
COMMITTED

Cam kết hoạt động

Hoạt động cam kết là những gì yêu cầu cơ sở dữ liệu tiến hành trước hoạt động và hoàn thành tất cả các thay đổi đối với cơ sở dữ liệu. Trong ví dụ trên của chúng tôi, điều này đạt được bằng lệnh sau.

Sqlcommit()

Thao tác khôi phục

Nếu bạn không hài lòng với một hoặc nhiều thay đổi và bạn muốn hoàn nguyên những thay đổi đó hoàn toàn, thì hãy sử dụng phương pháp khôi phục. Trong ví dụ trên của chúng tôi, điều này đạt được bằng lệnh sau.

SqlRollback()

Các thiết bị cầm tay đã trải qua một chặng đường dài và Rexx có rất nhiều cách để nó có thể chạy trên các thiết bị này. Rexx hỗ trợ Pocket PC, thiết bị Palm, PDA và các thiết bị điện thoại thông minh khác. Lợi thế của Rexx khi hoạt động trên các nền tảng này là Rexx thực sự là một hệ thống lập trình có trọng lượng nhỏ chỉ chạy trong khoảng vài kilobyte. Do đó, việc chạy các chương trình Rexx trên các thiết bị này trở nên dễ dàng hơn.

Rexx trên thiết bị cầm tay có thể chạy ở các chế độ sau:

  • Chế độ đầu tiên là nút gốc nơi nó chạy trực tiếp trên chính hệ điều hành. Ưu điểm khi chạy ở chế độ này là nó nhanh hơn vì nó chạy trực tiếp khỏi hệ điều hành.

  • Chế độ tiếp theo nằm trên DOS hoặc chương trình giả lập trên đầu thiết bị cầm tay. Ưu điểm của chế độ này là có thể chạy trên mọi loại hệ điều hành miễn là trình giả lập chạy trên hệ điều hành đó.

Trình thông dịch Rexx cho các danh mục thiết bị cầm tay khác nhau được hiển thị bên dưới.

  • Windows CE - Brexx
  • Palm OS - Rexx dành cho Palm OS
  • Hệ điều hành Symbian - Regina

Đối với trình giả lập DOS, cần thực hiện các bước sau:

Step 1- Đầu tiên là tải PocketDOS, một trình giả lập DOS phổ biến. Nó được thiết kế để chạy trên nhiều hệ điều hành và có hỗ trợ cho màn hình VGA thông thường và các cổng nối tiếp và song song.

Step 2 - Bước tiếp theo là tải các tệp BRexx cho DOS 16-bit xuống PC Windows.

Step 3 - Bước cuối cùng là sử dụng ActiveSync để đồng bộ chương trình Rexx với thiết bị cầm tay.

Có một số sản phẩm dựa trên DOS thương mại khác có sẵn. XTM là một sản phẩm thuộc danh mục này. Các tính năng của sản phẩm này như sau:

  • Hỗ trợ CPU 80186 và tập lệnh.

  • Nó hoạt động dựa trên mã BIOS để có hiệu suất tốt hơn.

  • Nó có thể cung cấp giả lập cho bộ đồng xử lý Math, phiên bản 8087 MPU

  • Nó cung cấp quyền truy cập vào các cổng nối tiếp.

  • Nó hỗ trợ nhiều loại ngôn ngữ như tiếng Anh, tiếng Pháp và tiếng Đức.

Một trong những khía cạnh quan trọng của bất kỳ ngôn ngữ lập trình nào là hiệu suất của ứng dụng. Các thực hành đặc biệt cần được quan tâm để đảm bảo rằng hiệu suất của ứng dụng không bị cản trở. Hãy xem xét một số lưu ý được mô tả trong các bước để hiểu rõ hơn -

Step 1- Cố gắng giảm số lượng lệnh - Trong Rexx mỗi lệnh mang một khoản phí. Vì vậy, hãy cố gắng giảm số lượng hướng dẫn trong chương trình của bạn. Dưới đây là một ví dụ về hướng dẫn có thể được thiết kế lại.

Thay vì sử dụng nhiều câu lệnh if else, người ta có thể sử dụng câu lệnh phân tích cú pháp. Vì vậy, giống như trong chương trình sau, thay vì có điều kiện if cho mỗi giá trị và nhận giá trị của word1, word2, word3 và word4, hãy sử dụng câu lệnh phân tích cú pháp.

/* Main program */  

parse value 'This is a Tutorial' with word1 word2 word3 word4 
say "'"word1"'" 
say "'"word2"'" 
say "'"word3"'" 
say "'"word4"'"

Step 2- Cố gắng kết hợp nhiều câu lệnh thành một câu lệnh. Một ví dụ đã được biểu diễn ở dưới.

Giả sử nếu bạn có mã sau đây đã thực hiện nhiệm vụ cho: a and b và chuyển nó cho một phương thức có tên là proc.

do i = 1 to 100 
   a = 0 
   b = 1 
   call proc a,b 
end

Bạn có thể dễ dàng thay thế mã đã cho ở trên bằng mã sau bằng cách sử dụng câu lệnh phân tích cú pháp.

do i = 1 for 100 
   parse value 0 1 with 
   a, 
   b, 
   call proc a,b 
end

Step 3 - Cố gắng thay thế do..to loop với do..for loopbất cứ nơi nào có thể. Điều này thường được khuyến nghị khi biến điều khiển đang được lặp lại qua một vòng lặp.

/* Main program */ 
do i = 1 to 10 
   say i 
end

Chương trình trên nên được thay thế bằng chương trình sau.

/* Main program */ 
do i = 1 for 10 
   say i 
end

Step 4- Nếu có thể, hãy loại bỏ điều kiện for khỏi một vòng lặp do như trong chương trình sau. Nếu biến điều khiển không được yêu cầu, thì bạn chỉ cần đặt giá trị cuối vào vòng lặp do như hình dưới đây.

/* Main program */ 
do 10 
   say hello 
end

Step 5 - Trong một select clause, bất cứ điều gì bạn cảm thấy là điều kiện tốt nhất sẽ được đánh giá cần đặt lên hàng đầu trong when clause. Vì vậy, trong ví dụ sau, nếu chúng tôi biết rằng 1 là tùy chọn thường xuyên nhất, chúng tôi đặtwhen 1 clause là mệnh đề đầu tiên trong câu lệnh select.

/* Main program */ 
select 
   when 1 then say'1' 
   when 2 then say'2' 
   otherwise say '3' 
end

Mọi lập trình viên đều muốn chương trình của mình phải tốt nhất khi đạt chất lượng và hiệu quả. Sau đây là một số gợi ý hoặc thực hành lập trình tốt nhất khi viết chương trình Rexx có thể giúp một người đạt được những mục tiêu này.

Gợi ý 1

Sử dụng lệnh địa chỉ trước khi bạn đưa ra bất kỳ lệnh nào cho hệ điều hành hoặc dấu nhắc lệnh. Điều này sẽ giúp bạn lấy trước không gian địa chỉ trong bộ nhớ và làm cho chương trình của bạn chạy hiệu quả hơn.

Dưới đây là một ví dụ về lệnh địa chỉ.

Thí dụ

/* Main program */ 
address system dir

Đầu ra của lệnh như sau, nhưng nó có thể khác nhau giữa các hệ thống.

Volume in drive H is Apps 
Volume Serial Number is 8E66-AC3D  
Directory of H:\  
06/30/2016  01:28 AM    <DIR>          Apps 
07/05/2016  03:40 AM               463 main.class 
07/07/2016  01:30 AM                46 main.nrx 
07/07/2016  01:42 AM                38 main.rexx 
3 File(s)            547 bytes 
Dir(s)  313,085,173,760 bytes free

Gợi ý 2

Đảm bảo tất cả các lệnh đối với hệ điều hành ở dạng chữ hoa và trong dấu ngoặc kép nếu có thể.

Dưới đây là một ví dụ cho điều tương tự.

Thí dụ

/* Main program */ 
options arexx_bifs 
say chdir('\REXXML100') 
say directory()

Khi chạy chương trình trên, chúng ta sẽ nhận được kết quả như sau.

0 
D:\rexxxml100

Gợi ý 3

Tránh tạo các khối bình luận lớn như trong chương trình sau.

Thí dụ

/******/ 
/* */ 
/* */ 
/* */ 
/******/ 
/* Main program */ 
address system dir

Gợi ý 4

Sử dụng câu lệnh Phân tích cú pháp để gán các giá trị mặc định. Dưới đây là một ví dụ cho điều tương tự.

Thí dụ

parse value 0 1 with 
a, 
b

Gợi ý 5

Sử dụng câu lệnh "Left (var1,2)" nếu có thể thay vì câu lệnh "substr (var1,1,2)".

Gợi ý 6

Sử dụng câu lệnh "Right (var1,2)" nếu có thể thay vì câu lệnh "substr (var1, length (var1), 2)".

Để sử dụng các giao diện người dùng đồ họa có sẵn trong Rexx, người ta cần sử dụng 2 gói, một gói được gọi là ActiveTcl và cái kia là Rexxtkgói hàng. Cùng với 2 gói này, người ta có thể thiết kế các biểu mẫu bình thường có thể có các nút và các điều khiển khác trên các biểu mẫu.

Thiết lập môi trường

Điều đầu tiên cần làm là thiết lập môi trường. Chúng ta hãy thực hiện các bước sau để có môi trường như ý.

Step 1 - Tải xuống gói Activetcl từ trang web sau - https://www.activestate.com/activetcl

Step 2- Bước tiếp theo là bắt đầu cài đặt ActiveTCl. Nhấp vào nút Tiếp theo trên màn hình để tiếp tục.

Step 3 - Chấp nhận Thỏa thuận cấp phép và nhấp vào nút Tiếp theo.

Step 4 - Chọn một vị trí để cài đặt và nhấp vào nút tiếp theo.

Step 5 - Chọn một vị trí để cài đặt bản trình diễn và nhấp vào nút Tiếp theo.

Step 6 - Nhấn vào nút Next để tiến hành cài đặt.

Step 7 - Nhấn vào nút Finish để hoàn tất cài đặt.

Step 8 - Bước tiếp theo là tải phần mềm Rexxtk từ liên kết sau - https://sourceforge.net/projects/rexxtk/

Step 9- Nhấp đúp vào tệp trình cài đặt từ liên kết ở bước trước để bắt đầu cài đặt. Bấm vào nút tiếp theo để tiếp tục.

Step 10 - Trong màn hình tiếp theo, nhấp vào nút Có để đồng ý với Thỏa thuận cấp phép.

Step 11 - Trong màn hình tiếp theo, chọn vị trí cài đặt và nhấp vào nút Tiếp theo.

Step 12 - Chọn vị trí thư mục Chương trình và nhấp vào nút tiếp theo.

Sau khi cài đặt xong, bây giờ chúng ta có thể bắt đầu lập trình GUI trong Rexx.

Chương trình cơ bản

Hãy xem cách chúng ta có thể thiết kế một chương trình cơ bản đơn giản với Rexx ở định dạng giao diện người dùng đồ họa.

Thí dụ

/* Main program */ 
call RxFuncAdd 'TkLoadFuncs','rexxtk','TkLoadFuncs' 
call TkLoadFuncs 
do forever 
   interpret 'Call' TkWait() 
end 
call TkDropFuncs 
exit 0

Những điều sau đây cần được lưu ý về chương trình trên:

  • Thư viện Rexxtk và tất cả các chức năng của nó được tải bằng lệnh RxFuncAdd.

  • Vòng lặp do forever sẽ giữ cho cửa sổ mở và sẽ đợi người dùng nhập.

  • Khi đầu vào của người dùng được phát hiện, chương trình sẽ thoát.

Khi chương trình trên được thực thi, bạn sẽ nhận được kết quả sau.

Tạo menu

Các menu được tạo với sự trợ giúp của các chức năng TkMenu và TkAdd. Cú pháp của các hàm này được đưa ra dưới đây.

Cú pháp

TkMenu(widgetname,options,0)

Thông số

Widgetname - Một cái tên để đặt cho menu.

Các tùy chọn có thể là bất kỳ ai sau đây -

  • selectcolor - nếu hộp kiểm hoặc nút radio được sử dụng làm tùy chọn menu, thì tùy chọn này chỉ định màu để chọn khi bất kỳ tùy chọn menu nào được chọn.

  • tearoff - Tùy chọn này được sử dụng để thêm menu phụ vào menu chính.

  • title - Chuỗi cần được sử dụng để đặt tiêu đề cho cửa sổ.

Giá trị trả lại

Đã tạo một tay cầm cho menu.

Thí dụ

/* Main program */ 
call RxFuncAdd 'TkLoadFuncs','rexxtk','TkLoadFuncs' 
call TkLoadFuncs 

menubar = TkMenu('.m1') 
filemenu = TkMenu('.m1.file','-tearoff', 0) 
call TkAdd menubar, 'cascade', '-label', 'File', '-menu', filemenu 
call TkAdd filemenu, 'command', '-label', 'Open...', '-rexx', 'getfile' 
call TkConfig '.', '-menu', menubar 

do forever 
   interpret 'Call' TkWait() 
end 
call TkDropFuncs 
exit 0

Những điều sau đây cần được lưu ý về chương trình trên:

  • Thanh menu được tạo bằng cách sử dụng hàm TkMenu. Tham số 'tearoff' có nghĩa là chúng ta cần tạo menu con sẽ được đính kèm vào menu chính.

  • Sau đó chúng ta thêm 2 tùy chọn menu có tên là File và Open bằng chức năng TkAdd.

Khi chương trình trên được thực thi, bạn sẽ nhận được kết quả sau.

Reginald là một trình thông dịch Rexx khác được phát triển bởi Jeff Glantt và có một số tùy chỉnh về cách các chương trình Rexx có thể chạy. Trong phần này, chúng ta sẽ xem cách cài đặt Reginald và chạy một vài chương trình Rexx trong đó.

Thiết lập môi trường

Bước đầu tiên là thiết lập môi trường là tải xuống các tệp Reginald. Điều này có thể được thực hiện từ liên kết trang web sau:http://www.manmrk.net/tutorials/rexx/Reginald/win32/rxusrw32.htm

Khi quá trình tải xuống hoàn tất và bạn khởi chạy trình cài đặt, màn hình tiếp theo sẽ cho phép bạn chọn vị trí cài đặt.

Nhấp vào nút Cài đặt để tiếp tục.

Sau khi hoàn tất, bây giờ chúng ta có thể bắt đầu chạy một chương trình mẫu trong trình thông dịch Reginald. Tạo một chương trình đơn giản như hình dưới đây.

/* Main program */ 
say 'Hello'

Sau đó chạy lệnh sau:

RxLaunch.exe main.rexx

Sau đó, bạn sẽ nhận được kết quả sau. Chương trình này bây giờ sẽ chạy trong trình thông dịch Reginald.

Các chức năng khác có sẵn

Ngoài các lệnh Rexx thông thường, Reginald có một số lệnh cụ thể được thiết kế riêng cho hệ điều hành Windows. DriveMap là một trong những lệnh như vậy -

DriveMap

Chức năng này cung cấp thông tin về ổ đĩa.

Syntax -

Drivemap(,options)

Parameters -

Options - Đây là danh sách các từ khóa có thể được sử dụng để lấy các thông tin khác nhau về ổ đĩa của máy tính cục bộ.

Return Value

Một giá trị chuỗi có thông tin trên ổ đĩa.

Example -

/* Main program */ 
say 'Drives on system : ' DriveMap(,'FIXED')

Nếu chương trình trên được chạy, bạn sẽ nhận được kết quả sau. Đầu ra này phụ thuộc từ hệ thống này sang hệ thống khác.

List of disk drives :  C:\ D:\

Rexx cũng có cơ sở để làm việc với các máy chủ web. Phổ biến nhất là máy chủ web apache. Để sử dụng Rexxw với máy chủ web Apache, trước tiên bạn cần tải xuống mô-đun Rexx từ liên kết sau:https://sourceforge.net/projects/modrexx/?source=typ_redirect

Sau khi hoàn tất, hãy đảm bảo thêm các mô-đun Rexx mod vào đường dẫn lớp.

Các dòng sau cần được thêm và sửa đổi vào tệp cấu hình Apache.

Các dòng sau cần được thêm vào cuối thích hợp -

  • httpd.conf Danh sách LoadModule.
  • LoadModule rexx_module modules / mod_rexx.dll

Các dòng sau đây nên được thêm vào cuối http.conf tập tin.

  • Ứng dụng AddType / x-httpd-rexx-script .rex .rexx

  • Ứng dụng AddType / x-httpd-rexx-rsp .rsp

  • Thêm những thứ này để hỗ trợ Trang máy chủ REXX

  • RexxRspCompiler “c: / Program Files / Apache Group / Apache2 / bin / rspcomp.rex”

Khi các thay đổi trên đã được thực hiện, bạn cần tắt và khởi động lại máy chủ web apache của mình.

Các dòng trên cũng cho phép bạn có các trang máy chủ dựa trên Rexx giống như các trang máy chủ Java. Bạn có thể thêm mã Rexx trực tiếp vào các trang html.

Một ví dụ được hiển thị bên dưới -

<p>The current date and time is 
   <?rexx 
      /* Inserting the rexx statement */ 
      say date() time() 
   ?>
</p>

Khi một trang máy chủ dựa trên Rexx được chạy, những việc sau được thực hiện:

  • Đầu tiên, một tệp tạm thời được tạo.

  • Sau đó, trình biên dịch Rexx Server biên dịch tệp thành chương trình Rexx và đặt nó vào tệp tạm thời.

  • Bước tiếp theo là thực sự chạy chương trình Rexx.

Cuối cùng, tệp tạm thời được xóa.