Perl และ Java มีความคล้ายคลึงกันอย่างไร? [ปิด]


14

ฉันมีความคิดว่าฉันกำลังเรียนรู้ Java เป็นภาษาที่สองของฉัน (ฉันเป็นนักพัฒนา Perl) แต่จากการอ่านบทเรียนออนไลน์เล็ก ๆ น้อย ๆ ฉันไม่สามารถหาความคล้ายคลึงกันระหว่างทั้งสองได้ ฉันจะเข้าใจอะไรได้ง่ายเมื่อเรียนรู้ Java


เริ่มต้นด้วยการตัดสินใจว่า "ฉันชอบภาษานี้!" เมื่อใดก็ตามที่คุณพบเจอกับสิ่งที่ยากเพียงจำการตัดสินใจของคุณและช่วยตัวคุณเองด้วยการกัดฟันและถอนผม

1
การอ่านที่แนะนำ: Gorilla vs. Shark

คำตอบ:


32

Perl เป็นภาษาโปรแกรมระดับสูง, มีวัตถุประสงค์ทั่วไป, แบบหลายกระบวนทัศน์, ตีความ, แบบไดนามิก Java เป็นภาษาระดับสูงที่มีวัตถุประสงค์ทั่วไปส่วนใหญ่เป็นกระบวนทัศน์แบบเดี่ยวภาษาการเขียนโปรแกรมแบบคงที่

ดังนั้นทั้งสองระดับสูง :

ภาษาโปรแกรมระดับสูงเป็นภาษาโปรแกรมที่มีนามธรรมสูงจากรายละเอียดของคอมพิวเตอร์

และวัตถุประสงค์ทั่วไป :

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

โดยพื้นฐานแล้วสิ่งนี้หมายความว่าทุกสิ่งที่คุณสามารถทำได้ด้วย Perl คุณสามารถทำได้ด้วย Java และเป็น @KyleHodgson กล่าวทั้งไวยากรณ์ของพวกเขาได้รับจาก C และ C ++ และไวยากรณ์สำหรับสิ่งที่ง่ายๆเช่นforloops และifงบเป็นหลักเดียวกัน - และ @DipanMehta บันทึกทั้งมีการเก็บขยะ และแน่นอนว่าทั้งสองเป็นที่นิยมอย่างมากและมีชุมชนที่คึกคัก

แต่นั่นคือสิ่งที่ความคล้ายคลึงกันหยุด Perl เป็นกระบวนทัศน์หลากหลายที่สนับสนุนกระบวนทัศน์การเขียนโปรแกรมที่หลากหลาย:

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

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

และที่คุณรู้ว่า Perl ถูกตีความในขณะที่ Java เป็น ... ดี ... เป็นสัตว์ที่แตกต่างกันอย่างสิ้นเชิง ใน Java คุณเขียนรหัสของคุณตามที่คุณต้องการใน Perl และจากนั้นคุณรวบรวมมัน ผลที่ได้คือไม่ได้เป็นปฏิบัติการ แต่Java bytecode รูปแบบตัวกลางนี้จะถูกดำเนินการ (ในที่สุด!) ในJava Virtual Machineซึ่งค่อนข้างคล้ายกับล่าม Perl JVM จะต้องติดตั้งก่อนสำหรับโปรแกรม Java เพื่อวิ่ง simirarly กับวิธีที่คุณจะต้องติดตั้งล่าม Perl เพื่อรันสคริปต์ Perl 2

สิ่งที่สำคัญที่สุดที่ต้องจำคือการคอมไพล์ไปยังขั้นตอน bytecode ที่มาจากพื้นหลัง Perl: ทุกครั้งที่คุณทำการเปลี่ยนแปลงกับซอร์สไฟล์ Java คุณต้องทำการคอมไพล์ใหม่อีกครั้ง มันอาจฟังดูบ้าในตอนแรก แต่การคอมไพล์มีผลลัพธ์ที่ดีมาก: โค้ดของคุณถูกตรวจสอบหาข้อผิดพลาดที่หลากหลายในขั้นตอนนี้และคอมไพเลอร์ปฏิเสธที่จะเสร็จสิ้นกระบวนการหากมีและบางครั้งจะช่วยให้คุณระบุข้อผิดพลาดด้วย ข้อความที่เป็นประโยชน์ (มีข้อความอยู่เสมอ แต่บางครั้งก็มีประโยชน์เท่านั้น)

ซึ่งนำเราไปสู่ความแตกต่างที่สำคัญล่าสุด:

Perl เป็นแบบไดนามิก3 :

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

และพิมพ์แบบไดนามิก4 :

ภาษาการเขียนโปรแกรมถูกกล่าวถึงว่าพิมพ์แบบไดนามิกเมื่อการตรวจสอบชนิดส่วนใหญ่ดำเนินการในเวลาทำงานซึ่งต่างจากการรวบรวมเวลา

และ Java ถูกพิมพ์แบบสแตติก :

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

หมายความว่าใน Java คุณต้องประกาศชนิดของตัวแปรและวิธีการก่อนที่จะใช้ มีความแตกต่างอื่น ๆ แต่ฉันไม่ต้องการที่จะทำให้เสียความสนุกในการค้นพบพวกเขาด้วยตัวเอง :)

และในที่สุดก็มีความแตกต่างที่สำคัญอย่างหนึ่ง: Java เป็นภาษาที่รักของสถาบันการศึกษา5 และโลกธุรกิจในขณะที่คุณจะไม่ค่อยพบ Perl ในสภาพแวดล้อมทางวิชาการอีกต่อไป (ที่ฉันพบเธอครั้งแรก) และมุมมองด้านอาชีพ (ยังมีงานไม่มากนัก แต่ไม่มีที่ไหนใกล้เคียงกับภาษา Java, .Net หรือ PHP) ฉันจะไม่แสดงความคิดเห็นเกี่ยวกับเหตุผลฉันเพียงแค่ระบุ (เศร้า) ข้อเท็จจริง เนื่องจากคุณยังเด็กมากการเรียนรู้ Java คุณจะมีความพร้อมมากขึ้นสำหรับปริญญาวิทยาศาสตร์คอมพิวเตอร์ถ้าคุณเลือกที่จะทำตามเส้นทางนั้น

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

1 "Tim Toady"

2ชุมชน Perl เป็นอย่างแข็งขันสำรวจ possibillity ของเครื่องเสมือน Perl ผ่านนกแก้ว

3แบบไดนามิกไม่ได้หมายถึงการพิมพ์แบบไดนามิกเสมอไป

4 Perl ถูกพิมพ์แบบไดนามิกสำหรับประเภทที่ผู้ใช้กำหนด, พิมพ์แบบคงที่เกี่ยวกับการจำแนกอาร์เรย์, แฮช, สเกลาร์, และรูทีนย่อยและพิมพ์อย่างรุนแรงผ่านทางuse strictดังนั้นโดยพื้นฐานแล้วมันเป็นภาษาของระบบตัวแปรชนิดต่างๆ พิมพ์

5ไปยังจุดของการละเมิดที่เป็นโจ Spolsky เขียนในมีดหมอ JavaSchools


6
เมื่อเปรียบเทียบกับ Perl แล้ว Java ไม่ใช่ภาษาระดับสูง มันต้องใช้โค้ด Java มากขึ้นในการเขียนบางอย่างมากกว่าโค้ด Perl
tchrist

1
@tchrist จำนวนของรหัสเกี่ยวข้องกับว่าภาษาในระดับสูงหรือระดับที่สูงกว่า / ต่ำกว่าภาษาอื่นคืออะไร?
yannis

1
@YannisRizos นั่นตอบง่ายมาก หากใช้รหัสมากกว่าแสดงว่าคุณไม่ได้จัดการกับเลเยอร์นามธรรมที่สูงพอ ตัวอย่างหนึ่งที่เห็นได้ชัดคือการจัดการกับสตริงซึ่งหลบของ Java มันไม่สนับสนุนแนวคิดระดับสูงของจุดโค้ด Unicode ที่เป็นนามธรรมยกเว้นในเอนจิ้น regex ใน Java 7 ซึ่งทำให้ malarkey เป็นจำนวนมากเนื่องจากเปรียบเทียบกับภาษา Java ระดับต่ำกับ Perl
tchrist

@tchrist ความเป็นส่วนตัวของคำศัพท์ไม่อนุญาตให้มีพื้นที่มากพอสำหรับการเปรียบเทียบอย่างมีเหตุผลบรรทัดนั้นพร่ามัวเกินไปและทั้งสองภาษามีคุณลักษณะที่หลากหลายมากบางอันอยู่ในระดับสูงและต่ำ ดังนั้นฉันจะคิดว่าพวกเขาอยู่ในระดับเดียวกันและไม่ต้องกังวลกับมันมากนัก ฉันมีการสนทนาที่คล้ายกันที่นี่ซึ่งเป็นแรงบันดาลใจให้ฉันไม่แพ้ภาษาใด ๆ เมื่อเทียบกับการเปรียบเทียบ;)
yannis

@YannisRizos คุณไม่สามารถหาแนวคิดระดับสูงใน Java ที่ Perl ขาด แต่คุณสามารถค้นหาแนวคิดระดับสูงจำนวนมากใน Perl ที่ Java ขาด ดังนั้น Perl เป็นระดับที่สูงขึ้น Perl มีพอยน์เตอร์ของฟังก์ชัน Java ไม่ได้ Perl มีตัวดำเนินการมากไป Java ไม่ได้ Perl มี destructic destructor; Java ไม่ได้ Perl สามารถโอเวอร์โหลดฟังก์ชั่นตามประเภทผลตอบแทน; Java ไม่สามารถ ฉันสามารถไปทางนี้เป็นเวลานาน แน่นอนคุณจะยังคง 'รู้สึก' แต่ส่วนใหญ่คุณพอใจและด้วยเหตุผลใดก็ตาม แต่มันไม่ได้เกิดจากการวิเคราะห์อัตนัย
tchrist

2

พวกเขาทั้งคู่ใช้ C เช่นไวยากรณ์ - อัฒภาค, เครื่องหมายปีกกาและสิ่งที่คล้ายกัน โดยส่วนตัวเมื่อฉันพยายามเปลี่ยนจาก Perl เป็น Java เมื่อหลายปีก่อนสิ่งที่ยิ่งใหญ่ที่สุดที่ทำให้ฉันสะดุดคือการเขียนโปรแกรมเชิงวัตถุ ฉันพัฒนาวัตถุบางอย่างใน Perl แต่มันทำให้ฉันปวดหัวเพื่อลองจินตนาการถึงชีวิตในราชอาณาจักรคำนาม


@ ดาวน์โหวตทำไม (ฉันไม่ได้รักกับคำตอบเพียงแค่อยากรู้ว่าสิ่งที่คุณพบว่ามีปัญหามาก)
Kyle Hodgson

1

การแทงด้วยคำตอบอื่นเนื่องจากคำตอบที่เลือกไว้ในปัจจุบันดูเหมือนจะเน้นไปที่ความแตกต่างระหว่างทั้งสอง (จริง ๆ แล้วไม่มีความคล้ายคลึงกันระหว่าง Perl และ Java)

ความคล้ายคลึงกัน

  • พวกเขาทั้งสองเหมือน C (พวกเขามีห่วงและวงเล็บและกึ่งทวิภาค)
  • พวกเขามีความจำเป็นอย่างยิ่ง
  • ไม่สร้างไบนารีที่รวบรวมไว้
  • พวกเขาทั้งคู่เป็นผู้ใหญ่มาก
  • พวกเขาทั้งสองได้รับการทดสอบการต่อสู้ในองค์กร (Perl มากกว่าเป็น ops glue และ Java เป็นแอพพลิเคชั่น / บริการ)
  • พวกเขาทั้งสองได้รับความนิยม
  • พวกเขาทั้งสองรองรับการวางแนววัตถุ
  • พวกเขาทั้งสองมีกรอบงานมากมาย
  • พวกเขาทั้งสองมีหนังสือที่ตีพิมพ์เกี่ยวกับพวกเขา
  • พวกเขาทั้งสองระดับสูงกว่า C / ชุมนุม
  • พวกเขาทั้งคู่ "ช้า" (สำหรับสถานการณ์ที่เฉพาะเจาะจงต่าง ๆ ของช้าในที่ไม่เป็น C / แอสเซมบลี)
  • พวกเขาทั้งสองจัดการหน่วยความจำโดยอัตโนมัติ ("เก็บขยะ")
  • ไม่ใช่ทั้งเท่และเท่ของฤดูร้อนปี 2012
  • พวกเขาทั้งสองยึดที่มั่นในชุมชนโอเพนซอร์ส
  • พวกเขามีทั้งสำหรับแพลตฟอร์มจำนวนมาก

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.