เวิร์กสเตชันออนไลน์ของ OnWorks Linux และ Windows

โลโก้

ฟรีโฮสติ้งออนไลน์สำหรับเวิร์กสเตชัน

<ก่อนหน้านี้ | เนื้อหา | ถัดไป>

สำหรับ: แบบเปลือกหอยแบบดั้งเดิม

ต้นฉบับ for ไวยากรณ์ของคำสั่งคือ:

for ตัวแปร [ใน คำ]; ทำ

คำสั่ง

ทำ

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

พื้นที่ for คำสั่งมีประโยชน์บนบรรทัดคำสั่ง เราสามารถสาธิตวิธีการทำงานได้อย่างง่ายดาย:



[me@linuxbox ~]$ สำหรับฉันใน ABCD; ทำ echo $i; เสร็จแล้ว

เอบีซีดี

[me@linuxbox ~]$ สำหรับฉันใน ABCD; ทำ echo $i; เสร็จแล้ว

เอบีซีดี


ในตัวอย่างนี้ for มีรายการคำสี่คำ: "A", "B", "C" และ "D" ด้วยรายการคำสี่คำ การวนซ้ำจะดำเนินการสี่ครั้ง ทุกครั้งที่ดำเนินการวนซ้ำ คำจะถูกกำหนดให้กับตัวแปร i. ภายในลูป เรามี เสียงสะท้อน คำสั่งที่แสดงค่าของ i เพื่อแสดงงาน เช่นเดียวกับ ในขณะที่ และ จนกระทั่ง ลูป, the ทำ คีย์เวิร์ดปิดลูป


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



[me@linuxbox ~]$ สำหรับฉันใน {A..D}; ทำ echo $i; เสร็จแล้ว

เอบีซีดี

[me@linuxbox ~]$ สำหรับฉันใน {A..D}; ทำ echo $i; เสร็จแล้ว

เอบีซีดี


หรือการขยายชื่อพาธ:



[me@linuxbox ~]$ สำหรับฉันใน distros*.txt; ทำ echo $i; เสร็จแล้ว

distros-by-date.txt distros-dates.txt distros-key-names.txt distros-key-vernums.txt distros-names.txt distros.txt

distros-vernums.txt distros-versions.txt

[me@linuxbox ~]$ สำหรับฉันใน distros*.txt; ทำ echo $i; เสร็จแล้ว

distros-by-date.txt distros-dates.txt distros-key-names.txt distros-key-vernums.txt distros-names.txt distros.txt

distros-vernums.txt distros-versions.txt


หรือคำสั่งทดแทน:



#! / bin / ทุบตี

# longest-word: ค้นหาสตริงที่ยาวที่สุดในไฟล์ในขณะที่ [[ -n $1 ]]; ทำ

ถ้า [[ -r $1 ]]; แล้ว max_word= max_len=0

สำหรับฉันใน $(สตริง $1); ทำ len=$(echo -n $i | wc -c)

ถ้า (( len > max_len )); แล้ว max_len=$len max_word=$i

fi

ทำ

echo "$1: '$max_word' (อักขระไม่เกิน $max_len)"

fi กะ

ทำ

#! / bin / ทุบตี

# longest-word: ค้นหาสตริงที่ยาวที่สุดในไฟล์ในขณะที่ [[ -n $1 ]]; ทำ

ถ้า [[ -r $1 ]]; แล้ว max_word= max_len=0

สำหรับฉันใน $(สตริง $1); ทำ len=$(echo -n $i | wc -c)

ถ้า (( len > max_len )); แล้ว max_len=$len max_word=$i

fi

ทำ

echo "$1: '$max_word' (อักขระไม่เกิน $max_len)"

fi กะ

ทำ

สำหรับ: แบบเปลือกหอยแบบดั้งเดิม


ในตัวอย่างนี้ เรามองหาสตริงที่ยาวที่สุดที่พบในไฟล์ เมื่อได้รับชื่อไฟล์ตั้งแต่หนึ่งชื่อขึ้นไปบนบรรทัดคำสั่ง โปรแกรมนี้จะใช้ เงื่อนไข โปรแกรม (ซึ่งรวมอยู่ในแพ็คเกจ GNU binutils) เพื่อสร้างรายการ "คำ" ของข้อความที่อ่านได้ในแต่ละไฟล์ NS for วนรอบประมวลผลแต่ละคำและกำหนดว่าคำปัจจุบันเป็นคำที่ยาวที่สุดเท่าที่พบ เมื่อการวนซ้ำสิ้นสุดลง คำที่ยาวที่สุดจะปรากฏขึ้น

ถ้าตัวเลือก in คำ ส่วนหนึ่งของ for ละเว้นคำสั่ง for ค่าเริ่มต้นในการประมวลผลพารามิเตอร์ตำแหน่ง เราจะปรับเปลี่ยน .ของเรา คำที่ยาวที่สุด สคริปต์เพื่อใช้วิธีนี้:



#! / bin / ทุบตี

# longest-word2: ค้นหาสตริงที่ยาวที่สุดในไฟล์สำหรับ i; ทำ

ถ้า [[ -r $i ]]; แล้ว max_word= max_len=0

สำหรับ j ใน $(สตริง $i); ทำ len=$(echo -n $j | wc -c)

ถ้า (( len > max_len )); แล้ว max_len=$len max_word=$j

fi

ทำ

echo "$i: '$max_word' (อักขระไม่เกิน $max_len)"

เสร็จแล้ว

#! / bin / ทุบตี

# longest-word2: ค้นหาสตริงที่ยาวที่สุดในไฟล์สำหรับ i; ทำ

ถ้า [[ -r $i ]]; แล้ว max_word= max_len=0

สำหรับ j ใน $(สตริง $i); ทำ len=$(echo -n $j | wc -c)

ถ้า (( len > max_len )); แล้ว max_len=$len max_word=$j

fi

ทำ

echo "$i: '$max_word' (อักขระไม่เกิน $max_len)"

เสร็จแล้ว


ภาพ

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


ทำไมฉัน?

คุณอาจสังเกตเห็นว่าตัวแปร i ได้รับเลือกให้แต่ละ for ตัวอย่างลูปด้านบน ทำไม? ไม่มีเหตุผลเฉพาะเจาะจงจริงๆ นอกจากประเพณี ตัวแปรที่ใช้กับ for สามารถเป็นตัวแปรใดๆ ก็ได้ แต่ i เป็นส่วนใหญ่ รองลงมาคือ j และ k.



ภาพ

พื้นฐานของประเพณีนี้มาจากภาษาโปรแกรม Fortran ใน Fortran ตัวแปรที่ไม่ได้ประกาศที่ขึ้นต้นด้วยตัวอักษร I, J, K, L และ M จะถูกพิมพ์โดยอัตโนมัติเป็นจำนวนเต็ม ในขณะที่ตัวแปรที่ขึ้นต้นด้วยตัวอักษรอื่น ๆ จะถูกพิมพ์เป็นจำนวนจริง (ตัวเลขที่มีเศษส่วนทศนิยม) พฤติกรรมนี้ทำให้โปรแกรมเมอร์ใช้ตัวแปร I, J และ K สำหรับตัวแปรลูป เนื่องจากใช้งานน้อยกว่าเมื่อต้องการตัวแปรชั่วคราว (ซึ่งมักเป็นตัวแปรลูป)

นอกจากนี้ยังนำไปสู่การใช้ไหวพริบตาม Fortran ต่อไปนี้: “พระเจ้ามีจริง เว้นแต่จะประกาศเป็นจำนวนเต็ม”


ระบบปฏิบัติการคลาวด์คอมพิวติ้งยอดนิยมที่ OnWorks: