คำถามติดแท็ก dynamic-typing

Dynamic Typing เป็นคุณสมบัติของภาษาการเขียนโปรแกรมซึ่งการตรวจสอบประเภทส่วนใหญ่จะดำเนินการในเวลาทำงาน

11
ภาษาแบบไดนามิกถูกตีความเสมอหรือไม่
มองไปที่ภาษาไดนามิกส่วนใหญ่ (ถ้าไม่ใช่ทั้งหมด) (เช่น Python, PHP, Perl และ Ruby) พวกมันจะถูกตีความทั้งหมด ช่วยแก้ให้ด้วยนะถ้าฉันผิด. มีตัวอย่างของภาษาแบบไดนามิกที่ผ่านขั้นตอนการรวบรวมหรือไม่ ภาษาไดนามิกมีความเหมือนกันกับภาษาที่ตีความหรือไม่

2
ตัวเลือก / อาจจะพิมพ์มีประโยชน์ในภาษาแบบไดนามิกหรือไม่
Optionalมีประโยชน์ในวิธีที่ชัดเจนในภาษาที่พิมพ์แบบคงที่ แต่ฉันสงสัยว่ามันยังมีประโยชน์ในภาษาแบบไดนามิก โดยปกติจะไม่มีคอมไพเลอร์บอกคุณว่า "เฮ้คุณใช้สิ่งนี้Optional<String>เป็นString" ดังนั้นคุณยังต้องค้นพบข้อผิดพลาดของคุณที่รันไทม์ ฉันมีพื้นหลังการพิมพ์แบบสแตติกและจากมุมมองของฉันฉันไม่เห็นประโยชน์ของOptionalประเภทในภาษาแบบไดนามิก

10
ทำไมภาษาที่พิมพ์แบบไดนามิกไม่ให้นักพัฒนาระบุประเภท?
ภาษาที่พิมพ์แบบไดนามิกที่ฉันรู้ว่าไม่ให้นักพัฒนาระบุประเภทของตัวแปรหรืออย่างน้อยก็มีการสนับสนุนที่ จำกัด มากสำหรับสิ่งนั้น ตัวอย่างเช่น JavaScript ไม่มีกลไกใด ๆ ในการบังคับใช้ตัวแปรประเภทต่างๆเมื่อสะดวกในการใช้งาน PHP ช่วยให้คุณระบุบางชนิดของการขัดแย้งวิธี แต่มีวิธีที่จะใช้ชนิดพื้นเมือง (ไม่int, stringฯลฯ ) สำหรับข้อโต้แย้งและมีวิธีการที่จะบังคับใช้สำหรับประเภทอื่นใดนอกเหนือจากการขัดแย้งใด ในเวลาเดียวกันมันจะสะดวกที่จะมีทางเลือกที่จะระบุในบางกรณีประเภทของตัวแปรในภาษาที่พิมพ์แบบไดนามิกแทนการทำประเภทการตรวจสอบด้วยตนเอง ทำไมมีข้อ จำกัด ดังกล่าว เป็นเพราะเหตุผลด้านเทคนิค / ประสิทธิภาพ (ฉันคิดว่ามันเป็นในกรณีของ JavaScript) หรือสำหรับเหตุผลทางการเมืองเท่านั้น (ซึ่งฉันเชื่อว่าเป็นกรณีของ PHP) นี่เป็นกรณีสำหรับภาษาที่พิมพ์แบบไดนามิกอื่น ๆ ที่ฉันไม่คุ้นเคยหรือไม่ แก้ไข:ทำตามคำตอบและความคิดเห็นต่อไปนี้เป็นตัวอย่างสำหรับการชี้แจง: สมมติว่าเรามีวิธีการต่อไปนี้ใน PHP ธรรมดา: public function CreateProduct($name, $description, $price, $quantity) { // Check the arguments. if (!is_string($name)) throw new Exception('The …

3
คุณนำทางและสร้างรหัสซ้ำในภาษาไดนามิกได้อย่างไร
ฉันชอบที่การเขียน Python, Ruby หรือ Javascript ต้องใช้สำเร็จรูปน้อยมาก ฉันชอบโครงสร้างที่ใช้งานง่าย ฉันชอบไวยากรณ์ที่สะอาดและเรียบง่าย อย่างไรก็ตามมีสามสิ่งที่ฉันไม่ดีจริง ๆ เมื่อพัฒนาซอฟต์แวร์ขนาดใหญ่ในภาษาแบบไดนามิก: การนำรหัส การระบุอินเทอร์เฟซของวัตถุที่ฉันใช้ การปรับโครงสร้างใหม่อย่างมีประสิทธิภาพ ฉันได้ลองใช้ตัวแก้ไขอย่างง่าย (เช่น Vim) และ IDE (Eclipse + PyDev) แต่ในทั้งสองกรณีฉันรู้สึกว่าฉันต้องผูกมัดกับหน่วยความจำและ / หรือ "grep" ตลอดเวลาและอ่านรหัสเพื่อระบุ อินเตอร์เฟส โดยเฉพาะอย่างยิ่งเมื่อทำงานกับ codebase ขนาดใหญ่ที่มีการขึ้นต่อกันหลายครั้ง สำหรับการเปลี่ยนโครงสร้างตัวอย่างเช่นการเปลี่ยนชื่อวิธีการนั้นจะขึ้นอยู่กับคุณภาพของการทดสอบหน่วยของฉันอย่างมาก และถ้าฉันพยายามแยกการทดสอบหน่วยของฉันโดย "ตัดพวกมันออก" ส่วนที่เหลือของแอปพลิเคชั่นนั้นไม่รับประกันว่าส่วนต่อประสานของต้นขั้วของฉันจะยังคงทันสมัยอยู่กับวัตถุที่ฉันกำลังถูอยู่ ฉันแน่ใจว่ามีวิธีแก้ไขปัญหาสำหรับปัญหาเหล่านี้ คุณทำงานอย่างมีประสิทธิภาพใน Python, Ruby หรือ Javascript ได้อย่างไร

9
ภาษาแบบไดนามิก vs แบบคงที่พิมพ์สำหรับเว็บไซต์ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา คำสั่งนี้แสดงให้เห็นว่าภาษาที่พิมพ์แบบคงที่ไม่เหมาะสำหรับเว็บไซต์: ฉันจะเปรียบเทียบมันกับการสร้างเว็บไซต์ เมื่อแสดงผลหน้าเว็บบ่อยครั้งที่คุณมีองค์ประกอบจำนวนมากที่โต้ตอบกับหน้าเว็บ คุณมีปุ่มตรงนี้และวิดเจ็ตเล็ก ๆ ตรงนั้นและมันมีหลายสิบปุ่มบนหน้าเว็บเช่นเดียวกับหน้าเว็บหลายสิบหรือหลายร้อยหน้าบนเว็บไซต์ของคุณที่เป็นแบบไดนามิกทั้งหมด ด้วยระบบที่มีพื้นที่ผิวขนาดใหญ่เช่นนั้นการใช้ภาษาที่พิมพ์แบบสแตติกจะไม่ยืดหยุ่น ฉันพบว่ามันน่าเจ็บปวดที่จะเขียนโปรแกรมใน Scala และแสดงหน้าเว็บด้วยเมื่อฉันต้องการกดปุ่มต่างๆ หากทั้งระบบจะต้องสอดคล้องกันเช่นเดียวกับทั้งระบบจะต้องพิมพ์การตรวจสอบเพื่อให้สามารถเลื่อนปุ่มไปรอบ ๆ ฉันคิดว่ามันไม่ยืดหยุ่นจริง ๆ ที่มา: http://www.infoq.com/interviews/kallen-scala-twitter ถูกต้องหรือไม่ ทำไมหรือทำไมไม่?

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

4
การพัฒนาภาษาแบบไดนามิก
ฉันได้สร้างคอมไพเลอร์เขียนด้วยมือหลายภาษาสำหรับภาษาที่ง่ายมาก แต่ตอนนี้ฉันต้องการลองพัฒนาภาษาไดนามิกเช่นเดียวกับ Python หรือ Ruby แบบง่าย อย่างไรก็ตามมันเป็นเรื่องง่ายสำหรับฉันที่จะคาดศีรษะว่าคอมไพเลอร์ทำงานอย่างไร คอมไพเลอร์ดั้งเดิมเพิ่งแปล แต่ฉันไม่สามารถทำได้ถ้าภาษาเป็นแบบไดนามิก ฉันต้องเขียนล่ามหรือ VM ที่คอยติดตามข้อมูล ณ รันไทม์และทำให้ฉันทำงานได้มากขึ้น ในระยะสั้นมีทรัพยากรใดบ้างที่ฉันควรตรวจสอบเพราะฉันรู้ว่าคอมไพเลอร์ทำงานอย่างไร แต่ต้องการย้ายไปที่การสร้างล่ามหรือไม่ มี VMs บางส่วนสำหรับภาษาไดนามิก แต่ฉันไม่มีปัญหากับการเปิดใช้งานเอง ทั้งหมดนี้เป็นเพียงประสบการณ์ส่วนตัวของฉัน ฉันกำลังหาข้อมูลเกี่ยวกับวิธีการเปลี่ยนจากคอมไพเลอร์เป็นล่าม หากฉันได้รวบรวมคอมไพเลอร์สำหรับภาษา X แล้ว แต่ตอนนี้สิ่งที่ต้องเขียนล่ามสิ่งที่ต้องทำและมีทรัพยากรใดบ้างที่ผ่านกระบวนการนี้ ฉันไม่ต้องการทรัพยากรในวงกว้างหรือที่เป็นนามธรรมซึ่งครอบคลุมการทำงานของคอมไพเลอร์หรือเครื่องเสมือน ฉันมีหนังสือเรียนมากมายในวิชานี้ แหล่งข้อมูลทั้งหมดที่ฉันพบทางออนไลน์ถือว่าคุณมีประสบการณ์ 0 อย่างและทำให้คุณเริ่มต้นด้วยการวิเคราะห์คำหรือวากยสัมพันธ์หรือพวกมันมีความเป็นนามธรรมมาก ฉันมีคอมไพเลอร์ที่ใช้งานได้ แต่ตอนนี้ฉันต้องการเปลี่ยนให้เป็นล่ามและเพิ่มคุณสมบัติแบบไดนามิกให้กับภาษา ฉันไม่พบทรัพยากรในกระบวนการนี้อาจมีข้อ จำกัด ในขอบเขตหรือทรัพยากรใน "แบ็คเอนด์" ของล่ามโดยไม่ต้องมีทฤษฎีมากเกินไปซึ่งเป็นสาเหตุที่ฉันโพสต์ที่นี่

2
อะไรคือความสัมพันธ์ระหว่าง Dynamic Language Runtime และ C # 4.0?
สมมติว่าฉันต้องการสร้างตัวแปลภาษา / ตัวแปลภาษาแบบไดนามิกซึ่งอาจเป็นล่าม Scheme บนแพลตฟอร์ม. NET ที่มีอยู่ในปัจจุบัน ฉันจะดีกว่าถ้าใช้Dynamic Language Runtime (DLR) หรือใช้ C # 4.0 เพื่อใช้คุณสมบัติแบบไดนามิกของภาษาของฉันหรือไม่ หรือฉันต้องการทั้งสองอย่าง? ฉันรู้ว่ามีได้รับงานอื่น ๆ ที่ทำในพื้นที่นี้โดยเฉพาะอย่างยิ่งกับIronSchemeและIronPython ทั้งสองภาษาใช้ DLR ฉันเชื่อว่า IronPython ใช้เวอร์ชั่นล่าสุดของ DLR (ซึ่งเป็นอายุประมาณหนึ่งปี) ในขณะที่ IronScheme ใช้ต้น fork ที่มีการดัดแปลงแก้ไขอย่างรวดเร็วของเวอร์ชันแรก ๆ ของ DLR แต่ C # 4.0 ไม่สามารถใช้ได้เมื่อคอมไพเลอร์เหล่านี้ถูกสร้างขึ้น ฉันเคยเห็น Rob Conery ทำงานกับMassiveโดยใช้คุณสมบัติแบบไดนามิกของ C # 4.0 มันค่อนข้างน่าประทับใจ แต่ C …

4
การคิดเกี่ยวกับรูปแบบการออกแบบและการปฏิบัติของ OOP เปลี่ยนไปอย่างไรในภาษาที่มีการเปลี่ยนแปลงและมีการพิมพ์น้อย
มีคำถามที่เป็นประโยชน์อยู่แล้วในบรรทัดเหล่านี้ (" รูปแบบการออกแบบที่ไม่ใช่ OOP? ") แต่ฉันอยากรู้มากขึ้นเกี่ยวกับมุมมองการเปลี่ยนผ่านสำหรับใครบางคนที่เพิ่งเริ่มต้นด้วยภาษาแบบไดนามิกและพิมพ์อ่อนแอ นั่นคือ: สมมติว่าฉันได้รับการเขียนโปรแกรมใน C ++, C # หรือ Java เป็นเวลาหลายปีและดูดซึมจำนวนมากของภูมิปัญญาตามสายของรูปแบบการออกแบบ GoF ฟาวเลอร์ของรูปแบบของ Enterprise Application สถาปัตยกรรม , หลักการมูลฝอยฯลฯ ตอนนี้ฉัน' การเล่นน้ำใน Ruby, Python, JavaScript และอื่น ๆ และสงสัยว่าความรู้ของฉันใช้อย่างไร สันนิษฐานว่าฉันสามารถทำการแปลโดยตรงในหลายกรณี แต่เกือบจะแน่นอนว่าจะไม่ได้รับประโยชน์เต็มที่จากการตั้งค่าใหม่ของฉัน การพิมพ์แบบเป็ดเพียงอย่างเดียวทำให้ความคิดแบบอินเทอร์เฟซบนหัวของฉันเยอะ อะไรที่ยังคงเหมือนเดิม? การเปลี่ยนแปลงอะไร มีหลักการชี้แนะเช่น SOLID หรือรูปแบบที่เป็นที่ยอมรับ (อาจเป็นเรื่องใหม่ทั้งหมด) ที่มือใหม่ควรรู้หรือไม่?

6
การพิมพ์สแตติกมีประโยชน์จริง ๆ ในโครงการขนาดใหญ่อย่างไร
ในขณะที่อยากรู้อยากเห็นในหน้าหลักของเว็บไซต์ภาษาการเขียนโปรแกรมสคริปต์ฉันพบข้อความนี้: เมื่อระบบมีขนาดใหญ่เกินไปที่จะเก็บไว้ในหัวของคุณคุณสามารถเพิ่มประเภทคงที่ สิ่งนี้ทำให้ฉันจำได้ว่าในสงครามศาสนาจำนวนมากระหว่างภาษาแบบคงที่ภาษาที่รวบรวม (เช่น Java) และภาษาแบบไดนามิกที่ถูกตีความ (ส่วนใหญ่เป็นภาษาไพ ธ อนเนื่องจากมีการใช้มากกว่า แต่เป็น "ปัญหา" ที่ใช้ร่วมกันระหว่างภาษาสคริปต์ส่วนใหญ่) แฟน ๆ ที่พิมพ์ภาษามากกว่าภาษาที่พิมพ์แบบไดนามิกคือพวกเขาไม่ได้ปรับขนาดให้ดีขึ้นสำหรับโครงการขนาดใหญ่เพราะ "วันหนึ่งคุณจะลืมฟังก์ชั่นกลับมาและคุณจะต้องค้นหามันในขณะที่พิมพ์ภาษาแบบคงที่ทุกอย่าง มีการประกาศอย่างชัดเจน " ฉันไม่เคยเข้าใจข้อความเช่นนี้ ความซื่อสัตย์แม้ว่าคุณจะประกาศฟังก์ชั่นการส่งคืนคุณสามารถและจะลืมมันหลังจากที่คุณเขียนโค้ดหลายบรรทัดและคุณจะต้องกลับไปที่บรรทัดที่ประกาศไว้โดยใช้ฟังก์ชันการค้นหาของ แก้ไขข้อความของคุณเพื่อตรวจสอบ นอกจากนี้เมื่อฟังก์ชั่นถูกประกาศด้วยการtype funcname()...รู้ทันtypeคุณจะต้องค้นหาแต่ละบรรทัดที่เรียกใช้ฟังก์ชั่นเพราะคุณรู้เพียงว่าfuncnameในขณะที่ในไพ ธ อนและสิ่งที่คุณชอบเพียงแค่ค้นหาdef funcnameหรือfunction funcnameเกิดขึ้นเพียงครั้งเดียวที่ การประกาศ ยิ่งกว่านั้นด้วย REPLs การทดสอบฟังก์ชั่นการกลับมาของอินพุตที่แตกต่างกันเล็กน้อยในขณะที่ภาษาที่พิมพ์แบบคงที่คุณจะต้องเพิ่มโค้ดบางบรรทัด ดังนั้นนอกเหนือจากการทราบประเภทการส่งคืนของฟังก์ชันที่เห็นได้ชัดว่าไม่ใช่จุดแข็งของภาษาที่พิมพ์แบบคงที่การพิมพ์แบบคงที่มีประโยชน์มากในโครงการขนาดใหญ่อย่างไร

5
ภาษาแบบคงที่และแบบไดนามิกสามารถถูกมองว่าเป็นเครื่องมือที่แตกต่างกันสำหรับงานประเภทต่างๆหรือไม่?
ใช่มีการถามคำถามที่คล้ายกัน แต่มักจะมีจุดประสงค์ในการค้นหาว่า 'แบบไหนดีกว่ากัน' ฉันถามเพราะฉันเข้ามาเป็นผู้พัฒนา JavaScript เป็นหลักและไม่มีประสบการณ์ในการเขียนภาษาแบบคงที่ ทั้งๆที่สิ่งนี้ฉันเห็นคุณค่าในการเรียนรู้ C สำหรับการจัดการความต้องการการดำเนินงานที่ระดับต่ำกว่าของรหัส (ซึ่งฉันคิดว่ามีหลายสิ่งที่จะทำอย่างไรกับ static vs dynamic ที่ระดับคอมไพเลอร์) แต่สิ่งที่ฉันพยายามคาดศีรษะ มีบริบทเฉพาะของโครงการหรือไม่ (อาจมีการดำเนินการเกี่ยวกับข้อมูลแบบไดนามิกบางประเภท) ที่เกี่ยวข้องกับสิ่งอื่นนอกเหนือจากประสิทธิภาพที่เหมาะสมกับ Java หรือ C # เทียบกับ Python

3
ฉันสามารถใช้อะไรแทนส่วนต่อประสานใน Ruby (หรือภาษาไดนามิกอื่น ๆ ) ได้บ้าง
เป้าหมายของฉันคือการกำหนดสัญญาระหว่างชั้นเรียน ฉันชอบการพิมพ์เป็ดและทั้งหมด แต่ฉันต้องการกำหนดอินเทอร์เฟซระหว่างเลเยอร์ต่าง ๆ ของแอปพลิเคชันของฉันเพื่อกำหนดอย่างชัดเจนซึ่งเป็นวิธีการโทรจากภายนอกและเป็นวิธีการเสริมที่เลเยอร์อื่นไม่ควรใช้ . ตัวอย่างเช่นใน Java ฉันสามารถกำหนดอินเตอร์เฟส Persistor ด้วยวิธีการเช่น get () และ save () จากนั้นกำหนดคลาส JdbcPersistor ด้วยวิธีการทั้งหมดที่ฉันต้องการเพื่อคงอยู่ในฐานข้อมูล และบางที RestPersistor อีกอันที่มีวิธีการอื่นสำหรับการบันทึกใน restserver ระยะไกล ฉันไม่ได้ขออินเทอร์เฟซใน Ruby เพียงเพื่อให้รู้ว่ามีวิธีที่เป็นระเบียบจะทำให้ความแตกต่างนี้หรือไม่ ฉันชอบทับทิม แต่ฉันทำงานเฉพาะในโครงการขนาดเล็กเท่านั้น

13
ทางเลือกที่พิมพ์แบบคงที่เพื่อ JavaScript บนหน้าเว็บจะเป็นประโยชน์?
การตั้งค่าสำหรับการพิมพ์แบบไดนามิกและแบบคงที่ส่วนใหญ่เป็นเรื่องของรสนิยมและผู้คนที่แตกต่างกันพบว่าพวกเขาเหมาะสมมากหรือน้อยในสถานการณ์ที่แตกต่างกัน คำถามของฉันคือจะเป็นไปได้หรือไม่ที่จะมีทางเลือกให้พิมพ์ JavaScript เพื่อการเพิ่มหน้าเว็บฝั่งไคลเอ็นต์ ฯลฯ ?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.