ในฐานะที่เป็นการเขียนโปรแกรมใน JavaScript ฉันได้สังเกตเห็นทุกสิ่งที่สามารถทำได้ด้วยคำสั่งและบล็อกสามารถทำได้ด้วยการแสดงออกเพียงอย่างเดียว ภาษาการเขียนโปรแกรมสามารถทำงานได้ดีกับนิพจน์เท่านั้นหรือไม่ และถ้าใช่ทำไมจึงมีการใช้ข้อความทั้งหมด?
ในฐานะที่เป็นการเขียนโปรแกรมใน JavaScript ฉันได้สังเกตเห็นทุกสิ่งที่สามารถทำได้ด้วยคำสั่งและบล็อกสามารถทำได้ด้วยการแสดงออกเพียงอย่างเดียว ภาษาการเขียนโปรแกรมสามารถทำงานได้ดีกับนิพจน์เท่านั้นหรือไม่ และถ้าใช่ทำไมจึงมีการใช้ข้อความทั้งหมด?
คำตอบ:
แน่ใจ วิธีที่ง่ายที่สุดคือการกำหนดค่าผลลัพธ์ให้กับทุกการสร้างที่เป็นคำสั่งในปัจจุบันและเปลี่ยนเป็นนิพจน์ ไม่จำเป็นว่ามีประโยชน์หรือมีความหมาย โอกาสที่จะได้รับเพียงอย่างเดียวคือความเรียบง่ายทางแนวคิด อย่างไรก็ตามหากคุณดำเนินการลบสิ่งต่างๆเช่นอัฒภาคและลูป (ต้องการผูกมัดผ่านโอเปอเรเตอร์และฟังก์ชั่นอื่นแทน) โปรแกรมที่ใช้คำสั่งจะกลายเป็นเรื่องน่าเกลียด
วิธีที่รุนแรงกว่า แต่มีความหมายในการทำเช่นนี้คือการออกแบบภาษาที่เกือบทุกอย่างมีค่าที่มีความหมายและใช้มันในแบบที่คุณมักจะใช้สำนวนสำหรับค่าที่มีความหมายนั้นไม่ใช่เพื่อผลกระทบอื่น ๆ ภาษาโปรแกรมที่ใช้งานได้ทำเช่นนี้ (ในระดับหนึ่งตัวอย่างเช่น Haskell มีการประกาศซึ่งไม่ใช่การแสดงออก)
งบถูกใช้เพราะในกระบวนทัศน์ที่จำเป็นมีการดำเนินงานทั่วไปจำนวนมากที่ไม่มีคุณค่าของผลลัพธ์ที่เป็นประโยชน์และเนื่องจากแนวคิดของคำสั่งต่อเนื่อง(แทนที่จะคำนวณ) เหมาะกับกระบวนทัศน์นั้นค่อนข้างดี หากส่วนใหญ่ของโปรแกรมของคุณกำลังกลายพันธุ์อยู่แทนที่จะคำนวณค่าใหม่มันไม่สมเหตุสมผลเลยที่จะต้องสร้างค่า (ผลลัพธ์ของ a for for loop คืออะไร) ในทางตรงกันข้ามเมื่อกระบวนทัศน์ทั้งหมดของคุณ (FP) ถูกสร้างขึ้นจากการคำนวณค่าผู้ที่ไม่มีค่าผลลัพธ์จะไม่ได้รับการยกเว้น: แทนที่จะให้ผลลัพธ์ที่ไม่มีความหมาย
void
และnull
/ unit
คือว่าหลังเป็นค่าและสามารถผ่านไปได้ในขณะที่void
พิเศษในที่ไม่มีค่าประเภทนั้น
ขึ้นอยู่กับวิธีที่คุณกำหนด "คำสั่ง" และ "การแสดงออก"
คำจำกัดความที่เข้มงวดมากจะแยกความแตกต่างระหว่างคำว่า "สิ่งต่าง ๆ ที่มีผลข้างเคียงและอาจเป็นค่าตอบแทน" และนิพจน์เป็น "สิ่งต่าง ๆ ที่มีค่าตอบแทน แต่ไม่สามารถมีผลข้างเคียง" ด้วยคำจำกัดความดังกล่าวโปรแกรมที่มีความหมายไม่สามารถเขียนได้หากไม่มีอย่างน้อยหนึ่งคำสั่ง (ซึ่งจะต้องประเมินการแสดงออกและส่งออกค่าที่ส่งคืน) - การแสดงออกที่บริสุทธิ์เพียงอย่างเดียวไม่สามารถโต้ตอบกับโลกภายนอกโปรแกรมได้ ภาษาเพียงอย่างเดียวยังคงบริสุทธิ์อย่างสมบูรณ์ (กล่าวคือไม่มีคำสั่งใด ๆ ) ถ้าส่วนที่ไม่บริสุทธิ์ถูกย้ายออกจากภาษาและเข้าสู่ระบบนิเวศที่สนับสนุน (ซึ่งเป็นสิ่งที่ Haskell ทำแม้ว่าภาษาจะมีคำจำกัดความและการแสดงออก) .
อย่างไรก็ตามหากคุณอนุญาตให้มีผลข้างเคียงในการแสดงออกความแตกต่างระหว่างคำสั่งและการแสดงออกกลายเป็นโดยพลการและน่าสนใจน้อยลง - แน่นอนว่าคุณสามารถประดิษฐ์ภาษาโปรแกรมที่ประกอบด้วยนิพจน์เท่านั้น เสียงกระเพื่อมส่วนใหญ่ทำงานอย่างนั้น ในสถานการณ์เช่นนี้การประเมินการแสดงออกของผลข้างเคียงของมันนั้นค่อนข้างเหมือนกับการดำเนินการคำสั่งและเราอาจโต้แย้งได้ว่าในภาษาการแสดงออกและข้อความต่าง ๆ นั้นเป็นสิ่งเดียวกัน ความแตกต่างระหว่างคำสั่งและการแสดงออกนั้นเป็นเพียงวากยสัมพันธ์
หลายภาษายังคงสร้างความแตกต่างทางวากยสัมพันธ์นี้เพราะมันมีประโยชน์ไม่ได้สำหรับเหตุผลทางเทคนิค แต่สำหรับการอ่าน ทำบางสิ่งบางอย่างเป็นสัญญาณบ่งบอกว่าคุณสนใจที่จะได้รับผลตอบแทนน้อยลงดังนั้นผลข้างเคียงของมัน; ทำให้มันเป็นคำสั่งบอกผู้อ่านว่าคุณตั้งใจที่จะทำให้เกิดผลข้างเคียงและค่าตอบแทนอาจหรืออาจไม่น่าสนใจ
ATLและXtendเป็นภาษาโปรแกรมที่ใช้งานได้ดี ภาษาที่ใช้งานได้หลายภาษานั้นใช้คำสั่งน้อย ดังนั้นใช่ภาษาการเขียนโปรแกรมสามารถทำงานได้ดีโดยไม่มีคำสั่ง ฉันคิดว่าข้อความเป็นหลายภาษาที่ถ่ายทอดจากการเขียนโปรแกรมที่จำเป็น พวกเขายังคงใช้เพราะพวกเขาเป็นที่รู้จักอย่างกว้างขวางและในบางกรณีพวกเขาทำให้รหัสอ่านง่ายขึ้น
ใช่.
ภาษาหน้าที่ (และภาษาที่ได้รับมอบหมายเดียว) ทุกอย่างเป็นนิพจน์ ตัวอย่างคือ Haskal (และ SISAL) ที่ทั้งสองถ้างบและลูปส่งกลับค่า
มีคลาสภาษาอื่น ๆ : ภาษาที่เข้าใจง่ายคือภาษาที่ประกาศ (ฉันแน่ใจว่ามีอีกหลายภาษาที่ไม่ขึ้นอยู่กับข้อความ) ภาษาเหล่านี้ไม่จำเป็นต้องมีการแสดงออก (ในความหมายเดียวกับที่คุณคิดโดยทั่วไป) คุณประกาศสิ่งที่เป็นจริงและคุณสามารถรับผลลัพธ์หลายรายการได้ prolog
หนึ่งง่ายนี่คือ