Rexx - คู่มือฉบับย่อ

Rexx (Restructured Extended Executor)ได้รับการออกแบบให้เป็นภาษาสคริปต์ เป้าหมายคือทำให้การเขียนสคริปต์เป็นเรื่องง่ายรวดเร็วเชื่อถือได้และปราศจากข้อผิดพลาดมากที่สุด ภาษาโปรแกรมจำนวนมากได้รับการออกแบบมาเพื่อให้เข้ากันได้กับภาษาเก่าและเขียนขึ้นสำหรับผู้ชมหรือแพลตฟอร์มเฉพาะ Rexx ละเว้นวัตถุประสงค์ที่ไม่เกี่ยวข้อง ได้รับการออกแบบตั้งแต่วันแรกให้ทรงพลัง แต่ใช้งานง่าย

REXX ได้รับการออกแบบและดำเนินการครั้งแรกในภาษาประกอบเป็น 'ตัวเองเวลาโครงการระหว่างวันที่ 20 THมีนาคม 1979 และกลางปี 1982 โดยไมค์ Cowlishaw ของ IBM แต่เดิมเป็นภาษาโปรแกรมสคริปต์เพื่อเปลี่ยนภาษาEXEC and EXEC 2. มันถูกออกแบบมาให้เป็นไฟล์macro or scripting languageสำหรับระบบใด ๆ ดังนั้น Rexx จึงถือเป็นสารตั้งต้นของ Tcl และ Python Rexx ยังได้รับการออกแบบโดยผู้สร้างให้เป็นเวอร์ชันที่เรียบง่ายและง่ายต่อการเรียนรู้ของภาษาโปรแกรม PL / I

คุณสมบัติของ Rexx

Rexx เป็นภาษาโปรแกรมมีคุณสมบัติที่สำคัญดังต่อไปนี้ -

  • ไวยากรณ์ง่ายๆ

  • ความสามารถในการกำหนดเส้นทางคำสั่งไปยังหลายสภาพแวดล้อม

  • ความสามารถในการสนับสนุนฟังก์ชันโพรซีเดอร์และคำสั่งที่เกี่ยวข้องกับสภาวะแวดล้อมการเรียกใช้เฉพาะ

  • สแต็กในตัวที่มีความสามารถในการทำงานร่วมกับโฮสต์สแต็กหากมี

  • ชุดคำสั่งขนาดเล็กที่มีคำสั่งเพียงสองโหล

  • ไวยากรณ์อิสระ

  • โทเค็นที่ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่รวมถึงชื่อตัวแปร

  • พื้นฐานสตริงอักขระ

  • การพิมพ์ข้อมูลแบบไดนามิกไม่มีการประกาศ

  • ไม่มีคำหลักที่สงวนไว้ยกเว้นในบริบทท้องถิ่น

  • ไม่รวมไฟล์สิ่งอำนวยความสะดวก

  • ความแม่นยำของตัวเลขโดยพลการ

  • เลขคณิตทศนิยมทศนิยม

  • ฟังก์ชันในตัวที่มีให้เลือกมากมายโดยเฉพาะการประมวลผลสตริงและคำ

  • การจัดการพื้นที่เก็บข้อมูลอัตโนมัติ

  • การป้องกันการชน

  • โครงสร้างข้อมูลแอดเดรสเนื้อหา

  • อาร์เรย์เชื่อมโยง

  • เข้าถึงคำสั่งระบบและสิ่งอำนวยความสะดวกได้อย่างตรงไปตรงมา

  • การจัดการข้อผิดพลาดอย่างง่ายและการติดตามและแก้ไขข้อบกพร่องในตัว

  • ข้อ จำกัด เทียมเล็กน้อย

  • สิ่งอำนวยความสะดวก I / O ที่ง่ายขึ้น

เว็บไซต์อย่างเป็นทางการของ Rexx คือwww.oorexx.org

ก่อนที่คุณจะสามารถเริ่มทำงานกับ Rexx ได้คุณต้องตรวจสอบให้แน่ใจว่าคุณมี Rexx เวอร์ชันที่ทำงานได้อย่างสมบูรณ์บนระบบของคุณ บทนี้จะอธิบายการติดตั้ง Rexx และการกำหนดค่าตามมาในเครื่อง Windows เพื่อเริ่มต้นใช้งาน Rexx

ตรวจสอบให้แน่ใจว่าตรงตามข้อกำหนดของระบบต่อไปนี้ก่อนดำเนินการติดตั้ง

ความต้องการของระบบ

หน่วยความจำ RAM 2 GB (แนะนำ)
พื้นที่ดิสก์ ไม่มีข้อกำหนดขั้นต่ำ ควรมีพื้นที่เก็บข้อมูลเพียงพอสำหรับจัดเก็บโปรแกรมที่จะสร้างโดยใช้ Rexx
เวอร์ชันระบบปฏิบัติการ Rexx สามารถติดตั้งบน Windows, Ubuntu / Debian, Mac OS X

กำลังดาวน์โหลด Rexx

ในการดาวน์โหลด Rexx คุณควรใช้ URL ต่อไปนี้ - https://www.oorexx.org/download.html

หน้านี้มีการดาวน์โหลดที่หลากหลายสำหรับ Rexx เวอร์ชันต่างๆดังที่แสดงในภาพหน้าจอต่อไปนี้

คลิกที่ 'ooRexx install files' ในตารางที่มีส่วนหัวของ Release 4.2.0

หลังจากนี้คุณจะถูกนำไปยังหน้าต่อไปนี้อีกครั้ง

คลิกที่ ooRexx-4.2.0.windows.x86_64.exe เพื่อดาวน์โหลดไฟล์ 64-bitเวอร์ชันของซอฟต์แวร์ เราจะหารือเกี่ยวกับการติดตั้งซอฟต์แวร์ในบทต่อไปนี้

ขั้นตอนต่อไปนี้จะอธิบายรายละเอียดวิธีการติดตั้ง Rexx บนระบบ Windows

Step 1- เปิดตัวติดตั้งที่ดาวน์โหลดมาในส่วนก่อนหน้านี้ หลังจากโปรแกรมติดตั้งเริ่มทำงานให้คลิกที่ปุ่ม Run

Step 2 - คลิกปุ่มถัดไปบนหน้าจอต่อไปนี้เพื่อดำเนินการติดตั้ง

Step 3 - คลิกที่ไฟล์ I Agree เพื่อดำเนินการต่อ

Step 4 - ยอมรับไฟล์ default components จากนั้นคลิกที่ปุ่มถัดไป

Step 5 - เลือกตำแหน่งการติดตั้งและคลิกที่ปุ่มถัดไป

Step 6 - ยอมรับกระบวนการเริ่มต้นที่จะติดตั้งและคลิกที่ปุ่มถัดไป

Step 7 - เลือกการเชื่อมโยงไฟล์เริ่มต้นและคลิกที่ปุ่มถัดไป

Step 8 - คลิกที่ช่องทำเครื่องหมายของรายการส่ง Rexx ไปยังไฟล์เรียกใช้งานจากนั้นคลิกที่ปุ่มถัดไปดังที่แสดงในภาพหน้าจอต่อไปนี้

Step 9- ในหน้าจอถัดไปให้เลือกตัวแก้ไขสำหรับทำงานกับไฟล์ Rexx ให้ notepad เป็นตัวเลือกเริ่มต้น ยอมรับนามสกุลเริ่มต้นสำหรับไฟล์ Rexx แต่ละไฟล์ด้วย

Step 10 - ยอมรับการตั้งค่าเริ่มต้นบนหน้าจอต่อไปนี้ที่ปรากฏขึ้นและคลิกที่ปุ่มถัดไปเพื่อดำเนินการติดตั้งต่อไป

Step 11 - สุดท้ายคลิกที่ปุ่มติดตั้งเพื่อดำเนินการติดตั้งต่อไป

Step 12 - เมื่อการติดตั้งเสร็จสมบูรณ์คุณต้องคลิกที่ปุ่มถัดไปเพื่อดำเนินการต่อ

Step 13 - คลิกที่ปุ่ม Finish เพื่อทำการติดตั้ง

ในบทนี้เราจะพูดถึงวิธีการติดตั้งปลั๊กอิน popular IDE’s (Integrated Development Environment). Rexx เป็นภาษาโปรแกรมยังมีอยู่ใน IDE ยอดนิยมเช่นEclipse. มาดูกันว่าเราจะรับปลั๊กอินที่จำเป็นใน IDE เหล่านี้ได้อย่างไรเพื่อให้คุณมีทางเลือกมากขึ้นในการทำงานกับ Rexx

การติดตั้งใน Eclipse

เพื่อให้การติดตั้ง Rexx ใน Eclipse ปราศจากปัญหาคุณจะต้องปฏิบัติตามขั้นตอนต่อไปนี้

Step 1 - เปิด Eclipse และคลิกที่รายการเมนู Help → Eclipse Marketplace ดังที่แสดงในภาพหน้าจอต่อไปนี้

Step 2 - ในกล่องโต้ตอบถัดไปให้ป้อน Rexx ในเกณฑ์การค้นหาและคลิกที่ปุ่มค้นหา

เมื่อเสร็จแล้วคลิกปุ่มติดตั้ง

Step 3 - คลิกที่ปุ่มยืนยันเพื่อดำเนินการติดตั้งคุณสมบัติต่อไป

Step 4- จากนั้น Eclipse จะดาวน์โหลดไฟล์ที่จำเป็นเพื่อเริ่มการติดตั้ง เมื่อเสร็จแล้ว Eclipse จะขอให้ยอมรับข้อตกลงใบอนุญาต คลิกที่ยอมรับข้อตกลงใบอนุญาตจากนั้นคลิกที่ปุ่มเสร็จสิ้นตามที่แสดงในภาพหน้าจอต่อไปนี้

จากนั้น Eclipse จะเริ่มติดตั้งซอฟต์แวร์ในพื้นหลัง

Step 5- คุณอาจได้รับคำเตือนด้านความปลอดภัย (ดังที่แสดงในภาพหน้าจอต่อไปนี้) คลิกที่ปุ่ม OK เพื่อดำเนินการต่อ

Step 6- คุณจะได้รับแจ้งให้รีสตาร์ท Eclipse เมื่อติดตั้งการอัปเดตแล้ว คลิกใช่เพื่อรีสตาร์ท Eclipse

เพื่อให้เข้าใจไวยากรณ์พื้นฐานของ Rexx ก่อนอื่นเรามาดูโปรแกรม Hello World แบบง่ายๆ

ตัวอย่าง

/* Main program */ 
say "Hello World"

เราจะเห็นว่าโปรแกรม hello world นั้นเรียบง่ายเพียงใด มันเป็นบรรทัดสคริปต์ง่ายๆที่ใช้ในการดำเนินการโปรแกรม Hello World

สิ่งต่อไปนี้ต้องสังเกตเกี่ยวกับโปรแกรมข้างต้น -

  • say command ใช้เพื่อส่งออกค่าไปยังคอนโซล

  • /* */ ใช้สำหรับความคิดเห็นใน Rexx

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น -

Hello World

รูปแบบทั่วไปของคำชี้แจง

ใน Rexx เรามาดูรูปแบบทั่วไปของโปรแกรม ลองดูตัวอย่างต่อไปนี้

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

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น -

11

มาดูสิ่งที่เราเข้าใจจากโปรแกรมด้านบนกัน -

  • เพิ่มเป็นฟังก์ชันที่กำหนดให้เพิ่มตัวเลข 2 ตัว

  • ในโปรแกรมหลักค่า 5 และ 6 ถูกใช้เป็นพารามิเตอร์ของฟังก์ชันเพิ่ม

  • คีย์เวิร์ด exit ใช้เพื่อออกจากโปรแกรมหลัก ใช้เพื่อแยกความแตกต่างของโปรแกรมหลักจากฟังก์ชันเพิ่ม

  • ฟังก์ชันเพิ่มแตกต่างจากสัญลักษณ์ ':'

  • คำสั่งแยกวิเคราะห์ใช้เพื่อแยกวิเคราะห์อาร์กิวเมนต์ที่เข้ามา

  • สุดท้ายคำสั่ง return ใช้เพื่อส่งกลับผลรวมของค่าตัวเลข

รูทีนย่อยและฟังก์ชั่น

ใน Rexx โดยปกติโค้ดจะแบ่งออกเป็นรูทีนย่อยและฟังก์ชัน รูทีนย่อยและฟังก์ชันใช้เพื่อแยกความแตกต่างของโค้ดออกเป็นหน่วยตรรกะที่แตกต่างกัน ความแตกต่างที่สำคัญระหว่างรูทีนย่อยและฟังก์ชันคือฟังก์ชันจะส่งคืนค่าในขณะที่รูทีนย่อยไม่มี

ด้านล่างนี้เป็นตัวอย่างความแตกต่างที่สำคัญระหว่างรูทีนย่อยและฟังก์ชันสำหรับการใช้งานเพิ่มเติม -

การใช้งานฟังก์ชัน

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

การใช้งาน Subroutine

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

ผลลัพธ์ของทั้งสองโปรแกรมจะเป็นค่า 11

การดำเนินการคำสั่ง

Rexx สามารถใช้เป็นภาษาควบคุมสำหรับระบบที่ใช้คำสั่งต่างๆ วิธีที่ Rexx รันคำสั่งในระบบเหล่านี้มีดังต่อไปนี้ เมื่อ Rexx พบบรรทัดโปรแกรมซึ่งไม่ใช่ทั้งคำสั่งหรือการกำหนดมันจะถือว่าบรรทัดนั้นเป็นนิพจน์สตริงซึ่งจะถูกประเมินแล้วส่งต่อไปยังสภาวะแวดล้อม

ตัวอย่างมีดังนี้ -

ตัวอย่าง

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

แต่ละบรรทัดที่คล้ายกันสามบรรทัดในโปรแกรมนี้คือนิพจน์สตริงที่เพิ่มชื่อของไฟล์ (ที่มีอยู่ในค่าคงที่ของสตริง) ให้กับชื่อของคำสั่ง (กำหนดเป็นพารามิเตอร์) สตริงผลลัพธ์จะถูกส่งไปยังสภาวะแวดล้อมเพื่อเรียกใช้งานเป็นคำสั่ง เมื่อคำสั่งเสร็จสิ้นตัวแปร "rc" จะถูกตั้งค่าเป็นรหัสออกของคำสั่ง

ผลลัพธ์ของโปรแกรมข้างต้นมีดังนี้ -

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)"

คำหลักใน Rexx

ไวยากรณ์ฟรีของ REXX หมายความว่าสัญลักษณ์บางตัวสงวนไว้สำหรับการใช้งานของตัวประมวลผลภาษาในบางบริบท

ภายในคำแนะนำเฉพาะสัญลักษณ์บางอย่างอาจถูกสงวนไว้เพื่อแยกส่วนต่างๆของคำสั่ง สัญลักษณ์เหล่านี้เรียกว่าคำหลัก ตัวอย่างของคำหลัก REXX คือWHILE in a DO instruction, และ THEN (ซึ่งทำหน้าที่เป็นตัวยุติประโยคในกรณีนี้) ตามหลังไฟล์ IF or WHEN clause.

นอกเหนือจากกรณีเหล่านี้จะมีการตรวจสอบเฉพาะสัญลักษณ์ง่ายๆที่เป็นโทเค็นแรกในประโยคและไม่ตามด้วย "=" หรือ ":" เพื่อดูว่าเป็นคำสั่งคำสั่งหรือไม่ คุณสามารถใช้สัญลักษณ์ที่อื่นได้อย่างอิสระในอนุประโยคโดยไม่ต้องนำมาเป็นคำหลัก

ความคิดเห็นใน Rexx

ข้อคิดเห็นใช้ในการจัดทำเอกสารรหัสของคุณ ความคิดเห็นบรรทัดเดียวระบุได้โดยใช้เครื่องหมาย / * * / ที่ตำแหน่งใดก็ได้ในบรรทัด

ตัวอย่างมีดังนี้ -

/* 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

ความคิดเห็นสามารถเขียนระหว่างบรรทัดรหัสดังที่แสดงในโปรแกรมต่อไปนี้ -

/* 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

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น -

11

คุณสามารถมีหลายบรรทัดในความคิดเห็นดังที่แสดงในโปรแกรมต่อไปนี้ -

/* 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

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น -

11

ในภาษาโปรแกรมใด ๆ คุณต้องใช้ตัวแปรต่างๆเพื่อจัดเก็บข้อมูลประเภทต่างๆ ตัวแปรไม่ใช่อะไรเลยนอกจากตำแหน่งหน่วยความจำที่สงวนไว้เพื่อเก็บค่า ซึ่งหมายความว่าเมื่อคุณสร้างตัวแปรคุณจะสงวนพื้นที่บางส่วนในหน่วยความจำเพื่อเก็บค่าที่เกี่ยวข้องกับตัวแปรนั้น

คุณอาจต้องการจัดเก็บข้อมูลประเภทข้อมูลต่างๆเช่น String, Character, Wide Character, Integer, Floating Point, Boolean เป็นต้นระบบปฏิบัติการจะจัดสรรหน่วยความจำและตัดสินใจว่าจะจัดเก็บข้อมูลใดในพื้นที่สงวน หน่วยความจำ.

ประเภทข้อมูลในตัว

Rexx นำเสนอประเภทข้อมูลในตัวที่หลากหลาย ต่อไปนี้เป็นรายการประเภทข้อมูลที่กำหนดไว้ใน Rexx

  • Integer- สตริงตัวเลขที่ไม่มีจุดทศนิยมหรือตัวระบุเลขชี้กำลัง อักขระตัวแรกสามารถเป็นได้a plus (+) or minus (-) sign. ตัวเลขที่แสดงต้องอยู่ระหว่าง -2147483648 ถึง 2147483647

  • Big Integer- สตริงของตัวเลขที่ไม่มีจุดทศนิยมหรือตัวระบุเลขชี้กำลัง อักขระตัวแรกสามารถเป็นเครื่องหมายบวก (+) หรือลบ (-) ตัวเลขที่แสดงต้องอยู่ระหว่าง -9223372036854775808 ถึง 2147483648 รวมหรือระหว่าง 2147483648 ถึง 9223372036854775807

  • Decimal - จะมาจากรูปแบบใดรูปแบบหนึ่งต่อไปนี้ -

    • สตริงตัวเลขที่มีจุดทศนิยม แต่ไม่มีตัวระบุเลขชี้กำลัง p แสดงถึงความแม่นยำและ sแสดงถึงมาตราส่วนของเลขฐานสิบที่สตริงแสดง อักขระตัวแรกสามารถเป็นเครื่องหมายบวก (+) หรือลบ (-)

    • สตริงของตัวเลขที่ does not contain a decimal pointหรือตัวระบุเลขชี้กำลัง อักขระตัวแรกสามารถเป็นเครื่องหมายบวก (+) หรือลบ (-) ตัวเลขที่แสดงน้อยกว่า -9223372036854775808 หรือมากกว่า 9223372036854775807

  • Float- สตริงที่แสดงถึงตัวเลขในสัญกรณ์ทางวิทยาศาสตร์ สตริงประกอบด้วยชุดของตัวเลขตามด้วยตัวระบุเลขชี้กำลัง (E หรือ e ตามด้วยเครื่องหมายบวก (+) หรือลบ (-) และชุดตัวเลข) สตริงสามารถเริ่มต้นด้วยเครื่องหมายบวก (+) หรือลบ (-)

  • String - สตริงอักขระปกติ

ต่อไปนี้เป็นตัวอย่างบางส่วนของวิธีการใช้ข้อมูลแต่ละประเภท อีกครั้งข้อมูลแต่ละประเภทจะกล่าวถึงโดยละเอียดในบทต่อ ๆ ไป นี่เป็นเพียงเพื่อให้คุณได้รับความเร็วด้วยคำอธิบายสั้น ๆ เกี่ยวกับประเภทข้อมูลที่กล่าวถึงข้างต้น

จำนวนเต็ม

ตัวอย่างวิธีการใช้ข้อมูลประเภทตัวเลขจะแสดงในโปรแกรมต่อไปนี้ โปรแกรมนี้แสดงการเพิ่มจำนวนเต็ม 2 จำนวน

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

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น -

11

จำนวนเต็มใหญ่

โปรแกรมต่อไปนี้แสดงความสามารถของ Rexx ในการจัดการกับจำนวนเต็มขนาดใหญ่ โปรแกรมนี้แสดงวิธีการบวกเลขจำนวนเต็ม 2 ตัว

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

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น -

6.00000000E+21

ทศนิยม

โปรแกรมต่อไปนี้แสดงความสามารถของ Rexx ในการจัดการตัวเลขทศนิยม โปรแกรมนี้แสดงวิธีการเพิ่มทศนิยม 2 ตัว

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

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น -

12.1

ลอย

ตัวอย่างต่อไปนี้แสดงกรณีที่ตัวเลขสามารถทำงานเป็นทศนิยมได้

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

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น -

141200

สตริง

ตัวอย่างวิธีใช้ชนิดข้อมูลทูเพิลแสดงในโปรแกรมต่อไปนี้

เรากำลังกำหนดไฟล์ Tuple Pซึ่งมี 3 เทอม tuple_size เป็นฟังก์ชัน inbuilt ที่กำหนดไว้ใน Rexx ซึ่งสามารถใช้เพื่อกำหนดขนาดของทูเปิล

Example

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

exit 
display:  

parse arg a 
say a

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น -

hello

ใน Rexx ตัวแปรทั้งหมดถูกผูกไว้กับคำสั่ง '=' ชื่อตัวแปรบางครั้งเรียกว่าสัญลักษณ์ อาจประกอบด้วยตัวอักษรตัวเลขและอักขระเช่น '. ! ? _'. ชื่อตัวแปรที่คุณสร้างต้องไม่ขึ้นต้นด้วยตัวเลขหรือจุด ชื่อตัวแปรง่ายๆไม่รวมจุด ชื่อตัวแปรที่มีจุดเรียกว่าตัวแปรผสมและแสดงถึงอาร์เรย์หรือตาราง

ต่อไปนี้เป็นประเภทพื้นฐานของตัวแปรใน Rexx ซึ่งได้อธิบายไว้ในบทที่แล้ว -

  • Integers- ใช้แทนจำนวนเต็มหรือจำนวนทศนิยม ตัวอย่างคือ 10

  • Big integers - หมายถึงค่าจำนวนเต็มขนาดใหญ่

  • Decimal - ค่าทศนิยมคือสตริงของตัวเลขที่มีจุดทศนิยม แต่ไม่มีตัวระบุเลขชี้กำลัง

  • Float - ค่าลอยเป็นสตริงที่แสดงถึงตัวเลขในสัญกรณ์ทางวิทยาศาสตร์

  • String - ชุดอักขระกำหนดสตริงใน Rexx

ฟังก์ชันตัวแปรประเภทต่างๆ

ในส่วนนี้เราจะพูดถึงฟังก์ชันต่างๆที่ตัวแปรสามารถทำได้

การประกาศตัวแปร

ไวยากรณ์ทั่วไปของการกำหนดตัวแปรแสดงดังนี้ -

var-name = var-value

ที่ไหน

  • var-name - นี่คือชื่อของตัวแปร

  • var-value - นี่คือค่าที่ผูกไว้กับตัวแปร

โปรแกรมต่อไปนี้เป็นตัวอย่างของการประกาศตัวแปร -

Example

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

ในตัวอย่างข้างต้นเรามี 2 ตัวแปรหนึ่งคือ X ซึ่งผูกไว้กับค่า 40 และต่อไปคือ Y ซึ่งผูกไว้กับค่าของ 50. ตัวแปรอื่นที่เรียกว่า Result ถูกผูกไว้กับการเพิ่มของX and Y.

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังนี้ -

90

การตั้งชื่อตัวแปร

ชื่อตัวแปรบางครั้งเรียกว่าสัญลักษณ์ อาจประกอบด้วยตัวอักษรตัวเลขและอักขระเช่น " ! เหรอ? _ '. ชื่อตัวแปรที่คุณสร้างต้องไม่ขึ้นต้นด้วยตัวเลขหรือจุด

หากยังไม่ได้กำหนดค่าตัวแปรจะเรียกว่าไม่ได้กำหนดค่าเริ่มต้น ค่าของตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้นคือชื่อของตัวแปรในตัวอักษรตัวพิมพ์ใหญ่

ตัวอย่างของตัวแปรที่ไม่ได้กำหนดมีดังนี้ -

Example

/* Main program */ 
unassignedvalue 
say unassignedvalue

หากคุณเรียกใช้โปรแกรมข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้ -

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

ตัวแปรสามารถกำหนดค่าได้มากกว่าหนึ่งครั้ง โปรแกรมด้านล่างนี้แสดงให้เห็นว่าค่าของ X สามารถกำหนดค่าหลาย ๆ ครั้งได้อย่างไร

Example

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

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังนี้ -

50

ตัวแปรการพิมพ์

ค่าของตัวแปรถูกพิมพ์โดยใช้ sayคำสั่ง ต่อไปนี้เป็นตัวอย่างของการพิมพ์ตัวแปรต่างๆ

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

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังนี้ -

40 
50.5 
hello

ตัวดำเนินการคือสัญลักษณ์ที่บอกให้คอมไพเลอร์ดำเนินการจัดการทางคณิตศาสตร์หรือตรรกะเฉพาะ

Rexx มีตัวดำเนินการหลายประเภทซึ่งอธิบายโดยละเอียดดังนี้ -

  • ตัวดำเนินการเลขคณิต
  • ตัวดำเนินการเชิงสัมพันธ์
  • ตัวดำเนินการทางตรรกะ
  • ตัวดำเนินการ Bitwise

ตัวดำเนินการเลขคณิต

ภาษา Rexx สนับสนุนตัวดำเนินการทางคณิตศาสตร์ปกติเป็นภาษาใดก็ได้ ต่อไปนี้เป็นตัวดำเนินการทางคณิตศาสตร์ที่มีอยู่ใน Rexx

แสดงตัวอย่าง

ตัวดำเนินการ คำอธิบาย ตัวอย่าง
+ การเพิ่มตัวถูกดำเนินการสองตัว 1 + 2 จะให้ 3
- ลบตัวถูกดำเนินการที่สองจากตัวแรก 1 - 2 จะให้ -1
การคูณของตัวถูกดำเนินการทั้งสอง 2 ∗ 2 จะให้ 4
/ การหารตัวเศษด้วยตัวส่วน 2/2 จะให้ 1
// ส่วนที่เหลือของการหารจำนวนแรกด้วยตัวที่สอง 3 // 2 จะให้ 1
% องค์ประกอบ div จะดำเนินการหารและส่งกลับองค์ประกอบจำนวนเต็ม 3% 2 จะให้ 1

ตัวดำเนินการเชิงสัมพันธ์

ตัวดำเนินการเชิงสัมพันธ์อนุญาตให้มีการเปรียบเทียบวัตถุ ต่อไปนี้เป็นตัวดำเนินการเชิงสัมพันธ์ที่มีอยู่ใน Rexx ใน Rexx ค่าจริงจะแสดงด้วย 1 และค่าเท็จแสดงด้วย 0

แสดงตัวอย่าง

ตัวดำเนินการ คำอธิบาย ตัวอย่าง
== ทดสอบความเท่าเทียมกันระหว่างสองวัตถุ 2 = 2 จะให้ 1
< ตรวจสอบว่าวัตถุด้านซ้ายน้อยกว่าตัวถูกดำเนินการด้านขวาหรือไม่ 2 <3 จะให้ 1
= < ตรวจสอบเพื่อดูว่าวัตถุด้านซ้ายน้อยกว่าหรือเท่ากับตัวถูกดำเนินการด้านขวาหรือไม่ 2 = <3 จะให้ 1
> ตรวจสอบเพื่อดูว่าวัตถุด้านซ้ายมีค่ามากกว่าตัวถูกดำเนินการด้านขวาหรือไม่ 3> 2 จะให้ 1
> = ตรวจสอบว่าวัตถุทางซ้ายมากกว่าหรือเท่ากับตัวถูกดำเนินการด้านขวาหรือไม่ 3> 2 จะให้ 1

ตัวดำเนินการทางตรรกะ

ตัวดำเนินการทางตรรกะใช้เพื่อประเมินนิพจน์บูลีน ต่อไปนี้เป็นตัวดำเนินการทางตรรกะที่มีอยู่ใน Rexx

แสดงตัวอย่าง

ตัวดำเนินการ คำอธิบาย ตัวอย่าง
& นี่คือโอเปอเรเตอร์“ และ” เชิงตรรกะ 1 หรือ 1 จะให้ 1
| นี่คือโอเปอเรเตอร์“ หรือ” เชิงตรรกะ 1 หรือ 0 จะให้ 1
\ นี่คือโอเปอเรเตอร์ "ไม่ใช่" เชิงตรรกะ \ 0 จะให้ 1
&& นี่คือโอเปอเรเตอร์“ หรือ” เอกสิทธิ์เฉพาะทางตรรกะ 1 && 0 จะให้ 1

ตัวดำเนินการ Bitwise

Groovy มีตัวดำเนินการสี่บิต ด้านล่างนี้คือตัวดำเนินการระดับบิตที่มีอยู่ใน Groovy

แสดงตัวอย่าง

ซีเนียร์ ตัวดำเนินการและคำอธิบาย
1

bitand

นี่คือโอเปอเรเตอร์“ และ” แบบบิต

2

bitor

นี่คือโอเปอเรเตอร์“ หรือ” แบบบิต

3

bitxor

นี่คือ "xor" แบบบิตหรือเฉพาะตัวหรือโอเปอเรเตอร์

ลำดับความสำคัญของตัวดำเนินการ

ตารางต่อไปนี้แสดงลำดับความสำคัญของตัวดำเนินการสำหรับตัวดำเนินการ Rexx ตามลำดับความสำคัญจากมากไปหาน้อยของลำดับความสำคัญ

ตัวดำเนินการ ลำดับความสำคัญ
ตัวดำเนินการคำนำหน้า + - \
การบวกและการลบ + -
ตัวดำเนินการเปรียบเทียบ = ==> <> = <=
ตรรกะ AND &
ตรรกะหรือ |
EXCLUSIVE หรือ &&

อาร์เรย์ในภาษาโปรแกรมใด ๆ ช่วยให้คุณสามารถจัดกลุ่มรายการค่าประเภทเดียวกันได้ การใช้อาร์เรย์คือการช่วยให้คุณสร้างรายการประเภทของค่าที่คล้ายกันซึ่ง ได้แก่sortable, searchable และสามารถ easily manipulated. Rexx ยังช่วยให้สามารถกำหนดอาร์เรย์ได้ อาร์เรย์เหล่านี้อาจเป็นมิติเดียวหรือหลายมิติ

อาร์เรย์ Rexx อาจเบาบาง นั่นคือไม่ใช่ว่าทุกตำแหน่งอาร์เรย์จะต้องมีค่าหรือแม้กระทั่งการเริ่มต้น อาจมีตำแหน่งอาร์เรย์ว่างหรือช่องระหว่างตำแหน่งที่มีองค์ประกอบข้อมูล หรืออาร์เรย์อาจมีความหนาแน่นซึ่งสล็อตอาร์เรย์ที่ต่อเนื่องกันทั้งหมดมีองค์ประกอบข้อมูล

ในหลายภาษาโปรแกรมคุณต้องกังวลว่าตัวห้อยของรายการแรกในตารางคืออะไร ตัวห้อยตัวเลขตัวแรกเป็น 0 หรือ 1? ใน Rexx ตัวห้อยแรกคืออะไรก็ได้ที่คุณใช้! ดังนั้นป้อนองค์ประกอบอาร์เรย์แรกในตำแหน่ง 0 หรือ 1 ตามที่คุณต้องการ

array_name.0 = ‘first element’

หรือ

array_name.1 = ‘first element’

มาดูการดำเนินการต่างๆสำหรับอาร์เรย์

การสร้างอาร์เรย์

อาร์เรย์ถูกสร้างขึ้นด้วยหลักการตั้งชื่อเดียวกันซึ่งใช้สำหรับตัวแปรใน Rexx

ไวยากรณ์ทั่วไปสำหรับการสร้างอาร์เรย์มีดังนี้ -

Arrayname.index = value

ที่ไหน

  • Arrayname - นี่คือชื่อที่ระบุให้กับอาร์เรย์

  • Index - นี่คือตำแหน่งดัชนีในอาร์เรย์เพื่ออ้างถึงองค์ประกอบเฉพาะ

  • Value - นี่คือค่าที่กำหนดให้กับองค์ประกอบดัชนีในอาร์เรย์

ตัวอย่างการประกาศอาร์เรย์มีดังนี้ -

Example

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

ประเด็นต่อไปนี้ต้องสังเกตเกี่ยวกับโปรแกรมข้างต้น -

  • ชื่อของอาร์เรย์ถูกกำหนดเป็นรายการ
  • มี 3 องค์ประกอบของอาร์เรย์ซึ่งเริ่มต้นด้วยค่า 0

การกำหนดค่าให้กับองค์ประกอบอาร์เรย์

สามารถกำหนดค่าใหม่ให้กับองค์ประกอบอาร์เรย์ได้ในลักษณะเดียวกับที่องค์ประกอบอาร์เรย์เริ่มต้น

โปรแกรมต่อไปนี้เป็นตัวอย่างของค่าที่สามารถกำหนดให้กับค่าดัชนีต่างๆของอาร์เรย์ที่มีอยู่

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

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

การแสดงค่าของอาร์เรย์

ค่าของอาร์เรย์สามารถแสดงได้โดยอ้างอิงตำแหน่งดัชนีขององค์ประกอบอาร์เรย์ ตัวอย่างต่อไปนี้แสดงเพื่อเข้าถึงองค์ประกอบต่างๆของอาร์เรย์

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

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังนี้ -

10
0
30

คัดลอกอาร์เรย์

องค์ประกอบทั้งหมดของอาร์เรย์สามารถคัดลอกไปยังอาร์เรย์อื่นได้ ไวยากรณ์ทั่วไปของสิ่งนี้มีดังนี้ -

Newarray. = sourcearray.

ที่ไหน

  • Newarray - นี่คืออาร์เรย์ใหม่ที่ต้องคัดลอกองค์ประกอบไปยัง

  • Sourcearray - นี่คืออาร์เรย์ต้นทางที่จำเป็นต้องคัดลอกองค์ประกอบ

ตัวอย่างวิธีดำเนินการคัดลอกสำหรับอาร์เรย์จะแสดงในโปรแกรมต่อไปนี้ -

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

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น -

10
0
30

การวนซ้ำผ่านองค์ประกอบอาร์เรย์

องค์ประกอบของอาร์เรย์สามารถทำซ้ำได้โดยใช้คำสั่งซ้ำที่มีอยู่ใน Rexx ตัวอย่างวิธีการทำได้มีดังนี้ -

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

คำแนะนำต่อไปนี้ต้องสังเกตเกี่ยวกับโปรแกรมข้างต้น -

  • do loop ใช้เพื่อวนซ้ำผ่านองค์ประกอบอาร์เรย์

  • ตัวแปร number_of_elements ใช้ในการจัดเก็บจำนวนองค์ประกอบในอาร์เรย์

  • variable j ใช้เพื่อวนซ้ำผ่านแต่ละองค์ประกอบของอาร์เรย์

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น -

10
20
30

อาร์เรย์สองมิติ

มีการกล่าวถึงด้วยว่าเราสามารถสร้างอาร์เรย์หลายมิติใน Rexx ได้ ลองดูตัวอย่างวิธีการใช้อาร์เรย์ 2 มิติ

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

ผลลัพธ์ของโปรแกรมข้างต้นจะแสดงดังนี้ -

10
11
12

ประเด็นต่อไปนี้ต้องสังเกตเกี่ยวกับโปรแกรมข้างต้น -

  • ในการสร้างอาร์เรย์หลายมิติเราสามารถใช้การสร้างดัชนีอีกชั้นหนึ่งได้ ดังนั้นในตัวอย่างของเราเราใช้list.1.1 เพื่อสร้างอาร์เรย์ภายในอื่นสำหรับค่าดัชนี 1 ของอาร์เรย์รายการ

จนถึงตอนนี้เราได้เห็นข้อความที่ถูกดำเนินการทีละคำสั่งในลักษณะตามลำดับ นอกจากนี้คำสั่งยังมีให้ใน Rexx เพื่อปรับเปลี่ยนโฟลว์ของการควบคุมในตรรกะของโปรแกรม จากนั้นจะจัดประเภทเป็นขั้นตอนของงบควบคุมซึ่งเราจะศึกษาโดยละเอียด

คำสั่งวนซ้ำช่วยให้เราดำเนินการคำสั่งหรือกลุ่มของคำสั่งได้หลายครั้ง ภาพประกอบต่อไปนี้เป็นรูปแบบทั่วไปของคำสั่งวนซ้ำในภาษาโปรแกรมส่วนใหญ่

ให้เราพูดคุยเกี่ยวกับลูปต่างๆที่ Rexx สนับสนุน

ซีเนียร์ ประเภทห่วงและคำอธิบาย
1 ทำวน

do loopใช้เพื่อเรียกใช้งานคำสั่งจำนวนหนึ่งในหลาย ๆ ครั้ง จำนวนครั้งที่ต้องดำเนินการคำสั่งจะพิจารณาจากค่าที่ส่งไปยังลูป do

2 ทำในขณะที่วนซ้ำ

คำสั่ง do-while ใช้เพื่อจำลองลูป while แบบง่ายซึ่งมีอยู่ในภาษาโปรแกรมอื่น ๆ

3 ทำจนวน

ลูป do-until เป็นการเปลี่ยนแปลงเล็กน้อยของ do while loop การวนซ้ำนี้แตกต่างกันไปตามข้อเท็จจริงที่ออกเมื่อเงื่อนไขที่ประเมินเป็นเท็จ

การควบคุมซ้ำ

do loops สามารถรองรับเพื่อดำเนินการควบคุมคำสั่งซ้ำ ๆ

ไวยากรณ์

ไวยากรณ์ทั่วไปของคำสั่งประเภทนี้มีดังนี้

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

ความแตกต่างในคำสั่งนี้คือมีดัชนีที่ใช้ควบคุมจำนวนครั้งที่ดำเนินการลูป ประการที่สองมีพารามิเตอร์ที่ระบุค่าที่ดัชนีควรเริ่มต้นด้วยจุดที่ควรสิ้นสุดและค่าส่วนเพิ่มคืออะไร

แผนภาพการไหล

ลองดูแผนภาพการไหลของลูปนี้ -

จากแผนภาพด้านบนคุณจะเห็นได้อย่างชัดเจนว่าการวนซ้ำถูกดำเนินการตามค่าดัชนีและวิธีการเพิ่มค่าดัชนี

โปรแกรมต่อไปนี้เป็นตัวอย่างของคำสั่งควบคุมการทำซ้ำ

ตัวอย่าง

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

ในโปรแกรมข้างต้นค่าของ count iถูกตั้งค่าเป็น 0 ก่อน จากนั้นจะเพิ่มขึ้นเป็นจำนวน 2 จนกว่าค่าจะไม่เกิน 5

ผลลัพธ์ของโค้ดด้านบนจะเป็น -

hello 
hello 
hello

โครงสร้างการตัดสินใจกำหนดให้โปรแกรมเมอร์ระบุเงื่อนไขอย่างน้อยหนึ่งเงื่อนไขที่จะประเมินหรือทดสอบโดยโปรแกรม

แผนภาพต่อไปนี้แสดงรูปแบบทั่วไปของโครงสร้างการตัดสินใจโดยทั่วไปที่พบในภาษาโปรแกรมส่วนใหญ่

มีคำสั่งหรือคำสั่งที่จะดำเนินการหากเงื่อนไขถูกกำหนดให้เป็น trueและเป็นทางเลือกที่จะเรียกใช้คำสั่งอื่น ๆ หากเงื่อนไขถูกกำหนดให้เป็น false.

ลองดูงบตัดสินใจต่างๆที่มีอยู่ใน Rexx

ซีเนียร์ คำชี้แจงและคำอธิบาย
1 ถ้าคำสั่ง

คำแถลงการตัดสินใจแรกคือ ifคำให้การ. อันif คำสั่งประกอบด้วยนิพจน์บูลีนตามด้วยหนึ่งคำสั่งหรือมากกว่า

2 คำสั่ง if-else

คำสั่งในการตัดสินใจต่อไปคือคำสั่ง if-else อันif สามารถตามด้วยคำสั่งอื่นที่เป็นทางเลือกซึ่งจะดำเนินการเมื่อนิพจน์บูลีนเป็นเท็จ

ซ้อนถ้าคำสั่ง

บางครั้งมีข้อกำหนดที่จะต้องมี multiple if statementsฝังอยู่ภายในซึ่งกันและกันดังที่เป็นไปได้ในภาษาโปรแกรมอื่น ๆ ใน Rexx ยังเป็นไปได้

ไวยากรณ์

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

แผนภาพการไหล

แผนภาพการไหลของซ้อน if งบมีดังนี้ -

ลองมาดูตัวอย่างของการซ้อนกัน if คำสั่ง -

ตัวอย่าง

/* 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

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น -

i is greater than 10

เลือกคำสั่ง

Rexx เสนอคำสั่ง select ซึ่งสามารถใช้ในการดำเนินการนิพจน์ตามเอาต์พุตของคำสั่ง select

ไวยากรณ์

รูปแบบทั่วไปของคำสั่งนี้คือ -

select 
when (condition#1) then 
statement#1 

when (condition#2) then 
statement#2 
otherwise 

defaultstatement 
end

การทำงานทั่วไปของคำสั่งนี้มีดังนี้ -

  • คำสั่ง select มีช่วงของคำสั่งเพื่อประเมินเงื่อนไขที่แตกต่างกัน

  • แต่ละ when clause มีเงื่อนไขที่แตกต่างกันซึ่งจำเป็นต้องได้รับการประเมินและคำสั่งที่ตามมาจะถูกดำเนินการ

  • คำสั่งอื่นจะใช้เพื่อเรียกใช้คำสั่งเริ่มต้นใด ๆ หากก่อนหน้านี้เมื่อเงื่อนไขไม่ evaluate to true.

แผนภาพการไหล

แผนภาพการไหลของ select คำสั่งมีดังนี้

โปรแกรมต่อไปนี้เป็นตัวอย่างของคำสั่ง case ใน Rexx

ตัวอย่าง

/* 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

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็น -

i is greater than 10

Rexx มีประเภทข้อมูลต่อไปนี้สำหรับตัวเลข

  • Integer- สตริงตัวเลขที่ไม่มีจุดทศนิยมหรือตัวระบุเลขชี้กำลัง อักขระตัวแรกสามารถเป็นเครื่องหมายบวก (+) หรือลบ (-) ตัวเลขที่แสดงต้องอยู่ระหว่าง -2147483648 ถึง 2147483647

  • Big Integer- สตริงของตัวเลขที่ไม่มีจุดทศนิยมหรือตัวระบุเลขชี้กำลัง อักขระตัวแรกสามารถเป็นเครื่องหมายบวก (+) หรือลบ (-) ตัวเลขที่แสดงต้องอยู่ระหว่าง -9223372036854775808 ถึง 2147483648 รวมหรือระหว่าง 2147483648 ถึง 9223372036854775807

  • Decimal - หนึ่งในรูปแบบต่อไปนี้ -

    • สตริงตัวเลขที่มีจุดทศนิยม แต่ไม่มีตัวระบุเลขชี้กำลังโดยที่ p แสดงถึงความแม่นยำและ sแสดงถึงมาตราส่วนของเลขฐานสิบที่สตริงแสดง อักขระตัวแรกสามารถเป็นเครื่องหมายบวก (+) หรือลบ (-)

    • สตริงตัวเลขที่ไม่มีจุดทศนิยมหรือตัวระบุเลขชี้กำลัง อักขระตัวแรกสามารถเป็นเครื่องหมายบวก (+) หรือลบ (-) ตัวเลขที่แสดงน้อยกว่า -9223372036854775808 หรือมากกว่า 9223372036854775807

  • Float- สตริงที่แสดงถึงตัวเลขในสัญกรณ์ทางวิทยาศาสตร์ สตริงประกอบด้วยชุดของตัวเลขตามด้วยตัวระบุเลขชี้กำลัง (E หรือ e ตามด้วยเครื่องหมายบวก (+) หรือลบ (-) และชุดตัวเลข) สตริงสามารถเริ่มต้นด้วยเครื่องหมายบวก (+) หรือลบ (-)

ตอนนี้เรามาดูความแตกต่างกัน methods available for numbers.

ซีเนียร์ วิธีการสำหรับ Numbers
1 ABS

วิธีนี้ส่งคืนค่าสัมบูรณ์ของหมายเลขอินพุต

2 MAX

วิธีนี้ส่งคืนค่าสูงสุดจากรายการตัวเลข

3 นาที

วิธีนี้จะคืนค่าต่ำสุดจากรายการตัวเลข

4 สุ่ม

วิธีนี้ส่งคืนตัวเลขที่สร้างขึ้นแบบสุ่ม

5 ลงชื่อ

ส่งคืน 1 ถ้าตัวเลขมากกว่า 0 หรือ 0 ถ้าตัวเลขเป็น 0 หรือ -1 ถ้าตัวเลขน้อยกว่า 0

6 TRUNC

วิธีนี้จะตัดทอนตัวเลข

สตริงใน Rexx แสดงด้วยลำดับของอักขระ โปรแกรมต่อไปนี้เป็นตัวอย่างของสตริง -

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

ผลลัพธ์ของโปรแกรมข้างต้นมีดังนี้ -

This is a string

มาดูวิธีการบางอย่างที่มีอยู่ใน Rexx สำหรับสตริง

ซีเนียร์ วิธีการที่มีอยู่ใน Rexx for Strings
1 ซ้าย

วิธีนี้ส่งคืนอักขระจำนวนหนึ่งจากด้านซ้ายของสตริง

2 ขวา

วิธีนี้จะส่งคืนอักขระจำนวนหนึ่งจากทางขวาของสตริง

3 ความยาว

วิธีนี้จะส่งคืนจำนวนอักขระในสตริง

4 ย้อนกลับ

วิธีนี้ส่งคืนอักขระในรูปแบบย้อนกลับ

5 เปรียบเทียบ

วิธีนี้จะเปรียบเทียบ 2 สตริง ส่งคืน "0" ถ้า "string1" และ "string2" เหมือนกัน มิฉะนั้นจะส่งคืนตำแหน่งของอักขระตัวแรกที่ไม่ตรงกัน

6 สำเนา

วิธีนี้คัดลอกไฟล์ string n จำนวนครั้ง.

7 สถานีย่อย

วิธีนี้ได้รับสตริงย่อยจากสตริงเฉพาะ

8 ตำแหน่ง

วิธีนี้จะคืนตำแหน่งของสตริงหนึ่งภายในอีกสตริง

9 delstr

วิธีนี้จะลบสตริงย่อยจากภายในสตริง

โดยปกติโค้ดใน Rexx จะแบ่งออกเป็นฟังก์ชันและรูทีนย่อย การใช้ฟังก์ชันช่วยในการแยกโค้ดออกเป็นหน่วยตรรกะอื่น ๆ อีกมากมาย ลองดูรายละเอียดฟังก์ชั่นเหล่านี้

การกำหนดฟังก์ชัน

ไวยากรณ์ของการประกาศฟังก์ชันมีดังนี้ -

FunctionName: 
PARSE ARG arguement1, arguement2… arguementN 
Return value

ที่ไหน

  • FunctionName - นี่คือชื่อที่กำหนดให้กับฟังก์ชัน

  • PARSE ARG - นี่คือคีย์เวิร์ดใน Rexx ซึ่งใช้เพื่อระบุว่าพารามิเตอร์ถูกส่งไปยังฟังก์ชัน

  • arguement1, arguement2… arguementN - นี่คืออาร์กิวเมนต์ที่ส่งผ่านไปยังฟังก์ชัน

  • Return value - นี่คือค่าที่ส่งคืนโดยฟังก์ชัน

โปรแกรมต่อไปนี้เป็นตัวอย่างง่ายๆของการใช้ฟังก์ชันใน Rexx

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

ควรสังเกตสิ่งต่อไปนี้เกี่ยวกับโปรแกรมข้างต้น -

  • เรากำลังกำหนดฟังก์ชันที่เรียกว่า add ซึ่งยอมรับ 2 พารามิเตอร์ a และ b

  • ฟังก์ชันใช้คำสั่ง return เพื่อส่งกลับผลรวมของ a และ b

  • ต้องใช้คำสั่ง exit เพื่อแสดงถึงการสิ้นสุดของโปรแกรมหลัก

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังนี้ -

11

การทำงานกับอาร์กิวเมนต์

ใน Rexx มีฟังก์ชันเฉพาะที่สามารถใช้กับอาร์กิวเมนต์ได้ ลองดูข้อโต้แย้งสองสามข้อดังกล่าว

อาร์กิวเมนต์

วิธีนี้ใช้เพื่อส่งกลับจำนวนอาร์กิวเมนต์ที่กำหนดไว้สำหรับฟังก์ชัน

Syntax -

arg()

Parameters - ไม่มี

Return Value - วิธีนี้จะส่งคืนจำนวนอาร์กิวเมนต์ที่กำหนดไว้สำหรับฟังก์ชัน

Example -

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

say arg() 
return a + b

Output - เมื่อเรารันโปรแกรมข้างต้นเราจะได้ผลลัพธ์ดังต่อไปนี้

2 
11

arg (ดัชนี)

วิธีนี้ใช้เพื่อส่งกลับค่าของอาร์กิวเมนต์ที่ตำแหน่งเฉพาะ

Syntax -

arg(index)

Parameter -

  • Index - ตำแหน่งดัชนีของอาร์กิวเมนต์ที่จะส่งคืน

Return Value - วิธีนี้จะคืนค่าของอาร์กิวเมนต์ที่ตำแหน่งเฉพาะ

Example -

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

say arg(1) 
return a + b

Output - เมื่อเรารันโปรแกรมข้างต้นเราจะได้ผลลัพธ์ดังต่อไปนี้

5 
11

ฟังก์ชันแบบเรียกซ้ำ

ฟังก์ชันวนซ้ำหรือรูทีนคือสิ่งที่เรียกตัวเอง ฟังก์ชันการเรียกซ้ำใด ๆ อาจถูกเข้ารหัสในรูปแบบที่ไม่เรียกซ้ำแบบเดิม (หรือวนซ้ำ) แต่บางครั้งการเรียกซ้ำจะช่วยแก้ปัญหาได้ดีกว่า ภาษาโปรแกรมบางภาษาไม่รองรับการเรียกซ้ำ Rexx ทำ

มาดูตัวอย่างโปรแกรมแฟกทอเรียลที่มีชื่อเสียงซึ่งใช้ฟังก์ชันเรียกซ้ำใน 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 )

ผลลัพธ์ของโปรแกรมข้างต้นมีดังนี้ -

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

บางครั้งสแต็กเรียกว่าคิวข้อมูลภายนอก แต่เราติดตามการใช้งานทั่วไปและอ้างถึงเป็นสแตก เป็นบล็อกของหน่วยความจำที่มีเหตุผลภายนอกของ Rexx คำแนะนำเช่นพุชและคิววางข้อมูลลงในสแต็กและคำแนะนำเช่นดึงและแยกวิเคราะห์ดึงดึงข้อมูลจากมัน ฟังก์ชันในตัวที่อยู่ในคิวจะรายงานจำนวนรายการที่อยู่ในสแต็ก

ลองมาดูตัวอย่างของกอง

/* 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

ลูปแรกในโปรแกรมจะวางข้อมูลสามบรรทัดลงในสแต็ก มันใช้คำสั่งผลักดันเพื่อทำสิ่งนี้ เรากำหนดหมายเลขบรรทัดเพื่อให้เมื่อดึงข้อมูลในลำดับ LIFO ลำดับของพวกเขาให้ชัดเจน

รายการที่วางไว้ในสแต็กโดยคำสั่งผลักจะถูกดึงมาตามลำดับ LIFO -

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

เนื่องจากไอเท็มทั้งสามชิ้นถูกวางลงบนสแต็กผ่านการพุชจึงถูกดึงข้อมูลตามลำดับ LIFO

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังนี้

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

Rexx มีวิธีการมากมายเมื่อทำงานกับ I / O Rexx จัดเตรียมคลาสที่ง่ายกว่าเพื่อจัดเตรียมฟังก์ชันต่อไปนี้สำหรับไฟล์

  • การอ่านไฟล์
  • การเขียนไฟล์
  • ดูว่าไฟล์เป็นไฟล์หรือไดเร็กทอรี

ฟังก์ชั่นที่มีอยู่ใน Rexx สำหรับ File I / O นั้นขึ้นอยู่กับทั้งอินพุตบรรทัดและอินพุตอักขระและเราจะดูฟังก์ชั่นที่มีให้สำหรับทั้งสองอย่างโดยละเอียด

มาสำรวจการทำงานของไฟล์ที่ Rexx มีให้ สำหรับวัตถุประสงค์ของตัวอย่างเหล่านี้เราจะสมมติว่ามีไฟล์ที่เรียกว่าNewFile.txt ซึ่งประกอบด้วยบรรทัดข้อความต่อไปนี้ -

Example1

Example2

Example3

ไฟล์นี้จะใช้สำหรับการดำเนินการอ่านและเขียนในตัวอย่างต่อไปนี้ ในที่นี้เราจะพูดถึงวิธีการอ่านเนื้อหาในไฟล์ด้วยวิธีต่างๆ

การอ่านเนื้อหาของไฟล์ทีละบรรทัด

การดำเนินการทั่วไปกับไฟล์จะดำเนินการโดยใช้วิธีการที่มีอยู่ในไลบรารี Rexx เอง การอ่านไฟล์เป็นวิธีการที่ง่ายที่สุดใน Rexx

ลองดูฟังก์ชั่นที่ใช้ในการทำสิ่งนี้

เข้าแถว

วิธีนี้ส่งคืนบรรทัดจากไฟล์ข้อความ ไฟล์ข้อความคือชื่อไฟล์ที่จัดเตรียมไว้เป็นพารามิเตอร์อินพุตของฟังก์ชัน

Syntax -

linein(filename)

Parameter -

  • filename - นี่คือชื่อของไฟล์ที่ต้องอ่านบรรทัด

Return Value - วิธีนี้ส่งกลับไฟล์ทีละบรรทัด

Example -

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

รหัสข้างต้นค่อนข้างง่ายในความจริงที่ว่า Example.txtชื่อไฟล์ถูกระบุให้กับฟังก์ชัน linein จากนั้นฟังก์ชันนี้จะอ่านบรรทัดของข้อความและให้ผลลัพธ์แก่ตัวแปรline_str.

Output - เมื่อเรารันโปรแกรมข้างต้นเราจะได้ผลลัพธ์ดังต่อไปนี้

Example1

การอ่านเนื้อหาของไฟล์ในครั้งเดียว

ใน Rexx การอ่านเนื้อหาทั้งหมดของไฟล์สามารถทำได้ด้วยความช่วยเหลือของคำสั่ง while คำสั่ง while จะอ่านแต่ละบรรทัดทีละบรรทัดจนกว่าจะถึงจุดสิ้นสุดของไฟล์

ตัวอย่างวิธีการนี้สามารถทำได้แสดงอยู่ด้านล่าง

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

ในโปรแกรมข้างต้นต้องสังเกตสิ่งต่อไปนี้ -

  • ฟังก์ชันเส้นจะอ่านไฟล์ Example.txt ไฟล์.

  • ฟังก์ชัน while ใช้เพื่อตรวจสอบว่ามีบรรทัดเพิ่มเติมในไฟล์ Example.txt หรือไม่

  • สำหรับแต่ละบรรทัดที่อ่านจากไฟล์ไฟล์ line_strตัวแปรเก็บค่าของบรรทัดปัจจุบัน จากนั้นจะถูกส่งไปยังคอนโซลเป็นเอาต์พุต

Output - เมื่อเรารันโปรแกรมข้างต้นเราจะได้ผลลัพธ์ดังต่อไปนี้

Example1 
Example2 
Example3

การเขียนเนื้อหาลงในไฟล์

เช่นเดียวกับการอ่านไฟล์ Rexx ยังมีความสามารถในการเขียนลงไฟล์ ลองดูฟังก์ชั่นที่ใช้ในการทำสิ่งนี้

ผู้เล่นตัวจริง

วิธีนี้เขียนบรรทัดลงในไฟล์ ไฟล์ที่ต้องเขียนบรรทัดนั้นถูกจัดเตรียมไว้เป็นพารามิเตอร์ของคำสั่ง lineout

Syntax -

lineout(filename)

Parameter -

  • filename - นี่คือชื่อของไฟล์ที่ต้องเขียนบรรทัดถึง

Return Value- วิธีนี้จะคืนสถานะของฟังก์ชัน lineout ค่าที่ส่งคืนคือ 0 หากเขียนบรรทัดสำเร็จมิฉะนั้นจะส่งคืนค่า 1

Example -

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

Output - เมื่อใดก็ตามที่รันโค้ดด้านบนบรรทัด“ Example4” จะถูกเขียนลงในไฟล์ Example.txt.

ในบทนี้เราจะพูดถึงฟังก์ชันอื่น ๆ ที่พร้อมใช้งานสำหรับไฟล์

ซีเนียร์ ฟังก์ชั่นสำหรับไฟล์
1 เส้น

ฟังก์ชันนี้จะส่งคืนค่า 1 หรือจำนวนบรรทัดที่เหลือเพื่ออ่านในอินพุตสตรีม ชื่อไฟล์ถูกกำหนดให้เป็นอินพุตของฟังก์ชัน

2 กระแส

ฟังก์ชันนี้ใช้เพื่อตรวจสอบสถานะของไฟล์ บางครั้งจำเป็นต้องตรวจสอบสถานะของไฟล์ก่อนที่จะใช้ หากไฟล์เสียหายหรือไม่พร้อมใช้งานคุณจะไม่สามารถดำเนินการใด ๆ กับไฟล์ได้อีก ดังนั้นจึงควรตรวจสอบสถานะของไฟล์ก่อน

3 ชรินทร์

ฟังก์ชันนี้ใช้เพื่ออ่านทีละอักขระจากไฟล์ บางครั้งโปรแกรมจำเป็นต้องอ่านอักขระของไฟล์อย่างชาญฉลาดดังนั้นจึงสามารถใช้ฟังก์ชันนี้เพื่อจุดประสงค์นี้ได้

4 ตัวอักษร

ฟังก์ชันนี้จะส่งคืน 1 หรือจำนวนอักขระที่เหลือให้อ่านในไฟล์ ชื่อไฟล์ถูกกล่าวถึงเป็นพารามิเตอร์ของฟังก์ชัน

5 Charout

ฟังก์ชันนี้ใช้เพื่อเขียนทีละอักขระไปยังไฟล์ ชื่อไฟล์ถูกป้อนเป็นพารามิเตอร์ของฟังก์ชัน

ในภาษาโปรแกรมใด ๆ โปรแกรมทั้งหมดจะแบ่งออกเป็นโมดูลลอจิคัล ทำให้ง่ายต่อการเขียนโค้ดที่ดูแลรักษาได้ง่าย นี่เป็นข้อกำหนดพื้นฐานสำหรับภาษาโปรแกรมใด ๆ

ใน Rexx โมดูลสามารถเขียนได้โดยใช้รูทีนย่อยและฟังก์ชัน มาดูรูทีนย่อยโดยละเอียด

การกำหนด Subroutine

ไวยากรณ์ของการประกาศฟังก์ชันมีดังนี้ -

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

ที่ไหน

  • FunctionName - นี่คือชื่อที่กำหนดให้กับรูทีนย่อย

  • Statement#1 .. Statement#N - นี่คือรายการของคำสั่งที่ประกอบเป็นรูทีนย่อย

โปรแกรมต่อไปนี้เป็นตัวอย่างง่ายๆที่แสดงการใช้รูทีนย่อย

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

ควรสังเกตสิ่งต่อไปนี้เกี่ยวกับโปรแกรมข้างต้น -

  • เรากำลังกำหนดรูทีนย่อยที่เรียกว่า add.

  • รูทีนย่อยทำหน้าที่เพิ่มอย่างง่าย

  • ต้องใช้คำสั่ง exit เพื่อแสดงถึงการสิ้นสุดของโปรแกรมหลัก

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังนี้ -

15

การทำงานกับอาร์กิวเมนต์

นอกจากนี้ยังสามารถทำงานกับอาร์กิวเมนต์ใน Rexx ตัวอย่างต่อไปนี้แสดงให้เห็นว่าสามารถทำได้อย่างไร

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

ควรสังเกตสิ่งต่อไปนี้เกี่ยวกับโปรแกรมข้างต้น -

  • เรากำลังกำหนดรูทีนย่อยที่เรียกว่า add ซึ่งรับ 2 พารามิเตอร์

  • ในรูทีนย่อยพารามิเตอร์ 2 ตัวจะถูกแยกวิเคราะห์โดยใช้คีย์เวิร์ด PARSE และ ARG

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังนี้ -

3

วิธีการต่างๆสำหรับการโต้แย้ง

มาดูวิธีการอื่น ๆ สำหรับการโต้แย้งกัน

อาร์กิวเมนต์

วิธีนี้ใช้เพื่อส่งคืนจำนวนอาร์กิวเมนต์ที่กำหนดไว้สำหรับรูทีนย่อย

Syntax -

arg()

Parameters - ไม่มี

Return Value - วิธีนี้ส่งคืนจำนวนอาร์กิวเมนต์ที่กำหนดไว้สำหรับรูทีนย่อย

Example -

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

say arg() 
c = a + b 
say c

เมื่อเรารันโปรแกรมข้างต้นเราจะได้ผลลัพธ์ดังต่อไปนี้

2 
3

arg (ดัชนี)

วิธีนี้ใช้เพื่อส่งกลับค่าของอาร์กิวเมนต์ที่ตำแหน่งเฉพาะ

Syntax -

arg(index)

Parameters

  • Index - ตำแหน่งดัชนีของอาร์กิวเมนต์ที่จะส่งคืน

Return Value - วิธีนี้จะคืนค่าของอาร์กิวเมนต์ที่ตำแหน่งเฉพาะ

Example -

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

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

เมื่อเรารันโปรแกรมข้างต้นเราจะได้ผลลัพธ์ดังต่อไปนี้

1 
3

ทุกภาษาการเขียนโปรแกรมมีฟังก์ชันในตัวที่ช่วยให้โปรแกรมเมอร์ทำงานประจำบางอย่างได้ Rexx ยังมีฟังก์ชั่นในตัวมากมาย

ลองดูฟังก์ชั่นทั้งหมดที่มีอยู่ใน Rexx

ซีเนียร์ ฟังก์ชั่นที่มีอยู่ใน Rexx
1 ที่อยู่

วิธีนี้จะส่งคืนชื่อของสภาพแวดล้อมที่คำสั่ง Rexx กำลังทำงานอยู่

2 เสียงบี๊บ

วิธีนี้ทำให้เกิดเสียงในระบบที่ความถี่และระยะเวลาเฉพาะ

3 ประเภทข้อมูล

วิธีนี้จะคืนค่าเป็น "NUM" หากอินพุตเป็นตัวเลขที่ถูกต้องมิฉะนั้นจะคืนค่าเป็น "CHAR" คุณยังสามารถระบุได้ว่าคุณต้องการเปรียบเทียบค่าอินพุตกับค่า NUM หรือ CHAR ในแต่ละกรณีค่าที่ส่งกลับจะเป็น 1 หรือ 0 ขึ้นอยู่กับผลลัพธ์

4 วันที่

วิธีนี้จะส่งคืนวันที่ในเครื่องในรูปแบบต่อไปนี้

5 หลัก

วิธีนี้ส่งคืนการตั้งค่าปัจจุบันของ NUMERIC DIGITS ตามที่กำหนดไว้ในระบบปัจจุบัน

6 ERRORTEXT

วิธีนี้ส่งคืนข้อความแสดงข้อผิดพลาด Rexx ที่เกี่ยวข้องกับหมายเลขข้อผิดพลาด 'errorno' โปรดทราบว่าหมายเลขข้อผิดพลาดต้องมีค่าตั้งแต่ 0 ถึง 99 สิ่งนี้มีประโยชน์ในกรณีที่โปรแกรมของคุณส่งคืนรหัสข้อผิดพลาดและคุณต้องการทราบว่ารหัสข้อผิดพลาดหมายถึงอะไร

7 แบบฟอร์ม

วิธีนี้จะคืนค่าการตั้งค่าปัจจุบันของ 'NUMERIC FORM' ซึ่งใช้ในการคำนวณทางคณิตศาสตร์ในระบบ

8 เวลา

วิธีนี้จะส่งคืนเวลาท้องถิ่นในรูปแบบนาฬิกา 24 ชั่วโมงดังที่แสดงในโปรแกรมต่อไปนี้

9 USERID

วิธีนี้จะส่งคืน ID ผู้ใช้ปัจจุบันที่ล็อกอินเข้าสู่ระบบ

10 XRANGE

วิธีนี้จะส่งคืนอักขระในช่วงที่ระบุโดยอักขระเริ่มต้นและสิ้นสุด

11 X2D

วิธีนี้จะคืนค่าการแปลงทศนิยมของไฟล์ hexstring value.

12 X2C

วิธีนี้ส่งกลับการแปลงอักขระของค่า hexstring

ข้อดีที่สุดอย่างหนึ่งของ Rexx คือความสามารถในการสร้างสคริปต์ที่ใช้ซ้ำได้ บ่อยครั้งในองค์กรในปัจจุบันการมีสคริปต์ที่ใช้ซ้ำได้ถือเป็นการเพิ่มมูลค่ามหาศาลในการประหยัดเวลาในการทำงานซ้ำ ๆ

ตัวอย่างเช่นทีมเทคโนโลยีในองค์กรไอทีอาจจำเป็นต้องมีสคริปต์ที่ใช้ทำงานทั่วไปในชีวิตประจำวัน งานเหล่านี้อาจรวมถึงการโต้ตอบกับระบบปฏิบัติการ จากนั้นสคริปต์เหล่านี้สามารถตั้งโปรแกรมเพื่อจัดการกับรหัสส่งคืนที่ไม่ถูกต้องหรือข้อผิดพลาด

Rexx มีคำสั่งระบบจำนวนมากที่สามารถใช้เพื่อทำงานซ้ำ ๆ เช่นนี้ได้ มาดูคำสั่งระบบบางคำสั่งที่มีอยู่ใน Rexx

ผบ

นี่คือคำสั่งแสดงรายการไดเร็กทอรีปกติที่ใช้ใน Windows

ไวยากรณ์

dir

พารามิเตอร์

ไม่มี

ส่งคืนค่า

วิธีนี้ส่งคืนรายการไดเร็กทอรีปัจจุบันบนระบบ

ตัวอย่าง

/* Main program */ 
dir

เอาต์พุตขึ้นอยู่กับไดเร็กทอรีในระบบ

โปรแกรมต่อไปนี้เป็นเพียงตัวอย่าง

เอาต์พุต

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

อีกตัวอย่างหนึ่งของไฟล์ dir commandจะแสดงในโปรแกรมต่อไปนี้ เฉพาะเวลานี้เราใช้ประโยชน์จากไฟล์special rc variable. ตัวแปรนี้มีความพิเศษใน Rexx และให้สถานะของการดำเนินการคำสั่งของระบบ หากค่าที่ส่งคืนเป็น 0 แสดงว่าคำสั่งดำเนินการสำเร็จ นอกจากนี้หมายเลขข้อผิดพลาดจะได้รับในชื่อตัวแปร rc

ตัวอย่าง

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

เมื่อเรารันโปรแกรมข้างต้นเราจะได้ผลลัพธ์ดังต่อไปนี้

เอาต์พุต

The command failed, The error code is = 127

คำสั่งการเปลี่ยนเส้นทาง

Rexx ยังมีสิ่งอำนวยความสะดวกในการใช้คำสั่งการเปลี่ยนเส้นทาง คำสั่งการเปลี่ยนเส้นทางต่อไปนี้มีอยู่ใน Rexx

  • < - คำสั่งนี้ใช้เพื่อรับอินพุตที่มาจากไฟล์

  • >- คำสั่งนี้ใช้เพื่อส่งออกเนื้อหาไปยังไฟล์ หากมีไฟล์อยู่ไฟล์นั้นจะถูกเขียนทับ

  • >>- ยังใช้เพื่อส่งออกเนื้อหาไปยังไฟล์ แต่เอาต์พุตจะถูกเพิ่มที่ส่วนท้ายของไฟล์เพื่อรักษาเนื้อหาที่มีอยู่ของไฟล์

ลองดูตัวอย่างการใช้คำสั่งเปลี่ยนเส้นทาง ในตัวอย่างต่อไปนี้เรากำลังใช้คำสั่ง sort เพื่อจัดเรียงไฟล์ที่เรียกว่าsortin.txt. ข้อมูลจากไฟล์จะถูกส่งไปยังคำสั่ง sort จากนั้นเอาต์พุตของคำสั่ง sort จะถูกส่งไปยังไฟล์ sortout.txt

ตัวอย่าง

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

สมมติว่าไฟล์ sortin.txt มีข้อมูลต่อไปนี้

เอาต์พุต

b 
c 
a

ไฟล์ sortout.txt จากนั้นจะมีข้อมูลต่อไปนี้

a 
b 
c

ฟังก์ชัน ADDRESS

วิธีนี้ใช้เพื่อค้นหาว่าสภาพแวดล้อมเริ่มต้นที่ใช้สำหรับสตรีมอินพุตข้อผิดพลาดและเอาต์พุตคืออะไร

ไวยากรณ์

ADDRESS(options)

พารามิเตอร์

  • ตัวเลือกสำหรับที่อยู่ของระบบใดระบบหนึ่ง

ส่งคืนค่า

วิธีนี้ส่งคืนชื่อของสภาพแวดล้อมสำหรับสตรีมอินพุตข้อผิดพลาดและเอาต์พุต

ตัวอย่าง

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

เมื่อเรารันโปรแกรมข้างต้นเราจะได้ผลลัพธ์ดังต่อไปนี้

เอาต์พุต

INPUT NORMAL 
REPLACE NORMAL 
REPLACE NORMAL

XML เป็นภาษาโอเพ่นซอร์สแบบพกพาที่ช่วยให้โปรแกรมเมอร์สามารถพัฒนาแอปพลิเคชันที่แอปพลิเคชันอื่นสามารถอ่านได้โดยไม่คำนึงถึงระบบปฏิบัติการและ / หรือภาษาพัฒนาการ นี่เป็นหนึ่งในภาษาทั่วไปที่ใช้ในการแลกเปลี่ยนข้อมูลระหว่างแอปพลิเคชัน

XML คืออะไร?

Extensible Markup Language XML เป็นภาษามาร์กอัปเหมือนกับ HTML หรือ SGML สิ่งนี้แนะนำโดย World Wide Web Consortium และพร้อมใช้งานในรูปแบบมาตรฐานเปิด XML มีประโยชน์อย่างยิ่งสำหรับการติดตามข้อมูลจำนวนน้อยถึงปานกลางโดยไม่ต้องใช้แบ็คโบนที่ใช้ SQL

สำหรับตัวอย่างโค้ด XML ทั้งหมดของเราลองใช้ไฟล์ XML ง่ายๆต่อไปนี้ movies.xml สำหรับการสร้างไฟล์ XML และอ่านไฟล์ในภายหลัง

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

เริ่มต้นใช้งาน

โดยค่าเริ่มต้นฟังก์ชัน xml จะไม่รวมอยู่ในตัวแปล Rexx ในการทำงานกับ XML ใน Rexx จำเป็นต้องปฏิบัติตามขั้นตอนต่อไปนี้

  • ดาวน์โหลดไฟล์ต่อไปนี้ -

    • 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/

  • แตกไฟล์ทั้งหมดและตรวจสอบให้แน่ใจว่ารวมอยู่ในเส้นทางระบบ

กำลังโหลดฟังก์ชัน XML

เมื่อดาวน์โหลดไฟล์ทั้งหมดในส่วนข้างต้นและลงทะเบียนเรียบร้อยแล้วขั้นตอนต่อไปคือการเขียนโค้ดเพื่อโหลดฟังก์ชัน Rexx XML สิ่งนี้ทำได้ด้วยรหัสต่อไปนี้

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

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

สามารถสังเกตสิ่งต่อไปนี้เกี่ยวกับโปรแกรมข้างต้น -

  • ฟังก์ชั่น rxfuncaddใช้เพื่อโหลดไลบรารีภายนอก xmlloadfuncs ฟังก์ชันใช้เพื่อโหลดไลบรารีทั้งหมดในไฟล์ rexxxml ไฟล์ลงในหน่วยความจำ

  • ถ้าค่า rcc <> 0 ก็จะทำให้เกิดข้อผิดพลาด สำหรับสิ่งนี้เราสามารถเรียกไฟล์rxfuncerrmsg เพื่อให้รายละเอียดเพิ่มเติมเกี่ยวกับข้อความแสดงข้อผิดพลาด

  • ในที่สุดเราก็โทรไปที่ xmlloadfuncsเพื่อให้สามารถเปิดใช้งานฟังก์ชันที่เกี่ยวข้องกับ xml ในโปรแกรม Rexx ได้แล้ว

ลองดูที่ต่างๆ methods available for XML in Rexx.

xmlVersion

วิธีนี้จะส่งคืนเวอร์ชันของไลบรารี XML และ XSLT ที่ใช้บนระบบ

ไวยากรณ์

xmlVersion()

พารามิเตอร์

ไม่มี

ส่งคืนค่า

วิธีนี้จะส่งคืนเวอร์ชันของไลบรารี XML และ XSLT ที่ใช้บนระบบ

ตัวอย่าง

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

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

เมื่อเรารันโปรแกรมด้านบนเราจะได้ผลลัพธ์ดังต่อไปนี้ ขึ้นอยู่กับเวอร์ชันของไลบรารี XML ที่ใช้บนระบบอีกครั้ง

เอาต์พุต

1.0.0 20631 10126

xmlParseXML

ฟังก์ชันนี้ใช้เพื่อแยกวิเคราะห์ข้อมูล XML ที่ส่งไปยังฟังก์ชัน โครงสร้างเอกสารถูกส่งกลับโดยฟังก์ชัน

ไวยากรณ์

xmlParseXML(filename)

พารามิเตอร์

  • Filename - นี่คือชื่อของไฟล์ XML ที่ต้องแยกวิเคราะห์

ส่งคืนค่า

โครงสร้างเอกสารถูกส่งกลับโดยฟังก์ชัน อื่นจะคืนค่า 0 หากมีข้อผิดพลาด

ตัวอย่าง

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

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

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

เอาต์พุต

ไม่มีเอาต์พุตทั่วไป

xmlFindNode

วิธีนี้จะประเมินไฟล์ XPath expressionผ่านไป ใช้สำหรับการแยกวิเคราะห์โครงสร้างเอกสารเพื่อให้ได้ผลลัพธ์เป็นไฟล์nodeset ซึ่งสามารถประมวลผลเพิ่มเติมได้

ไวยากรณ์

xmlParseXML(XPath,document)

พารามิเตอร์

  • XPath - นี่คือเส้นทางของโหนดในไฟล์ xml

  • document - นี่คือเอกสาร XML

ส่งคืนค่า

ประเมินนิพจน์ XPath และส่งคืนผลลัพธ์เป็นชุดโหนดซึ่งสามารถใช้ได้ในภายหลัง

ตัวอย่าง

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)

เมื่อเรารันโปรแกรมด้านบนเราจะได้ผลลัพธ์ดังต่อไปนี้

เอาต์พุต

4

ผลลัพธ์จะแสดงจำนวนโหนดภาพยนตร์ในรายการ xml ของเรา

xmlEvalExpression

วิธีการด้านล่างนี้ใช้เพื่อประเมินนิพจน์ XPath และส่งคืนสตริงเป็นผลลัพธ์

ไวยากรณ์

xmlParseXML(XPath,Node)

พารามิเตอร์

  • XPath - นี่คือเส้นทางของโหนดในไฟล์ xml

  • document - องค์ประกอบโหนดเฉพาะ

ส่งคืนค่า

สตริงจะถูกส่งคืนตามนิพจน์ XPath ที่ส่งไป

ตัวอย่าง

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

เมื่อเรารันโปรแกรมด้านบนเราจะได้ผลลัพธ์ดังต่อไปนี้

เอาต์พุต

War, Thriller 
Anime, Science Fiction 
Anime, Action 
Comedy

Regina เป็นล่าม Rexx อีกตัวที่สามารถคอมไพล์และรันโปรแกรม Rexx ได้ เว็บไซต์อย่างเป็นทางการของ Regina คือ - www.regina-rexx.sourceforge.net/

ข้อดีบางประการของการใช้ Regina มีดังนี้ -

  • Regina สามารถทำงานบนแพลตฟอร์มใดก็ได้ไม่ว่าจะเป็น Windows, Linux หรือ Mac OS

  • Regina ทำงานตามมาตรฐานที่มีอยู่ทั้งหมด

  • Regina มีชุมชนใหญ่ติดตามดังนั้นจึงมีฟอรัมและสื่อการเรียนรู้มากมายสำหรับ Regina

  • Regina มีเครื่องมือมากมายสำหรับเขียนและทดสอบโปรแกรม Rexx

  • ใน Regina คุณสามารถเรียกใช้คำสั่งที่ไม่สามารถทำได้ใน Rexx Interpreter เริ่มต้น ตัวอย่างเช่นหากคุณรวมการตั้งค่าคอนฟิกบางอย่างคุณสามารถรันคำสั่งระดับระบบพื้นฐานได้จริงซึ่งไม่สามารถทำได้ใน Rexx

เมื่อคุณติดตั้ง Rexx ผ่านการติดตั้งที่ระบุไว้ใน Chapter 2 – Rexx Environmentล่าม Regina ได้รับการติดตั้งพร้อมกับมัน

ตอนนี้เรามาดูวิธีการทั่วไปที่มีให้เมื่อใช้ Regina ฟังก์ชั่นเหล่านี้เป็นฟังก์ชันเพิ่มเติมซึ่งไม่สามารถใช้ได้ผ่านการใช้งานปกติ

ในการใช้ฟังก์ชันเพิ่มเติมคุณต้องใส่โค้ดบรรทัดต่อไปนี้ สิ่งนี้ทำให้สามารถใช้ฟังก์ชันเพิ่มเติมของ Regina ได้

options arexx_bifs

ประการที่สองในขณะที่รันโปรแกรม Rexx ทั้งหมดให้ใช้คำสั่งต่อไปนี้

regina main.rexx

Where,

  • regina - นี่คือล่ามที่ใช้สำหรับโปรแกรม Rexx

  • main.rexx - โปรแกรม Rexx ของคุณ

ตอนนี้เราจะพูดคุยในรายละเอียดต่างๆ functions of Regina Rexx Interpreter.

ซีเนียร์ หน้าที่ของ Regina Rexx Interpreter
1 b2c

วิธีนี้ใช้ในการแปลงค่าไบนารีเป็นค่าสตริง

2 bitcomp

วิธีนี้ใช้ในการเปรียบเทียบสตริง 2 บิตทีละบิต

3 bittst

วิธีนี้ใช้เพื่อระบุสถานะของบิตที่ระบุในสตริงบิต

4 หา

วิธีนี้ใช้เพื่อค้นหาสตริงที่เกิดขึ้นครั้งแรกในสตริงอื่น

5 getenv

วิธีนี้ส่งคืนค่าของตัวแปรสภาพแวดล้อมบนระบบ

6 getpid

วิธีนี้ใช้เพื่อรับค่าของ id กระบวนการที่รันอยู่ในปัจจุบัน

7 กัญชา

วิธีนี้ส่งคืนแอตทริบิวต์แฮชของสตริงเป็นตัวเลขทศนิยม นอกจากนี้ยังอัปเดตค่าแฮชภายในของสตริง

8 ปรับ

วิธีนี้ใช้เพื่อเพิ่มเหตุผลหรือตัดทอนค่าของสตริงตามค่าความยาว

9 putenv

วิธีนี้ใช้เพื่อกำหนดค่าของตัวแปรสภาพแวดล้อม

10 ไดเรกทอรี

วิธีนี้ได้รับค่าของไดเร็กทอรีปัจจุบันบนระบบ

11 chdir

วิธีนี้เปลี่ยนค่าของไดเร็กทอรีการทำงานปัจจุบันบนระบบ

12 แรนดู

วิธีนี้จะส่งคืนตัวเลขสุ่มหลอกระหว่าง 0 ถึง 1

คุณสมบัติที่ทรงพลังที่สุดอย่างหนึ่งของ Rexx คือความสามารถในการแยกวิเคราะห์ค่าข้อความ คุณอาจไม่เห็นสิ่งนี้ในภาษาโปรแกรมอื่น ๆ

รูปแบบทั่วไปของคำสั่งแยกวิเคราะห์มีดังนี้ -

ไวยากรณ์

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

Where,

  • UPPER - แหล่งที่มาจะถูกแปลงเป็นตัวพิมพ์ใหญ่ก่อนที่จะแยกวิเคราะห์

  • LOWER - แหล่งที่มาจะถูกแปลงเป็นตัวพิมพ์เล็กก่อนที่จะแยกวิเคราะห์

  • CASELESS - เมื่อส่งผ่านพารามิเตอร์นี้ปลอกจะถูกละเว้น

  • source- นี่คือแหล่งที่มาที่ต้องแยกวิเคราะห์ มีตัวเลือกมากมายสำหรับสิ่งนี้และอาจเป็นอย่างใดอย่างหนึ่งต่อไปนี้ -

    • ARG - อาร์กิวเมนต์สำหรับโปรแกรมหรือโพรซีเดอร์สามารถใช้เป็นแหล่งที่มาได้

    • LINEIN - สามารถใช้อินพุตบรรทัดถัดไปเป็นแหล่งสัญญาณได้

    • SOURCE - ข้อมูลแหล่งที่มาของโปรแกรมสามารถใช้เป็นแหล่งที่มาได้

    • VAR name - ค่าของชื่อตัวแปรสามารถใช้เป็นแหล่งที่มาได้

  • template- พารามิเตอร์นี้ระบุวิธีการแยกวิเคราะห์แหล่งที่มา มีตัวเลือกมากมายสำหรับสิ่งนี้ บางส่วนมีการกล่าวถึงด้านล่าง

    • variable name - นี่คือค่าที่กำหนดให้กับตัวแปร

    • literal string - สตริงตามตัวอักษรซึ่งสามารถใช้รูปแบบเพื่อแยกสาย

    • #- ตำแหน่งอักขระสัมบูรณ์ภายในแหล่งที่มา ดังนั้นถ้าคุณระบุค่าของ 5, 5 วันที่ตัวละครจะถูกนำมาใช้

    • +#- ตำแหน่งอักขระสัมพัทธ์ภายในแหล่งที่มาเอง ดังนั้นถ้าคุณระบุค่าของ 5, 5 วันที่ตัวละครจะถูกนำมาใช้ค่อนข้าง

ลองดูตัวอย่างง่ายๆว่าการแยกวิเคราะห์สามารถทำได้ใน Rexx อย่างไร

ตัวอย่าง

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

โปรแกรมข้างต้นจะแยกวิเคราะห์คำในวลี เมื่อค่าประกอบด้วยคำที่คั่นด้วยช่องว่างเพียงช่องเดียวและไม่มีช่องว่างนำหน้าหรือต่อท้ายค่าจะง่ายต่อการแยกวิเคราะห์เป็นจำนวนคำที่ทราบดังนี้

ฟังก์ชันแยกวิเคราะห์ใช้ใน Rexx เพื่อรับค่าสตริงแล้วแยกย่อยเป็นคำ ในตัวอย่างข้างต้นคำจะถูกแยกแล้วเก็บไว้ในตัวแปรคำ

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังนี้ -

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

อีกตัวอย่างหนึ่งของการแยกวิเคราะห์จะแสดงในโปรแกรมต่อไปนี้ คราวนี้เราใช้คำสั่ง while เพื่อทำการแยกวิเคราะห์

ตัวอย่าง

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

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

โปรแกรมข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้ -

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

การแยกตำแหน่ง

Rexx ยังช่วยให้สามารถทำงานกับการแยกวิเคราะห์ตำแหน่งได้ มาดูตัวอย่างวิธีการที่เราจะบรรลุการแยกวิเคราะห์ตำแหน่งด้วยคำสั่งแยกวิเคราะห์

ตัวอย่าง

/* 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

จากตัวอย่างข้างต้นคุณสามารถสังเกตได้ว่านอกจากชื่อตัวแปรแล้วเรายังระบุว่าสตริงควรสิ้นสุดที่ใด ดังนั้นสำหรับ name1 เราควรลงท้ายด้วยอักขระที่ 11 จากนั้นจึงเริ่มแยกวิเคราะห์ name2

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังนี้ -

Doe 
John M. 
03/03/78 
Mumbai 
India

คุณยังสามารถใช้ relative positional parsing ในกรณีนี้.

ตัวอย่าง

/* 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

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังที่แสดงด้านล่าง

Doe 
John M. 
03/03/78 
Mumbai 
India

ใน Rexx คำสั่งสัญญาณโดยทั่วไปจะใช้เพื่อวัตถุประสงค์สองประการคือ -

  • หนึ่งคือการถ่ายโอนการควบคุมไปยังส่วนอื่นของโปรแกรม โดยปกติจะเหมือนกับป้ายกำกับไปที่ซึ่งใช้ในภาษาโปรแกรมอื่น ๆ

  • อีกอันคือไปที่ป้ายกำกับกับดักเฉพาะ

หากคำสั่งสัญญาณถูกใช้ในคำสั่งคำสั่งใด ๆ ต่อไปนี้โครงสร้างการควบคุมที่รอดำเนินการจะถูกปิดใช้งานโดยอัตโนมัติ

  • ถ้า ... แล้ว ... อื่น ...

  • ทำ ... จบ

  • ทำ i = 1 ถึง n ... end [และทำลูปที่คล้ายกัน]

  • เลือกเมื่อ ... แล้ว ... ... ฯลฯ ไม่งั้น ... จบ

ไวยากรณ์ทั่วไปของคำสั่งสัญญาณแสดงดังนี้ -

ไวยากรณ์

signal labelName  
   
signal [ VALUE ] labelExpression

ลองดูตัวอย่างวิธีการใช้คำสั่งสัญญาณ

ตัวอย่าง

/* 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'

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังที่แสดงด้านล่าง

เอาต์พุต

This is an incorrect number.

หากคุณเปลี่ยนค่าของตัวแปร n เป็นจำนวนเต็มดังที่แสดงในโปรแกรมต่อไปนี้ -

/* 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 '

คุณจะได้รับผลลัพธ์ต่อไปนี้ -

This is a whole number

นอกจากนี้ยังสามารถถ่ายโอนไปยังค่าของฉลากตามที่แสดงในโปรแกรมต่อไปนี้ -

/* 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

ผลลัพธ์ของโปรแกรมข้างต้นจะแสดงดังนี้ -

This is the number 1

Trap Label Transfer การเปิดใช้งาน / การปิดใช้งาน

ดังที่เราได้กล่าวไว้ก่อนหน้านี้คำสั่งสัญญาณยังสามารถใช้เพื่อถ่ายโอนการควบคุมไปยังป้ายกำกับกับดัก

ไวยากรณ์ทั่วไปของการถ่ายโอนเลเบลกับดักมีให้ดังนี้ -

ไวยากรณ์

signal ON conditionName [ NAME Label ] 
  
signal OFF conditionName

ที่ไหน

  • conditionName - นี่คือเงื่อนไขที่ควรเปิดหรือปิดสัญญาณ

  • Label - ป้ายกำกับที่เป็นทางเลือกซึ่งโปรแกรมควรเปลี่ยนไป

มาดูตัวอย่างการใช้การถ่ายโอนฉลากกับดัก

ตัวอย่าง

/* 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'

ในตัวอย่างข้างต้นเราจะเปิดสัญญาณข้อผิดพลาดก่อน จากนั้นเราจะเพิ่มคำสั่งซึ่งจะทำให้เกิดข้อผิดพลาด จากนั้นเรามีป้ายกำกับข้อผิดพลาดเพื่อแสดงข้อความแสดงข้อผิดพลาดที่กำหนดเอง

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังภาพต่อไปนี้ -

An error has occurred.

การดีบักเป็นคุณสมบัติที่สำคัญในภาษาโปรแกรมใด ๆ ช่วยให้นักพัฒนาสามารถวินิจฉัยข้อผิดพลาดค้นหาสาเหตุที่แท้จริงแล้วแก้ไขตามนั้น ใน Rexx ยูทิลิตี้การติดตามถูกใช้สำหรับการดีบัก คำสั่งการติดตามสามารถใช้งานได้ 2 วิธีคือโหมดแบตช์และอีกแบบคือโหมดโต้ตอบ ลองดูวิธีใช้ทั้งสองตัวเลือก

ติดตามในโหมดแบทช์

คำสั่ง trace ใช้เพื่อให้ระดับรายละเอียดของคำสั่ง Rexx แต่ละคำสั่งที่เรียกใช้งาน

ไวยากรณ์ทั่วไปของคำสั่ง trace แสดงดังนี้ -

ไวยากรณ์

trace [setting]

โดยที่การตั้งค่าสามารถเป็นตัวเลือกใดก็ได้ดังต่อไปนี้ -

  • A - ติดตามคำสั่งทั้งหมด

  • C - ติดตามเฉพาะคำสั่งโฮสต์ที่ส่งไปยังระบบปฏิบัติการ

  • E - ติดตามเฉพาะคำสั่งโฮสต์ที่ส่งไปยังระบบปฏิบัติการซึ่งทำให้เกิดข้อผิดพลาด

  • F - ติดตามเฉพาะคำสั่งโฮสต์ที่ส่งไปยังระบบปฏิบัติการซึ่งส่งผลให้เกิดความล้มเหลว

  • I - สิ่งนี้ให้การติดตามระดับกลางของคำสั่ง Rexx

  • L - ตัวเลือกนี้คือหากคุณต้องการติดป้ายกำกับการติดตามที่เกิดขึ้น

  • N - นี่คือตัวเลือกเริ่มต้นที่ไม่มีการติดตามเกิดขึ้น

มาดูตัวอย่างของคำสั่ง trace

ตัวอย่าง

/* 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 '

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังนี้ -

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

จากผลลัพธ์คุณจะเห็นว่ามีการเพิ่มการติดตามเพิ่มเติมในผลลัพธ์ของโปรแกรม สิ่งต่อไปนี้สามารถสังเกตได้เกี่ยวกับผลลัพธ์ -

  • หมายเลขบรรทัดพร้อมกับคำสั่งที่ดำเนินการจะถูกเพิ่มลงในเอาต์พุตการติดตาม

  • แต่ละบรรทัดที่ดำเนินการจะแสดงในเอาต์พุตการติดตาม

ฟังก์ชัน Trace

นอกจากนี้ยังสามารถเปิดใช้งานการติดตามด้วยความช่วยเหลือของฟังก์ชันการติดตาม ไวยากรณ์และตัวอย่างทั่วไปแสดงอยู่ด้านล่าง

ไวยากรณ์

trace()

ฟังก์ชันข้างต้นส่งคืนระดับการติดตามปัจจุบัน

พารามิเตอร์

ไม่มี

ส่งคืนค่า

ฟังก์ชันด้านบนให้ระดับการติดตามปัจจุบัน

ตัวอย่าง

/* 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 '

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังนี้

N 
This is an incorrect number

บรรทัดแรกของ N แสดงว่าการติดตามถูกตั้งค่าเป็น Normal

การตั้งค่า Trace

ระดับการติดตามสามารถตั้งค่าได้ด้วยฟังก์ชันการติดตาม ไวยากรณ์และตัวอย่างทั่วไปแสดงอยู่ด้านล่าง

ไวยากรณ์

trace(travel_level)

พารามิเตอร์

  • trace_level - สิ่งนี้คล้ายกับตัวเลือกที่มีให้สำหรับการตั้งค่าระดับการติดตาม

ส่งคืนค่า

ฟังก์ชันด้านบนให้ระดับการติดตามปัจจุบัน

ตัวอย่าง

/* 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 '

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังนี้ -

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'

การติดตามแบบโต้ตอบ

การติดตามแบบโต้ตอบเป็นประเด็นการติดตามจะดำเนินการในขณะที่โปรแกรมทำงาน เช่นเดียวกับใน IDE เช่น Visual Studio for .Net ซึ่งคุณสามารถเพิ่มเบรกพอยต์และดูว่าแต่ละคำสั่งดำเนินการอย่างไรในทำนองเดียวกันที่นี่คุณสามารถดูโปรแกรมขณะที่โค้ดแต่ละบรรทัดทำงานได้

ไวยากรณ์ทั่วไปมีดังนี้ -

ไวยากรณ์

trace ?options

โดยที่อ็อพชันเหมือนกันสำหรับคำสั่ง trace ดังที่แสดงด้านล่าง

  • A - ติดตามคำสั่งทั้งหมด

  • C - ติดตามเฉพาะคำสั่งโฮสต์ที่ส่งไปยังระบบปฏิบัติการ

  • E - ติดตามเฉพาะคำสั่งโฮสต์ที่ส่งไปยังระบบปฏิบัติการซึ่งทำให้เกิดข้อผิดพลาด

  • F - ติดตามเฉพาะคำสั่งโฮสต์ที่ส่งไปยังระบบปฏิบัติการซึ่งส่งผลให้เกิดความล้มเหลว

  • I - สิ่งนี้ให้การติดตามระดับกลางของคำสั่ง Rexx

  • L - ตัวเลือกนี้คือหากคุณต้องการติดป้ายกำกับการติดตามที่เกิดขึ้น

  • N - นี่คือตัวเลือกเริ่มต้นที่ไม่มีการติดตามเกิดขึ้น

มาดูตัวอย่างของการใช้งานการติดตามที่ใช้งานอยู่

ตัวอย่าง

/* 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'

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังที่แสดงในโปรแกรมต่อไปนี้ การติดตามจะหยุดที่โค้ดแต่ละบรรทัด จากนั้นคุณต้องกดปุ่ม Enter เพื่อไปยังบรรทัดถัดไปของรหัส

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 มีความสามารถในการจัดการข้อผิดพลาดเช่นเดียวกับภาษาโปรแกรมอื่น ๆ

ต่อไปนี้เป็นเงื่อนไขข้อผิดพลาดต่างๆที่พบใน Rexx

  • ERROR - สิ่งนี้จะเพิ่มขึ้นเมื่อใดก็ตามที่คำสั่งที่ส่งไปยังระบบปฏิบัติการส่งผลให้เกิดข้อผิดพลาด

  • FAILURE - สิ่งนี้จะเพิ่มขึ้นเมื่อใดก็ตามที่คำสั่งที่ส่งไปยังระบบปฏิบัติการส่งผลให้เกิดความล้มเหลว

  • HALT- ปกติจะเพิ่มขึ้นเมื่อใดก็ตามที่การดำเนินการขึ้นอยู่กับการดำเนินการอื่น ตัวอย่างคือหากการดำเนินการ I / O ถูกหยุดไม่ว่าด้วยเหตุผลใดก็ตาม

  • NOVALUE - เหตุการณ์นี้จะเพิ่มขึ้นเมื่อไม่ได้กำหนดค่าให้กับตัวแปร

  • NOTREADY - สิ่งนี้ยกขึ้นโดยอุปกรณ์ I / O ใด ๆ ที่ไม่พร้อมที่จะยอมรับการดำเนินการใด ๆ

  • SYNTAX - เหตุการณ์นี้จะเกิดขึ้นหากมีข้อผิดพลาดทางไวยากรณ์ในโค้ด

  • LOSTDIGITS - เหตุการณ์นี้เกิดขึ้นเมื่อการดำเนินการทางคณิตศาสตร์ทำให้ตัวเลขสูญหายระหว่างการดำเนินการ

การดักจับข้อผิดพลาด

ข้อผิดพลาดถูกดักด้วยความช่วยเหลือของคำสั่งสัญญาณ ลองดูไวยากรณ์และตัวอย่างนี้

ไวยากรณ์

signal on [Errorcondition]

ที่ไหน

  • Errorcondition - นี่คือเงื่อนไขข้อผิดพลาดที่ระบุไว้ข้างต้น

ตัวอย่าง

ลองดูตัวอย่างนี้

/* 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'

ในตัวอย่างข้างต้นเราจะเปิดสัญญาณข้อผิดพลาดก่อน จากนั้นเราจะเพิ่มคำสั่งซึ่งจะทำให้เกิดข้อผิดพลาด จากนั้นเรามีป้ายกำกับข้อผิดพลาดเพื่อแสดงข้อความแสดงข้อผิดพลาดที่กำหนดเอง

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังที่แสดงด้านล่าง

An error has occurred.

ตัวอย่างของรหัสข้อผิดพลาดจะแสดงในโปรแกรมต่อไปนี้

/* 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

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังที่แสดงด้านล่าง

An error has occured 
40 
6

เมื่อคุณติดตั้ง ooRexx ตามบทสภาพแวดล้อมคุณจะมีความสามารถในการทำงานกับคลาสและอ็อบเจ็กต์ โปรดทราบว่าโค้ดทั้งหมดต่อไปนี้ต้องถูกรันในตัวแปล ooRexx ล่าม Rexx ปกติจะไม่สามารถรันโค้ดเชิงวัตถุนี้ได้

การประกาศคลาสและวิธีการ

คลาสถูกกำหนดด้วยการประกาศไวยากรณ์ต่อไปนี้

ไวยากรณ์

::class classname

ที่ไหน classname เป็นชื่อที่กำหนดให้กับชั้นเรียน

วิธีการในคลาสถูกกำหนดด้วยการประกาศไวยากรณ์ต่อไปนี้

ไวยากรณ์

::method methodname

ที่ไหน methodname เป็นชื่อที่กำหนดให้กับวิธีการ

คุณสมบัติในคลาสถูกกำหนดด้วยการประกาศไวยากรณ์ด้านล่าง

ไวยากรณ์

::attribute propertyname

ที่ไหน propertyname เป็นชื่อที่ตั้งให้กับคุณสมบัติ

ตัวอย่าง

ต่อไปนี้เป็นตัวอย่างของคลาสใน Rexx

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

ประเด็นต่อไปนี้ต้องสังเกตเกี่ยวกับโปรแกรมข้างต้น

  • ชื่อชั้นคือนักเรียน
  • ชั้นเรียนมีคุณสมบัติ 2 อย่างคือ StudentID และ StudentName

วิธี Getter และ Setter

เมธอด Getter และ Setter ใช้เพื่อตั้งค่าและรับค่าคุณสมบัติโดยอัตโนมัติ ใน Rexx เมื่อคุณประกาศคุณสมบัติด้วยคีย์เวิร์ดแอตทริบิวต์เมธอด getter และ setter จะถูกใส่ไว้แล้ว

ตัวอย่าง

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

ในตัวอย่างข้างต้นจะมีเมธอด Getter และ Setter สำหรับ StudentId และ StudentName

ตัวอย่างวิธีการใช้งานจะแสดงในโปรแกรมต่อไปนี้

/* 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

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังที่แสดงด้านล่าง

1 
Joe

วิธีการอินสแตนซ์

ออบเจ็กต์สามารถสร้างจากคลาสผ่านทางไฟล์ ~new operator. สามารถเรียกวิธีการจากคลาสได้ด้วยวิธีต่อไปนี้

Object~methodname

ที่ไหน methodname เป็นวิธีการที่ต้องเรียกใช้จากคลาส

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงให้เห็นว่าออบเจ็กต์สามารถสร้างจากคลาสได้อย่างไรและเรียกใช้วิธีการตามลำดับ

/* 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))

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังที่แสดงด้านล่าง

60

การสร้างวัตถุหลายชิ้น

นอกจากนี้เรายังสามารถสร้างหลายวัตถุของชั้นเรียน ตัวอย่างต่อไปนี้จะแสดงให้เห็นว่าสามารถทำได้อย่างไร

ที่นี่เรากำลังสร้างวัตถุ 3 ชิ้น (st, st1 และ st2) และเรียกสมาชิกอินสแตนซ์และวิธีการอินสแตนซ์ตามลำดับ

มาดูตัวอย่างวิธีสร้างวัตถุหลายชิ้นได้

ตัวอย่าง

/* 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))

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังที่แสดงด้านล่าง

60 
70 
60

มรดก

การสืบทอดสามารถกำหนดเป็นกระบวนการที่คลาสหนึ่งได้รับคุณสมบัติ (วิธีการและฟิลด์) ของอีกคลาสหนึ่ง ด้วยการใช้การสืบทอดข้อมูลจะถูกจัดการได้ตามลำดับชั้น

คลาสที่สืบทอดคุณสมบัติของอื่น ๆ เรียกว่า subclass (คลาสที่ได้รับคลาสย่อย) และคลาสที่มีคุณสมบัติสืบทอดเรียกว่า superclass (คลาสพื้นฐานคลาสพาเรนต์)

มาดูตัวอย่างการสืบทอดใน Rexx ในตัวอย่างต่อไปนี้เรากำลังสร้างคลาสที่เรียกว่าPerson. จากนั้นเราใช้คีย์เวิร์ดคลาสย่อยเพื่อสร้างไฟล์Student class เป็น sub-class of Person.

ตัวอย่าง

/* 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))

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังที่แสดงด้านล่าง

60

ความสามารถในการพกพาเป็นสิ่งสำคัญในภาษาโปรแกรมใด ๆ อย่างที่ทราบกันดีว่า Rexx มีให้บริการในระบบปฏิบัติการที่หลากหลายเช่น Windows และ Linux ดังนั้นจึงจำเป็นต้องมั่นใจว่าเมื่อมีการพัฒนาโปรแกรมบนแพลตฟอร์ม Windows ว่ามีข้อควรระวังที่จำเป็นหากโปรแกรมเดียวกันทำงานบนแพลตฟอร์ม Linux

Rexx มีความสามารถในการรันคำสั่งระดับระบบ มีคำสั่งที่สามารถใช้เพื่อทำความเข้าใจว่าระบบปฏิบัติการที่กำลังทำงานอยู่คืออะไร จากเอาต์พุตสามารถดำเนินการที่เหมาะสมเพื่อดูว่าคำสั่งใดบ้างที่สามารถรันบนระบบปฏิบัติการนี้ได้

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงวิธีใช้ฟังก์ชันการแยกวิเคราะห์เพื่อรับรายละเอียดของระบบปฏิบัติการที่โปรแกรมกำลังทำงานอยู่

/* 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

ผลลัพธ์จะแตกต่างกันไปขึ้นอยู่กับระบบปฏิบัติการ ตัวอย่างผลลัพธ์ได้รับด้านล่าง

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 มีฟังก์ชันเพิ่มเติมจำนวนมากที่ให้ฟังก์ชันการทำงานที่หลากหลายซึ่งส่วนใหญ่จะช่วยให้คุณสามารถโต้ตอบกับระบบปฏิบัติการได้ ลองดูรายละเอียดบางส่วนตามคำอธิบายด้านล่าง

ซีเนียร์ ฟังก์ชั่นเพิ่มเติม
1 b2c

ฟังก์ชันนี้จะแปลงค่าไบนารีเป็นค่าสตริง

2 bitclr

ฟังก์ชันนี้ใช้เพื่อสลับบิตที่ระบุในสตริงไบนารีเป็น 0

3 bitcomp

ฟังก์ชันนี้ใช้เพื่อเปรียบเทียบ 2 ไบนารีสตริงที่เริ่มต้นด้วยบิต 0

4 buftype

ฟังก์ชันนี้ใช้เพื่อแสดงเนื้อหาของสแต็กซึ่งโดยปกติจะใช้ในการดีบัก

5 ห้องใต้ดิน

ฟังก์ชันนี้ใช้เพื่อเข้ารหัสสตริง

6 ส้อม

ฟังก์ชันนี้ใช้เพื่อสร้างกระบวนการย่อยใหม่บนระบบ

7 getpid

ฟังก์ชันนี้ได้รับ id ของกระบวนการที่กำลังทำงานอยู่

8 กัญชา

ฟังก์ชันนี้ส่งคืนค่าแฮชของสตริง

Rexx มีคำสั่งจำนวนมากที่ให้ฟังก์ชันการทำงานที่หลากหลายซึ่งส่วนใหญ่จะช่วยให้คุณสามารถโต้ตอบกับระบบปฏิบัติการได้ ลองดูรายละเอียดบางส่วน

ซีเนียร์ คำแนะนำ Rexx
1 ที่อยู่

ฟังก์ชันนี้ใช้เพื่อแสดงสภาพแวดล้อมคำสั่งปัจจุบัน

2 หล่น

ฟังก์ชันนี้ใช้เพื่อยกเลิกการกำหนดตัวแปร

3 ตีความ

ตีความหรือดำเนินการตามคำสั่งที่กำหนดไว้

4 นพ

ฟังก์ชันนี้หมายถึงการไม่ดำเนินการใด ๆ โดยปกติคำสั่งนี้จะใช้ในif statements.

5 ดึง

ใช้เพื่อดึงอินพุตจากสแต็กหรือจากสตรีมเริ่มต้น

6 ผลักดัน

ใช้เพื่อพุชค่าไปยังกอง Rexx

ภาษา Rexx มีการใช้งานที่หลากหลายดังที่เราได้เห็นไปแล้วในบทก่อน ๆ การใช้งานแต่ละครั้งมีฟังก์ชันการทำงานของตัวเอง มาดูการใช้งานต่างๆสำหรับ Rexx

OoRexx

นี่คือ Rexx เวอร์ชันเชิงวัตถุ โดยค่าเริ่มต้นการใช้งานขั้นพื้นฐานของ Rexx จะขึ้นอยู่กับขั้นตอน แต่ด้วย ooRexx คุณสามารถนำเสนอความยืดหยุ่นได้มากขึ้นโดยใช้วิธีเชิงวัตถุกับ Rexx ด้วยการใช้ ooRexx คุณสามารถใช้ซ้ำได้ดีขึ้นผ่านการสร้างคลาสและอ็อบเจ็กต์ที่ใช้ซ้ำได้

โปรแกรมต่อไปนี้เป็นตัวอย่างของโปรแกรม Rexx อย่างง่ายซึ่งสามารถรันด้วยตัวดำเนินการ ooRexx

ตัวอย่าง

/* Main program */ 
say ‘hello’

ในการรันโปรแกรมนี้ให้รันคำสั่งต่อไปนี้

rexx main.rexx

เมื่อคุณรันคำสั่งดังกล่าวคุณจะได้รับผลลัพธ์ต่อไปนี้

hello

Netrexx

สิ่งนี้มีไว้สำหรับนักพัฒนาที่ใช้ Java ทั้งหมดเนื่องจากมีทางเลือกที่ใช้ Java สำหรับภาษา Rexx ดังนั้นวัตถุทั้งหมดจะขึ้นอยู่กับ Java Object Model ข้อดีของเฟรมเวิร์กนี้คือเนื่องจาก Java เป็นภาษาที่ได้รับความนิยมอย่างกว้างขวางนักพัฒนาจึงใช้เฟรมเวิร์กนี้ได้ง่ายขึ้น ดังนั้นในการนำไปใช้งานนี้โค้ด Rexx จะถูกแปลงเป็นโปรแกรม Java ซึ่งสามารถรันบนเครื่องเสมือน Java ได้

โค้ดต่อไปนี้เป็นตัวอย่างของโปรแกรม NetRexx

สร้างไฟล์ชื่อ main.nrx และวางรหัสต่อไปนี้ในไฟล์

/* Main program */ 
say ‘hello’

ในการคอมไพล์โค้ดให้รันคำสั่งต่อไปนี้ -

NetRexxC main.nrx

จากนั้นคุณจะได้รับผลลัพธ์ต่อไปนี้ NetRexxC เป็นคอมไพเลอร์ที่แปลงโปรแกรม Rexx ให้เทียบเท่ากับ java

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

ตอนนี้คุณสามารถรันโปรแกรม java ของคุณโดยใช้คำสั่ง java ต่อไปนี้

java main

เมื่อคุณรันคำสั่งดังกล่าวคุณจะได้รับผลลัพธ์ต่อไปนี้

Hello

Brexx

นี่เป็นการใช้งาน Rexx ที่มีน้ำหนักเบา นี่เป็นแพ็คเกจที่เบากว่าตัวใช้ Rexx มาตรฐาน แต่มันยังคงมีฟังก์ชั่นการใช้งานของ Rexx อย่างครบถ้วน

โค้ดต่อไปนี้เป็นตัวอย่างของโปรแกรม BRexx

/* Main program */ 
say ‘hello’

ในการรันโปรแกรมให้รันคำสั่งต่อไปนี้

rexx32 main.rexx

เมื่อคุณรันคำสั่งดังกล่าวคุณจะได้รับผลลัพธ์ต่อไปนี้

hello

NetRexx คือการใช้งาน Java ของ Rexx ใน NetRexx ตัวดำเนินการจะใช้เพื่อแปลงโปรแกรม Rexx เป็นโปรแกรม java ซึ่งสามารถรันบนเครื่องเสมือน Java ใดก็ได้

การตั้งค่า NetRexx

ขั้นตอนแรกใน NetRexx คือการตั้งค่าบนเครื่องภายใน ในการดำเนินการนี้เราต้องทำตามขั้นตอนต่อไปนี้ -

Step 1 - ไปที่เว็บไซต์ดาวน์โหลด NetRexx - http://www.netrexx.org/downloads.nsp

ดาวน์โหลดไฟล์ NetRexx.3.04.GA

Step 2- ตรวจสอบให้แน่ใจว่า java ได้รับการติดตั้งและทำงานบนระบบของคุณ คุณสามารถตรวจสอบได้ว่า java กำลังทำงานอยู่โดยใช้คำสั่ง java – version

ตัวอย่างของผลลัพธ์แสดงอยู่ด้านล่าง

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- คลายซิปเนื้อหาของไฟล์ซิป Netrexx คัดลอกไฟล์จากโฟลเดอร์ NetRexx3.04GA \ lib ไปยังโฟลเดอร์การติดตั้ง java / lib / etc ของคุณ

Step 4 - เพิ่มเส้นทาง NetRexx-3.04GA \ bin ให้กับตัวแปรพา ธ บนระบบ

เรียกใช้โปรแกรม NetRexx โปรแกรมแรก

สร้างไฟล์ชื่อ main.nrx และวางรหัสต่อไปนี้ในไฟล์

/* Main program */ 
say ‘hello’

ในการคอมไพล์โค้ดให้รันคำสั่งต่อไปนี้

NetRexxC main.nrx

จากนั้นคุณจะได้รับผลลัพธ์ต่อไปนี้ NetRexxC เป็นคอมไพเลอร์ที่แปลงโปรแกรม rexx ให้เทียบเท่ากับ java

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

ตอนนี้คุณสามารถรันโปรแกรม java ของคุณโดยใช้คำสั่ง java ต่อไปนี้

java main

เมื่อคุณรันคำสั่งดังกล่าวคุณจะได้รับผลลัพธ์ต่อไปนี้

Hello

ตอนนี้ให้เราพูดถึงบางส่วนของไฟล์ special aspects of the Netrexx library.

สตริงที่จัดทำดัชนี

ใน NetRexx สตริงสามารถกลายเป็นดัชนีไปยังอาร์เรย์ได้ ตัวอย่างแสดงด้านล่าง

ตัวอย่าง

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

เมื่อเรารันโปรแกรมข้างต้นเราจะได้ผลลัพธ์ดังต่อไปนี้

เอาต์พุต

b

ดัชนีหลายรายการ

ใน NetRexx คุณสามารถมีดัชนีหลายรายการสำหรับอาร์เรย์ ตัวอย่างแสดงด้านล่าง

ตัวอย่าง

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

เมื่อเรารันโปรแกรมข้างต้นเราจะได้ผลลัพธ์ดังต่อไปนี้

เอาต์พุต

1

ซีเนียร์ คำสั่งและคำอธิบาย
1 ถาม Command

คำสั่งนี้ใช้เพื่ออ่านบรรทัดจากสตรีมอินพุตเริ่มต้น

2 หลักคำสั่ง

คำสั่งนี้ใช้เพื่อแสดงค่าปัจจุบันของค่าหลัก

3 แบบฟอร์มคำสั่ง

คำสั่งนี้ใช้เพื่อแสดงค่าปัจจุบันของค่าฟอร์ม

4 คำสั่งความยาว

คำสั่งนี้ใช้เพื่อแสดงความยาวของค่าสตริง

5 คำสั่งเวอร์ชัน

คำสั่งนี้ใช้เพื่อส่งคืนเวอร์ชันปัจจุบันของ NetRexx ที่ใช้อยู่

6 ติดตามคำสั่ง

คำสั่งนี้ใช้เพื่อส่งคืนการตั้งค่าการติดตามปัจจุบันที่ NetRexx ใช้

BRexx เป็นการนำ Rexx ที่มีน้ำหนักเบากว่า ยังคงมีฟังก์ชันมากมายที่จะนำเสนอเป็นส่วนหนึ่งของการใช้งาน Rexx

การตั้งค่า BRexx

ขั้นตอนแรกใน BRexx คือการตั้งค่าบนเครื่องท้องถิ่น ในการดำเนินการนี้เราต้องทำตามขั้นตอนต่อไปนี้ -

Step 1 - ไปที่เว็บไซต์ดาวน์โหลด BRexx - https://ftp.gwdg.de/pub/languages/rexx/brexx/html/rx.html

ไปที่ส่วนดาวน์โหลดและดาวน์โหลดผลิตภัณฑ์

Step 2 - คลายซิปเนื้อหาของไฟล์บีบอัด Brexx

Step 3 - เพิ่มเส้นทาง BRexx \ bin ให้กับตัวแปรพา ธ บนระบบ

Step 4 - สร้างตัวแปรใหม่ชื่อ RXLIB แล้วชี้ไปที่โฟลเดอร์ lib ในโฟลเดอร์ Brexx

เรียกใช้โปรแกรม BRexx แรก

สร้างไฟล์ชื่อ main.rexx และวางรหัสต่อไปนี้ในไฟล์

/* Main program */ 
say ‘hello’

ในการรันโปรแกรมให้รันคำสั่งต่อไปนี้

rexx32 main.rexx

เมื่อคุณรันคำสั่งดังกล่าวคุณจะได้รับผลลัพธ์ต่อไปนี้

hello

ตอนนี้ให้เราพูดถึงฟังก์ชันที่ใช้บ่อยที่สุดที่มีอยู่ในไลบรารี BRexx

ซีเนียร์ ฟังก์ชั่นที่มีอยู่ในห้องสมุด BRexx
1 คำสั่ง acos

คำสั่งนี้ใช้เพื่อรับการแปลงอาร์ก - โคไซน์ของตัวเลข

2 คำสั่ง cos

คำสั่งนี้ใช้เพื่อรับการแปลงโคไซน์ของตัวเลข

3 คำสั่งบาป

คำสั่งนี้ใช้เพื่อรับการแปลงไซน์ของตัวเลข

4 คำสั่ง asin

คำสั่งนี้ใช้เพื่อรับการแปลงอาร์กไซน์ของตัวเลข

5 Tan Command

คำสั่งนี้ใช้เพื่อรับการแปลงแทนเจนต์ของตัวเลข

6 คำสั่ง atan

คำสั่งนี้ใช้เพื่อรับการแปลงส่วนโค้งแทนเจนต์ของตัวเลข

7 คำสั่ง mkdir

คำสั่งนี้ใช้เพื่อสร้างไดเร็กทอรีในไดเร็กทอรีการทำงานปัจจุบัน

8 คำสั่ง rmdir

คำสั่งนี้ใช้เพื่อลบไดเร็กทอรีในไดเร็กทอรีการทำงานปัจจุบัน

9 คำสั่งผบ

คำสั่งนี้ใช้เพื่อส่งคืนรายการไดเร็กทอรีทั้งหมด

Rexx มีความสามารถในการทำงานกับฐานข้อมูลที่หลากหลายซึ่งแสดงไว้ด้านล่าง

  • HSQLDB
  • Oracle
  • เซิร์ฟเวอร์ SQL
  • MySQL
  • MongoDB

ข้อมูลทั้งหมดสำหรับฐานข้อมูล Rexx สามารถพบได้เมื่อคุณคลิกที่ลิงค์ต่อไปนี้ - https://rexxsql.sourceforge.net/

ในตัวอย่างของเราเราจะใช้ MySQL DB เป็นตัวอย่าง ขั้นตอนแรกคือตรวจสอบให้แน่ใจว่าได้ดาวน์โหลดไดรเวอร์ที่จำเป็นจากไซต์ Rexx SQL เพื่อให้โปรแกรม Rexx สามารถทำงานกับ SQL ได้ ดังนั้นให้ทำตามขั้นตอนต่อไปเพื่อให้แน่ใจว่าโปรแกรม Rexx สามารถทำงานกับฐานข้อมูล MySQL ได้

Step 1 - ไปที่หน้าดาวน์โหลดไดรเวอร์ต่อไปนี้จากไซต์ Rexx - https://sourceforge.net/projects/rexxsql/files/rexxsql/2.6/

Step 2 - ดาวน์โหลดไดรเวอร์ MYSQL - rxsql26B3_my_w32_ooRexx

Step 3 - คลายซิปเนื้อหาลงในเครื่องท้องถิ่น

Step 4 - เพิ่มเส้นทางของโฟลเดอร์ที่คลายซิปไปยังตัวแปรพา ธ บนเครื่องของคุณ

สำหรับตัวอย่างที่ตามมาทั้งหมดตรวจสอบให้แน่ใจว่ามีตัวชี้ต่อไปนี้ -

  • คุณได้สร้างฐานข้อมูล TESTDB

  • คุณได้สร้างตาราง EMPLOYEE ใน TESTDB

  • ตารางนี้มีฟิลด์ FIRST_NAME, LAST_NAME, AGE, SEX และ INCOME

  • ID ผู้ใช้ "testuser" และรหัสผ่าน "test123" ถูกตั้งค่าให้เข้าถึง TESTDB

  • ตรวจสอบให้แน่ใจว่าคุณได้ดาวน์โหลดไฟล์ jar mysql และเพิ่มไฟล์ลงใน classpath ของคุณ

  • คุณได้ผ่านการสอน MySQL แล้ว

การเชื่อมต่อฐานข้อมูล

ในการสร้างการเชื่อมต่อฐานข้อมูลอันดับแรกคุณต้องไปที่ Rexxsql DLL จากนั้นใช้ฟังก์ชัน SQLConnect เพื่อสร้างการเชื่อมต่อกับฐานข้อมูล ไวยากรณ์และตัวอย่างของวิธีการนี้สามารถทำได้ดังต่อไปนี้

ไวยากรณ์

SQLConnect(cname,username,password,dbname)

พารามิเตอร์

  • cname - นี่คือชื่อที่ใช้ในการเชื่อมต่อ

  • username - ชื่อผู้ใช้ที่จะเชื่อมต่อกับฐานข้อมูล

  • password - รหัสผ่านสำหรับเชื่อมต่อกับฐานข้อมูล

  • dbname - สคีมาฐานข้อมูลที่จะเชื่อมต่อ

ส่งคืนค่า

ค่าที่เท่ากับ 0 จะหมายความว่าการเชื่อมต่อฐานข้อมูลสำเร็จ

ตัวอย่าง

/* Main program */ 
Call RxFuncAdd 'SQLLoadFuncs', 'rexxsql', 'SQLLoadFuncs' 
Call SQLLoadFuncs 
say SQLConnect(c1,' testuser ',' test123','testdb')

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังที่แสดงด้านล่าง

0

การสร้างตารางฐานข้อมูล

ขั้นตอนต่อไปหลังจากเชื่อมต่อกับฐานข้อมูลคือการสร้างตารางในฐานข้อมูลของเรา ตัวอย่างต่อไปนี้แสดงวิธีสร้างตารางในฐานข้อมูลโดยใช้ Rexx คำสั่งทั้งหมดใน Rexx SQL ดำเนินการโดยใช้ฟังก์ชัน SQLCommand

ไวยากรณ์

SQLConnect(sname,statement)

พารามิเตอร์

  • sname - นี่คือชื่อที่กำหนดให้กับคำสั่งเพื่อดำเนินการ

  • statement - นี่คือคำสั่งที่ต้องดำเนินการกับฐานข้อมูล

ส่งคืนค่า

ค่าที่เท่ากับ 0 จะหมายความว่าคำสั่งสำเร็จ

ตัวอย่าง

/* 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'

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังที่แสดงด้านล่าง

Connect Succedded 
Changed database to testdb 
Employee table created

การดำเนินการบนตารางฐานข้อมูล

ประเภทของการดำเนินการต่อไปนี้มักจะดำเนินการบนตารางฐานข้อมูล

ซีเนียร์ การทำงานและคำอธิบาย
1 แทรกการทำงาน

จำเป็นเมื่อคุณต้องการสร้างระเบียนของคุณลงในตารางฐานข้อมูล

2 อ่านการทำงาน

การดำเนินการอ่านบนฐานข้อมูลใด ๆ หมายถึงการดึงข้อมูลที่เป็นประโยชน์จากฐานข้อมูล

3 อัปเดตการทำงาน

การดำเนินการ UPDATE บนฐานข้อมูลใด ๆ หมายถึงการอัปเดตระเบียนตั้งแต่หนึ่งรายการขึ้นไปซึ่งมีอยู่แล้วในฐานข้อมูล

4 ลบการทำงาน

จำเป็นต้องดำเนินการ DELETE เมื่อคุณต้องการลบบางระเบียนออกจากฐานข้อมูลของคุณ

5 การปิดการเชื่อมต่อ

คำสั่งต่อไปนี้สามารถใช้เพื่อปิดการเชื่อมต่อกับฐานข้อมูล

การทำธุรกรรม

ธุรกรรมเป็นกลไกที่ทำให้ข้อมูลมีความสอดคล้องกัน ธุรกรรมมีคุณสมบัติสี่ประการดังต่อไปนี้ -

  • Atomicity - ไม่ว่าธุรกรรมจะเสร็จสมบูรณ์หรือไม่มีอะไรเกิดขึ้นเลย

  • Consistency - ธุรกรรมต้องเริ่มต้นในสถานะที่สอดคล้องกันและปล่อยให้ระบบอยู่ในสถานะที่สอดคล้องกัน

  • Isolation - ผลลัพธ์ระดับกลางของธุรกรรมจะไม่ปรากฏนอกธุรกรรมปัจจุบัน

  • Durability - เมื่อทำธุรกรรมแล้วผลกระทบจะคงอยู่แม้ระบบจะล้มเหลวก็ตาม

นี่คือตัวอย่างง่ายๆในการใช้ธุรกรรม

ตัวอย่าง

/* 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

ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นดังที่แสดงด้านล่าง

Connect Succedded 
Changed database to testdb 
COMMITTED

ดำเนินการ

การดำเนินการคอมมิตคือสิ่งที่บอกให้ฐานข้อมูลดำเนินการต่อไปและทำการเปลี่ยนแปลงทั้งหมดในฐานข้อมูล ในตัวอย่างข้างต้นสามารถทำได้โดยคำสั่งต่อไปนี้

Sqlcommit()

การดำเนินการย้อนกลับ

หากคุณไม่พอใจกับการเปลี่ยนแปลงอย่างน้อยหนึ่งรายการและต้องการเปลี่ยนกลับการเปลี่ยนแปลงเหล่านั้นทั้งหมดให้ใช้วิธีย้อนกลับ ในตัวอย่างข้างต้นสามารถทำได้โดยคำสั่งต่อไปนี้

SqlRollback()

อุปกรณ์พกพามาไกลแล้วและ Rexx มีหลายวิธีที่สามารถทำงานบนอุปกรณ์เหล่านี้ได้ Rexx รองรับ Pocket PC, อุปกรณ์ Palm, PDA และอุปกรณ์สมาร์ทโฟนอื่น ๆ ข้อดีของ Rexx ในการทำงานบนแพลตฟอร์มเหล่านี้คือ Rexx เป็นระบบการเขียนโปรแกรมน้ำหนักขนาดเล็กที่ทำงานในช่วงไม่กี่กิโลไบต์ ดังนั้นการรันโปรแกรม Rexx บนอุปกรณ์เหล่านี้จึงง่ายขึ้น

Rexx บนอุปกรณ์พกพาสามารถทำงานในโหมดต่อไปนี้ -

  • โหมดแรกคือโหนดเนทีฟที่ทำงานบนระบบปฏิบัติการโดยตรง ข้อดีของการทำงานในโหมดนี้คือเร็วกว่าเนื่องจากทำงานจากระบบปฏิบัติการโดยตรง

  • โหมดถัดไปจะอยู่ด้านบนของโปรแกรม DOS หรือโปรแกรมจำลองที่ด้านบนของอุปกรณ์ที่ถือด้วยมือ ข้อดีของโหมดนี้คือสามารถทำงานบนระบบปฏิบัติการประเภทใดก็ได้ตราบเท่าที่อีมูเลเตอร์ทำงานบนระบบปฏิบัติการนั้น

Rexx Interpreters สำหรับอุปกรณ์มือถือประเภทต่างๆแสดงอยู่ด้านล่าง

  • Windows CE - Brexx
  • Palm OS - Rexx สำหรับ Palm OS
  • ระบบปฏิบัติการ Symbian - Regina

สำหรับโปรแกรมจำลอง DOS จำเป็นต้องดำเนินการตามขั้นตอนต่อไปนี้ -

Step 1- อันดับแรกคือการดาวน์โหลด PocketDOS ซึ่งเป็นโปรแกรมจำลอง DOS ยอดนิยม ได้รับการออกแบบให้ทำงานบนระบบปฏิบัติการหลายระบบและรองรับหน้าจอ VGA ทั่วไปและพอร์ตอนุกรมและพอร์ตขนาน

Step 2 - ขั้นตอนต่อไปคือการดาวน์โหลดไฟล์ BRexx สำหรับ DOS 16 บิตไปยัง Windows PC

Step 3 - ขั้นตอนสุดท้ายคือการใช้ ActiveSync เพื่อซิงค์โปรแกรม Rexx กับอุปกรณ์มือถือ

มีผลิตภัณฑ์ที่ใช้ DOS เชิงพาณิชย์อื่น ๆ ที่มีจำหน่าย XTM เป็นผลิตภัณฑ์ที่อยู่ในหมวดหมู่นี้ คุณสมบัติของผลิตภัณฑ์นี้มีดังนี้ -

  • รองรับซีพียู 80186 และชุดคำสั่ง

  • มันทำงานจากรหัส BIOS เพื่อประสิทธิภาพที่ดีขึ้น

  • สามารถจัดเตรียมการจำลองสำหรับตัวประมวลผลคณิตศาสตร์ร่วมเวอร์ชัน 8087 MPU

  • ให้การเข้าถึงพอร์ตอนุกรม

  • รองรับภาษาที่หลากหลายเช่นอังกฤษฝรั่งเศสและเยอรมัน

สิ่งสำคัญประการหนึ่งของภาษาโปรแกรมคือประสิทธิภาพของแอปพลิเคชัน การปฏิบัติพิเศษจำเป็นต้องได้รับการดูแลเพื่อให้แน่ใจว่าประสิทธิภาพของแอปพลิเคชันจะไม่ถูกขัดขวาง มาดูข้อควรพิจารณาบางประการที่อธิบายไว้ในขั้นตอนเพื่อความเข้าใจที่ดีขึ้น -

Step 1- พยายามลดจำนวนคำสั่ง - ใน Rexx แต่ละคำสั่งจะมีค่าใช้จ่าย ดังนั้นพยายามลดจำนวนคำสั่งในโปรแกรมของคุณ ตัวอย่างคำแนะนำที่สามารถออกแบบใหม่ได้แสดงอยู่ด้านล่าง

แทนที่จะใช้คำสั่ง if else หลายคำสามารถใช้คำสั่งแยกวิเคราะห์ได้ เช่นเดียวกับในโปรแกรมต่อไปนี้แทนที่จะมีเงื่อนไข if สำหรับแต่ละค่าและรับค่าของ word1, word2, word3 และ word4 ให้ใช้คำสั่งแยกวิเคราะห์

/* Main program */  

parse value 'This is a Tutorial' with word1 word2 word3 word4 
say "'"word1"'" 
say "'"word2"'" 
say "'"word3"'" 
say "'"word4"'"

Step 2- พยายามรวมหลาย ๆ คำสั่งให้เป็นคำสั่งเดียว ตัวอย่างแสดงด้านล่าง

สมมติว่าคุณมีรหัสต่อไปนี้ซึ่งทำการมอบหมายให้ - a and b และส่งต่อไปยังวิธีการที่เรียกว่า proc.

do i = 1 to 100 
   a = 0 
   b = 1 
   call proc a,b 
end

คุณสามารถแทนที่รหัสที่ระบุข้างต้นด้วยรหัสต่อไปนี้โดยใช้คำสั่งแยกวิเคราะห์

do i = 1 for 100 
   parse value 0 1 with 
   a, 
   b, 
   call proc a,b 
end

Step 3 - ลองเปลี่ยนไฟล์ do..to loop กับ do..for loopทุกที่ที่เป็นไปได้ โดยปกติจะแนะนำเมื่อตัวแปรควบคุมถูกวนซ้ำผ่านลูป

/* Main program */ 
do i = 1 to 10 
   say i 
end

โปรแกรมข้างต้นควรถูกแทนที่ด้วยโปรแกรมต่อไปนี้

/* Main program */ 
do i = 1 for 10 
   say i 
end

Step 4- ถ้าเป็นไปได้ให้ลบเงื่อนไข for ออกจาก do loop ดังที่แสดงในโปรแกรมต่อไปนี้ หากไม่ต้องการตัวแปรควบคุมให้ใส่ค่าสิ้นสุดในลูป do ดังที่แสดงด้านล่าง

/* Main program */ 
do 10 
   say hello 
end

Step 5 - ใน select clauseสิ่งที่คุณรู้สึกว่าเป็นเงื่อนไขที่ดีที่สุดซึ่งจะได้รับการประเมินจำเป็นต้องให้ความสำคัญเป็นอันดับแรก when clause. ดังนั้นในตัวอย่างต่อไปนี้ถ้าเรารู้ว่า 1 เป็นตัวเลือกที่ใช้บ่อยที่สุดเราจะใส่when 1 clause เป็นประโยคแรกในคำสั่ง select

/* Main program */ 
select 
   when 1 then say'1' 
   when 2 then say'2' 
   otherwise say '3' 
end

โปรแกรมเมอร์ทุกคนต้องการให้โปรแกรมของตนดีที่สุดในด้านคุณภาพและประสิทธิภาพ ต่อไปนี้เป็นแนวทางปฏิบัติหรือคำแนะนำในการเขียนโปรแกรมที่ดีที่สุดบางส่วนเมื่อเขียนโปรแกรม Rexx ซึ่งสามารถช่วยให้บรรลุเป้าหมายเหล่านี้ได้

คำแนะนำ 1

ใช้คำสั่งที่อยู่ก่อนที่คุณจะออกคำสั่งใด ๆ กับระบบปฏิบัติการหรือพรอมต์คำสั่ง ซึ่งจะช่วยให้คุณได้รับพื้นที่แอดเดรสล่วงหน้าในหน่วยความจำและทำให้โปรแกรมของคุณทำงานได้อย่างมีประสิทธิภาพมากขึ้น

ตัวอย่างคำสั่ง address แสดงไว้ด้านล่าง

ตัวอย่าง

/* Main program */ 
address system dir

ผลลัพธ์ของคำสั่งมีดังนี้ แต่อาจแตกต่างกันไปในแต่ละระบบ

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

คำแนะนำ 2

ตรวจสอบให้แน่ใจว่าคำสั่งทั้งหมดของระบบปฏิบัติการเป็นตัวพิมพ์ใหญ่และอยู่ในเครื่องหมายคำพูดทุกที่ที่ทำได้

ตัวอย่างเช่นเดียวกันแสดงอยู่ด้านล่าง

ตัวอย่าง

/* Main program */ 
options arexx_bifs 
say chdir('\REXXML100') 
say directory()

เมื่อเรารันโปรแกรมข้างต้นเราจะได้ผลลัพธ์ดังต่อไปนี้

0 
D:\rexxxml100

คำแนะนำ 3

หลีกเลี่ยงการสร้างบล็อกความคิดเห็นขนาดใหญ่ดังที่แสดงในโปรแกรมต่อไปนี้

ตัวอย่าง

/******/ 
/* */ 
/* */ 
/* */ 
/******/ 
/* Main program */ 
address system dir

คำแนะนำ 4

ใช้คำสั่ง Parse เพื่อกำหนดค่าเริ่มต้น ตัวอย่างเช่นเดียวกันแสดงอยู่ด้านล่าง

ตัวอย่าง

parse value 0 1 with 
a, 
b

คำแนะนำ 5

ใช้คำสั่ง "Left (var1,2)" ทุกที่ที่ทำได้แทนคำสั่ง "substr (var1,1,2)"

คำแนะนำ 6

ใช้คำสั่ง "Right (var1,2)" ทุกที่ที่ทำได้แทนคำสั่ง "substr (var1, length (var1), 2)"

ในการใช้อินเทอร์เฟซผู้ใช้แบบกราฟิกที่มีอยู่ใน Rexx จำเป็นต้องใช้ 2 แพ็คเกจหนึ่งเรียกว่า ActiveTcl และอีกอย่างคือ Rexxtkแพ็คเกจ นอกเหนือจากแพ็คเกจทั้ง 2 นี้เราสามารถออกแบบฟอร์มปกติซึ่งสามารถมีปุ่มและส่วนควบคุมอื่น ๆ ในแบบฟอร์มได้

การตั้งค่าสภาพแวดล้อม

สิ่งแรกที่ต้องทำคือการตั้งค่าสภาพแวดล้อม มาทำตามขั้นตอนต่อไปนี้เพื่อจัดสภาพแวดล้อม

Step 1 - ดาวน์โหลดแพ็คเกจ Activetcl จากเว็บไซต์ต่อไปนี้ - https://www.activestate.com/activetcl

Step 2- ขั้นตอนต่อไปคือการเริ่มการติดตั้ง ActiveTCl คลิกที่ปุ่มถัดไปบนหน้าจอเพื่อดำเนินการต่อ

Step 3 - ยอมรับข้อตกลงใบอนุญาตและคลิกที่ปุ่มถัดไป

Step 4 - เลือกตำแหน่งสำหรับการติดตั้งและคลิกที่ปุ่มถัดไป

Step 5 - เลือกตำแหน่งสำหรับการติดตั้งการสาธิตและคลิกที่ปุ่มถัดไป

Step 6 - คลิกที่ปุ่มถัดไปเพื่อดำเนินการติดตั้ง

Step 7 - คลิกที่ปุ่ม Finish เพื่อทำการติดตั้ง

Step 8 - ขั้นตอนต่อไปคือการดาวน์โหลดซอฟต์แวร์ Rexxtk จากลิงค์ต่อไปนี้ - https://sourceforge.net/projects/rexxtk/

Step 9- ดับเบิลคลิกไฟล์ตัวติดตั้งจากลิงค์ในขั้นตอนก่อนหน้าเพื่อเริ่มการติดตั้ง คลิกที่ปุ่มถัดไปเพื่อดำเนินการต่อ

Step 10 - ในหน้าจอถัดไปให้คลิกที่ปุ่มใช่เพื่อยอมรับข้อตกลงใบอนุญาต

Step 11 - ในหน้าจอถัดไปเลือกตำแหน่งสำหรับการติดตั้งและคลิกที่ปุ่มถัดไป

Step 12 - เลือกตำแหน่งโฟลเดอร์ Program และคลิกที่ปุ่มถัดไป

เมื่อการติดตั้งเสร็จสมบูรณ์ตอนนี้เราสามารถเริ่มต้นด้วยการเขียนโปรแกรม GUI ใน Rexx

โปรแกรมพื้นฐาน

มาดูกันว่าเราจะออกแบบโปรแกรมพื้นฐานง่ายๆด้วย Rexx ในรูปแบบอินเทอร์เฟซผู้ใช้แบบกราฟิกได้อย่างไร

ตัวอย่าง

/* Main program */ 
call RxFuncAdd 'TkLoadFuncs','rexxtk','TkLoadFuncs' 
call TkLoadFuncs 
do forever 
   interpret 'Call' TkWait() 
end 
call TkDropFuncs 
exit 0

สิ่งต่อไปนี้ต้องสังเกตเกี่ยวกับโปรแกรมข้างต้น -

  • ไลบรารี Rexxtk และฟังก์ชันทั้งหมดถูกโหลดโดยใช้คำสั่ง RxFuncAdd

  • ลูป do forever จะเปิดหน้าต่างค้างไว้และจะรอให้ผู้ใช้ป้อนข้อมูล

  • เมื่อตรวจพบอินพุตของผู้ใช้โปรแกรมจะออก

เมื่อโปรแกรมข้างต้นทำงานคุณจะได้ผลลัพธ์ดังต่อไปนี้

การสร้างเมนู

เมนูถูกสร้างขึ้นด้วยความช่วยเหลือของฟังก์ชัน TkMenu และ TkAdd ไวยากรณ์ของฟังก์ชันเหล่านี้ได้รับด้านล่าง

ไวยากรณ์

TkMenu(widgetname,options,0)

พารามิเตอร์

Widgetname - ชื่อที่จะตั้งให้กับเมนู

ตัวเลือกสามารถเป็นใครก็ได้ดังต่อไปนี้ -

  • selectcolor - หากใช้ช่องทำเครื่องหมายหรือปุ่มตัวเลือกเป็นตัวเลือกเมนูตัวเลือกนี้จะระบุสีเพื่อเลือกเมื่อเลือกตัวเลือกเมนูใด ๆ

  • tearoff - ตัวเลือกนี้ใช้สำหรับการเพิ่มเมนูย่อยในเมนูหลัก

  • title - สตริงที่ต้องใช้เพื่อตั้งชื่อหน้าต่าง

ส่งคืนค่า

ที่จับสำหรับเมนูที่สร้างขึ้น

ตัวอย่าง

/* 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

สิ่งต่อไปนี้ต้องสังเกตเกี่ยวกับโปรแกรมข้างต้น -

  • แถบเมนูถูกสร้างขึ้นโดยใช้ฟังก์ชัน TkMenu พารามิเตอร์ 'tearoff' หมายความว่าเราจำเป็นต้องสร้างเมนูย่อยที่จะแนบไปกับเมนูหลัก

  • จากนั้นเราจะเพิ่มตัวเลือกเมนู 2 ตัวที่เรียกว่าไฟล์และเปิดโดยใช้ฟังก์ชัน TkAdd

เมื่อโปรแกรมข้างต้นทำงานคุณจะได้ผลลัพธ์ดังต่อไปนี้

Reginald เป็นล่าม Rexx อีกตัวหนึ่งซึ่งพัฒนาโดย Jeff Glantt และมีการปรับแต่งบางอย่างเกี่ยวกับวิธีเรียกใช้โปรแกรม Rexx ในส่วนนี้เราจะดูวิธีการตั้งค่า Reginald และเรียกใช้โปรแกรม Rexx สองสามโปรแกรมในนั้น

การตั้งค่าสภาพแวดล้อม

ขั้นตอนแรกคือการตั้งค่าสภาพแวดล้อมซึ่งคือการดาวน์โหลดไฟล์ Reginald สามารถทำได้จากลิงค์เว็บไซต์ต่อไปนี้ -http://www.manmrk.net/tutorials/rexx/Reginald/win32/rxusrw32.htm

เมื่อการดาวน์โหลดเสร็จสิ้นและคุณเปิดโปรแกรมติดตั้งหน้าจอถัดไปจะอนุญาตให้คุณเลือกตำแหน่งการติดตั้ง

คลิกปุ่มติดตั้งเพื่อดำเนินการต่อ

เมื่อเสร็จสิ้นตอนนี้เราสามารถเริ่มรันโปรแกรมตัวอย่างหนึ่งโปรแกรมในตัวแปล Reginald สร้างโปรแกรมง่ายๆดังภาพด้านล่าง

/* Main program */ 
say 'Hello'

จากนั้นรันคำสั่งต่อไปนี้ -

RxLaunch.exe main.rexx

จากนั้นคุณจะได้รับผลลัพธ์ต่อไปนี้ ขณะนี้โปรแกรมนี้จะทำงานในตัวแปล Reginald

มีฟังก์ชั่นอื่น ๆ

นอกเหนือจากคำสั่ง Rexx ปกติแล้ว Reginald ยังมีคำสั่งเฉพาะบางอย่างที่ออกแบบมาสำหรับระบบปฏิบัติการ Windows DriveMap เป็นหนึ่งในคำสั่งดังกล่าว -

DriveMap

ฟังก์ชันนี้ให้ข้อมูลเกี่ยวกับไดรฟ์

Syntax -

Drivemap(,options)

Parameters -

Options - นี่คือรายการคำสำคัญที่สามารถใช้เพื่อรับข้อมูลต่างๆในไดรฟ์ของคอมพิวเตอร์ในระบบ

Return Value

ค่าสตริงที่มีข้อมูลในไดรฟ์

Example -

/* Main program */ 
say 'Drives on system : ' DriveMap(,'FIXED')

หากรันโปรแกรมข้างต้นคุณจะได้รับผลลัพธ์ต่อไปนี้ เอาต์พุตนี้ขึ้นอยู่กับระบบ

List of disk drives :  C:\ D:\

Rexx มีสิ่งอำนวยความสะดวกในการทำงานกับเว็บเซิร์ฟเวอร์เช่นกัน สิ่งที่พบบ่อยที่สุดคือเว็บเซิร์ฟเวอร์ apache ในการใช้ Rexxw กับเว็บเซิร์ฟเวอร์ Apache คุณต้องดาวน์โหลดโมดูล Rexx ก่อนจากลิงค์ต่อไปนี้ -https://sourceforge.net/projects/modrexx/?source=typ_redirect

เมื่อเสร็จแล้วตรวจสอบให้แน่ใจว่าได้เพิ่มโมดูล mod Rexx ในพา ธ คลาสแล้ว

ต้องเพิ่มและแก้ไขบรรทัดต่อไปนี้ในไฟล์คอนฟิกูเรชัน Apache

ต้องเพิ่มบรรทัดต่อไปนี้ต่อท้ายส่วนที่เหมาะสม -

  • httpd.conf รายการ LoadModule
  • LoadModule โมดูล rexx_module / mod_rexx.dll

ควรเพิ่มบรรทัดต่อไปนี้ที่ส่วนท้ายของไฟล์ http.conf ไฟล์.

  • แอปพลิเคชัน AddType / x-httpd-rexx-script .rex .rexx

  • แอปพลิเคชัน AddType / x-httpd-rexx-rsp .rsp

  • เพิ่มสิ่งเหล่านี้สำหรับการสนับสนุน REXX Server Page

  • RexxRspCompiler“ c: / Program Files / Apache Group / Apache2 / bin / rspcomp.rex”

เมื่อทำการเปลี่ยนแปลงข้างต้นแล้วคุณต้องปิดและรีสตาร์ทเว็บเซิร์ฟเวอร์ apache ของคุณ

บรรทัดด้านบนยังช่วยให้คุณมีหน้าเซิร์ฟเวอร์ที่ใช้ Rexx เช่นเดียวกับหน้าเซิร์ฟเวอร์ Java คุณสามารถเพิ่มโค้ด Rexx ลงในเพจ html ได้โดยตรง

ตัวอย่างแสดงด้านล่าง -

<p>The current date and time is 
   <?rexx 
      /* Inserting the rexx statement */ 
      say date() time() 
   ?>
</p>

เมื่อรันเพจเซิร์ฟเวอร์ที่ใช้ Rexx สิ่งต่อไปนี้จะดำเนินการ -

  • ขั้นแรกให้สร้างไฟล์ชั่วคราว

  • จากนั้นคอมไพเลอร์เซิร์ฟเวอร์ Rexx จะคอมไพเลอร์ไฟล์ลงในโปรแกรม Rexx และวางไว้ในไฟล์ชั่วคราว

  • ขั้นตอนต่อไปคือการเรียกใช้โปรแกรม Rexx

สุดท้ายไฟล์ชั่วคราวจะถูกลบออก