C # ดูเหมือนว่าจะเป็นที่นิยมในวันนี้ ฉันได้ยินมาว่าวากยสัมพันธ์มันเกือบจะเหมือนกับจาวา Java และ C ++ มีอยู่เป็นเวลานาน ฉันควรเลือก C # บน Java และ C ++ ด้วยเหตุผลใดบ้าง
C # ดูเหมือนว่าจะเป็นที่นิยมในวันนี้ ฉันได้ยินมาว่าวากยสัมพันธ์มันเกือบจะเหมือนกับจาวา Java และ C ++ มีอยู่เป็นเวลานาน ฉันควรเลือก C # บน Java และ C ++ ด้วยเหตุผลใดบ้าง
คำตอบ:
คำถามควรเป็น "ภาษาใดที่เหมาะกับการพัฒนาแอพพลิเคชั่นทั่วไปที่ทันสมัยกว่า"
แก้ไข: ฉันพูดถึงความคิดเห็นด้านล่างบางส่วน ข้อสังเกตเล็ก ๆ น้อย ๆ : พิจารณาว่าเมื่อคุณมีหลายสิ่งหลายอย่างเช่นสำนวนมันแตกต่างอย่างมากจากการนำไปใช้หรือดาวน์โหลดและใช้มันด้วยตัวคุณเองทุกครั้ง เกือบทุกอย่างสามารถใช้งานได้ในภาษาเหล่านี้ คำถามคือ - ภาษาใดที่ให้คุณด้วย
ดังนั้นปิดส่วนหัวของฉัน (ข้อโต้แย้งบางอย่างใช้กับทั้งสองภาษา) ...
this
อาร์กิวเมนต์ตัวพิมพ์แบบคงที่) และดังนั้นจึงสร้างความสัมพันธ์แบบไดนามิกและมีความยืดหยุ่นมากขึ้นระหว่างชั้นเรียน แก้ไขหากคุณไม่ทราบความหมายของสิ่งนี้จากนั้นลองกำหนดวิธีสมาชิกให้เป็นโมฆะและยอมรับโมฆะเป็นvoid (*ptr)()
ตัวแปร ผู้ได้รับมอบหมาย C # พกthis
ตัวชี้ไปด้วย แต่ผู้ใช้ไม่จำเป็นต้องสนใจสิ่งนั้นเสมอไป พวกเขาสามารถกำหนดvoid()
วิธีการเรียนให้void()
ผู้แทนคนอื่น ๆusing
คำสั่ง) Java 7 จะให้การสนับสนุนเช่นนี้ แต่ C # มีมาเป็นเวลานานyield
ข้อความthis
ตัวชี้และผูกวิธีที่ทำกับตัวชี้ฟังก์ชันทั่วไป (เช่นไม่ได้อยู่ในคลาสเดียวกัน) นั่นหมายความว่าไม่มีวิธีดั้งเดิมที่จะทำ ใน C # คุณจะได้รับฟรี คุณไม่จำเป็นต้องรู้ว่ามันทำงานอย่างไรthis
ตัวชี้using
คำสั่งอย่างเห็นได้ชัดพร้อมกับห่อ IDisposable เป็นตัวอย่างที่ดีของ RAII ดูลิงค์นี้ พิจารณาว่าคุณไม่ต้องการ RAII มากเท่า C # เหมือนกับ C ++ เพราะคุณมี GC สำหรับเวลาที่คุณต้องการคุณสามารถใช้using
คำสั่งได้อย่างชัดเจน เตือนความทรงจำอีกเล็กน้อย: การเพิ่มหน่วยความจำเป็นกระบวนการราคาแพง GC มีข้อได้เปรียบด้านประสิทธิภาพในหลายกรณี (โดยเฉพาะเมื่อคุณมีหน่วยความจำมาก) หน่วยความจำจะไม่รั่วไหลออกมาและคุณจะไม่ต้องเสียเวลากับการจัดสรรคืนมากนัก ยิ่งกว่านั้นการจัดสรรก็เร็วขึ้นเช่นกันเนื่องจากคุณไม่ได้จัดสรรหน่วยความจำทุกครั้งเพียงครั้งเดียว การเรียกnew
เป็นเพียงการเพิ่มตัวสุดท้ายวัตถุตัวชี้new
และdelete
ซึ่งมักจะนำไปสู่ข้อผิดพลาดที่นี่และที่นั่นหรือ (ด้วย C ++ 11) คุณสามารถใช้ตัวชี้อัตโนมัติได้ แต่อย่าลืมว่าพวกเขาเพิ่มจำนวนมาก ของเสียงเพื่อรหัส ดังนั้น GC ยังคงมีขอบตรงนั้นWindows เป็นระบบปฏิบัติการที่มีอำนาจเหนือคอมพิวเตอร์ไคลเอนต์ ที่ดีที่สุดของกรอบ GUI สำหรับการใช้งาน Windows เป็น Winforms และ WPF ร่วมกับ.NET Framework การเขียนโปรแกรมภาษาที่ดีที่สุดในการทำงานกับ.NET Frameworkและ API มันคือC # Java ไม่ใช่ทางเลือกสำหรับสิ่งนี้ และ C ++ เป็นภาษาที่เก่ากว่าโดยไม่มีการจัดการหน่วยความจำอัตโนมัติ C # คล้ายกับ C ++ แต่มีการจัดการหน่วยความจำอัตโนมัติและคุณไม่ต้องทำงานกับพอยน์เตอร์ซึ่งทำให้คุณมีประสิทธิผลมากขึ้น C ++ ยังคงเป็นตัวเลือกที่ดีที่สุดสำหรับบางกรณี แต่ไม่ใช่สำหรับแอปพลิเคชันฐานข้อมูลที่มีรูปแบบเข้มข้นซึ่งเป็นเรื่องปกติในธุรกิจ
หากคุณคุ้นเคยกับการทำงานในสภาพแวดล้อม Windows และด้วย C # คุณจะต้องลงทุนน้อยที่สุดเพื่อเรียนรู้ IIS สำหรับการเขียนโปรแกรมเซิร์ฟเวอร์และ Windows Server สำหรับการดูแลขั้นพื้นฐาน
หากคุณกำลังพัฒนาซอฟต์แวร์ที่กำลังจะถูกปรับใช้ในเครือข่ายของ บริษัท อาจเป็นไปได้ว่าพวกเขาใช้สภาพแวดล้อมแบบศูนย์กลางของ Windows โดยใช้ Windows Server ที่มี Active Directory ในสภาพแวดล้อมเช่นนั้นการรวมและปรับใช้โซลูชันที่เกิดขึ้นในC #และ. NET Frameworkนั้นง่ายขึ้น
ส่วนตัวแล้วฉันเป็นนักพัฒนา Java ไม่ใช่นักพัฒนา C # แต่ฉันทำงานกับเว็บ ฉันจะเปลี่ยนเป็น C # หากฉันพัฒนาแอปพลิเคชั่นเครือข่ายสำหรับเครือข่าย Windows แต่ฉันชอบเว็บเซิร์ฟเวอร์ที่ใช้ Java สำหรับ Linux ฉันจะเลือก C ++ สำหรับระบบฝังตัวเพราะฉันไม่ได้พึ่งพาหลายคน
ใช่C #เป็นภาษาที่ดีขึ้นด้วยคุณสมบัติที่ทันสมัยมากขึ้นกว่า C ++ และ Java แต่ที่ไม่ได้สิ่งที่สำคัญที่สุดสำหรับการเลือกC #
สภาพแวดล้อมสำหรับซอฟต์แวร์ของคุณเป็นสิ่งสำคัญที่สุดสำหรับการเลือกC # ถ้าคุณทำงานในสภาพแวดล้อมที่มีลูกค้าของ Windows, Windows เซิร์ฟเวอร์ Active Directory, IISและอาจSQL Serverแล้วC #เป็นภาษาไกลที่ดีที่สุดกับ.NET Framework
หากคุณทำงานในสภาพแวดล้อม Unix ด้วยเช่นบริการเว็บ Java จะเป็นทางเลือกของฉัน และถ้าคุณทำงานกับระบบฝังตัวหรือต้องรวมเข้ากับอุปกรณ์ฮาร์ดแวร์C ++จะเป็นตัวเลือกที่ดี
C # และ Java
C # เป็นภาษาที่ดีมากถ้า:
C # เป็นภาษาที่ดีกว่า Java ในรูปแบบต่างๆ (ไวยากรณ์ที่ดีขึ้นสำหรับคุณสมบัติประเภทค่า Generic reified ฯลฯ ) ฉันชอบ C # เป็นภาษาจาวา แต่ในรูปแบบที่ยิ่งใหญ่ของสิ่งที่พวกเขาเป็นภาษาที่ค่อนข้างคล้ายกันและเหมาะสำหรับการใช้งานที่คล้ายกัน
ในทางกลับกัน Java มีข้อได้เปรียบที่สำคัญเช่นกัน:
ดังนั้น Java vs. C # เป็นสายที่ค่อนข้างใกล้เคียงและจริงๆมันลงมาไม่ว่าคุณต้องการอยู่ในค่าย Microsoft หรือค่าย Open Source / cross-platform
ส่วนตัวฉันชอบ Java เพราะ:
C / C ++
C / C ++ นั้นเป็นสัตว์ที่แตกต่างกันโดยสิ้นเชิง ฉันจะไม่แนะนำสำหรับการพัฒนาแอพพลิเคชั่นวัตถุประสงค์ทั่วไปในปัจจุบันด้วยเหตุผลดังต่อไปนี้:
อย่างไรก็ตามมันเป็นตัวเลือกที่ยอดเยี่ยมในโดเมนพิเศษจำนวน จำกัด โดยเฉพาะอย่างยิ่ง:
ดังนั้นโดยทั่วไป C / C ++ เป็นตัวเลือกที่ดีถ้าหากคุณให้ความสำคัญกับโดเมนใดโดเมนหนึ่งที่เหมาะสมอย่างยิ่ง
I heard that syntactically they are almost the same.
syntactically? ใครให้ลิงบินเกี่ยวกับวากยสัมพันธ์ ไวยากรณ์เป็นสิ่งที่ดีเพียงสิ่งเดียว: ช่วยให้การโยกย้ายเร็วขึ้นจากภาษาที่คล้ายกัน syntactically แค่นั้นแหละ.
C # ดีกว่า Java อย่างมากมาย พิจารณาการสนับสนุนการเขียนโปรแกรมทั่วไปและการทำงานของพวกเขา - C # เป็นวิธีล่วงหน้าของ Java ไม่พูดถึงตัวดำเนินการมากเกินไปและสิ่งที่ดีอื่น ๆ - C # เป็นคุณลักษณะที่ดีกว่าอย่างมากมาย ไม่มีทางที่ Java จะถือว่าดีกว่า C # ได้
C ++ และ C # เป็นมากกว่าการแข่งขัน C ++ มีรูปแบบการรวบรวมแบบโบราณที่น่ารำคาญอย่างมากและโรคที่สืบทอดจาก C แต่เทมเพลตนั้นมีประสิทธิภาพมากกว่า generics อย่างมากและวิธีการจัดการทรัพยากรนั้นมีความยืดหยุ่นและทรงพลังมากขึ้นโดยทั่วไปเช่นเดียวusing
กับความล้มเหลวโดยสมบูรณ์ ได้เร็วขึ้น
ดีC#
มีที่ดีบางอย่างในตัวคุณสมบัติเช่นLINQ
และผู้แทน มันจะได้รับที่ดีที่สุดจากทั้งสองโลก - และJava
C++
ดูที่นี่เพื่อเปรียบเทียบแบบเต็ม
แต่ฉันชอบJava
โลกที่ดีกว่า - กรอบโอเพนซอร์ซมากขึ้นและทำงานบนทุกแพลตฟอร์ม และอย่าบอกฉันเกี่ยวกับMono
มันไม่ใช่ตัวเลือกที่เชื่อถือได้
ตามแหล่งข้อมูลบางแหล่ง (ดูเช่นhttp://www.indeed.com/jobtrends ) C # ยังคงเป็นที่นิยมน้อยกว่า Java และเป็นที่นิยมเช่น C ++
C # มีคุณสมบัติที่ Java ขาดเช่นการสนับสนุนโดยตรงสำหรับสำนวนการเขียนโปรแกรมบางอย่างเช่นคุณสมบัติรูปแบบการเขียนโปรแกรมการทำงานและอื่น ๆ C # มีระดับนามธรรมสูงกว่า C ++ ซึ่งเป็นข้อได้เปรียบเมื่อเวลาในการพัฒนาสำคัญกว่าความเร็วของโปรแกรม
ส่วนตัวแล้วฉันยังคงชอบโลกของ Java / C ++ ดังที่ Petar Minchev กล่าวว่า Java มีเฟรมเวิร์กโอเพนซอร์สและแอปพลิเคชั่นมากกว่านั้นมันทำงานได้ทุกที่โดยผูกติดอยู่กับผู้ขายและระบบปฏิบัติการเฉพาะ C ++ มีข้อได้เปรียบที่คล้ายคลึงกันแม้ว่ารหัสมักจะต้องการการปรับเปลี่ยนจากแพลตฟอร์มหนึ่งไปอีกแพลตฟอร์มหนึ่ง เนื่องจากฉันต้องการพัฒนาบน Linux และเพื่อความรู้ของฉันฉันไม่สามารถเต็มที่ C # บน Linux ฉันไม่เคยได้รับความสนใจอย่างแท้จริงใน C # เพราะความต้องการเขียนโปรแกรมของฉันครอบคลุมโดย C, C ++, Java, Scala
ในทางกลับกันสำหรับนักพัฒนาจำนวนมากที่ถูกผูกติดอยู่กับผู้ขายรายใดรายหนึ่งไม่ใช่ปัญหา: Microsoft มีตำแหน่งที่โดดเด่นในตลาดระบบปฏิบัติการและ C # ให้โอกาสในการทำงานมากมาย ดังนั้นนักพัฒนา IMO หลายคนใช้ C # เพราะนอกจากจะเป็นภาษาที่มีคุณลักษณะหลากหลายแล้วมันยังเป็นการลงทุนที่ดี
สิ่งที่เกี่ยวกับ "กรอบการพัฒนาซอฟต์แวร์ใดที่มีภาษาการเขียนโปรแกรม" ดีกว่า
คุณลืมที่จะรวมสิ่งอื่น ๆ เช่น "สภาพแวดล้อม" ที่คุณจะทำงานด้วย
คุณกำลังจะทำงานเฉพาะสำหรับ Windows OS แต่ไม่จำเป็นต้องอยู่ในระดับต่ำและมีหน่วยความจำและทรัพยากรอื่น ๆ มากมายหรือไม่?
เลือก. NET เป็นเฟรมเวิร์กบน Windows และใช้ C #
คุณกำลังจะทำงานเฉพาะสำหรับ Windows แต่ไม่จำเป็นต้องอยู่ในระดับต่ำ แต่มีทรัพยากรไม่มาก?
เลือก Delphi Framework (และภาษาการเขียนโปรแกรม Object Pascal Delphi หรือภาษาการเขียนโปรแกรม Lazarus Object Pascal)
เป็นแอปของคุณ ต้องการการสนับสนุนหลายแพลตฟอร์มเช่นเกมในโทรศัพท์มือถือที่แตกต่างกันหรือไม่?
เลือก Java Framework และภาษาการเขียนโปรแกรม Java
Linux กับ KDE เป็นส่วนต่อประสานกราฟิกหรือไม่
เลือกเฟรมเวิร์ก QT ด้วย C ++
Linux กับ Gnome เป็นส่วนต่อประสานกราฟิกหรือไม่
เลือก GObject / GLib framework ด้วย C ++
คุณจะทำงานกับการทำงานระดับต่ำมากมายเช่นการพัฒนาไดรเวอร์หรือไม่?
Plain C หรือ C ++ มันใช้สำหรับระบบปฏิบัติการหลายระบบที่มีไลบรารี่มาตรฐานเป็นเฟรมเวิร์ก
แค่ 2 เซ็นต์ของฉัน
หากคุณค้นหาคุณมีแนวโน้มที่จะสะดุดเมื่อการสนทนาในภาษาโปรแกรมด้านบน นี่คือหนึ่งในผลการค้นหา - http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html - Java ยังคงเป็นภาษาที่ได้รับความนิยมมากที่สุด
Java พยายามลบข้อบกพร่องบางส่วนของ C ++ (และทำให้โปรแกรมเมอร์ใช้งานได้ง่ายขึ้นสำหรับแอพพลิเคชั่นที่ไม่ใช่แบบเรียลไทม์และไม่สำคัญ) C # เป็นผู้มาสายเพื่อหลีกเลี่ยงข้อบกพร่องบางประการของภาษาจาวา C # มีความก้าวหน้าเป็นอย่างมาก (เนื่องจาก Microsoft สามารถควบคุมได้มาก) ในขณะที่ความก้าวหน้าใน Java ถูกบล็อกเป็นเวลานานเนื่องจากความขัดแย้งระหว่างผู้มีส่วนได้ส่วนเสีย
สองสิ่งที่ยังไม่ได้กล่าวถึง:
C # ดีกว่า C ++ เพราะ:
มันจะไปกับไฟล์ส่วนหัวซึ่งแปลว่าเรียบง่ายมาก
C # ดีกว่า Java เพราะ:
สนับสนุนทั้งชนิดการอ้างอิง (คลาส) และประเภทค่ากำหนด (struct) ที่ผู้ใช้กำหนดซึ่งหากคุณรู้ว่าคุณกำลังทำอะไรสามารถให้ประโยชน์ด้านประสิทธิภาพที่สำคัญ
สนับสนุนผู้ได้รับมอบหมายซึ่งเป็นเหมือนอินเทอร์เฟซวิธีการเดียวจึงทำให้การเข้ารหัสของโครงสร้างที่เกิดขึ้นบ่อยครั้งง่ายขึ้นซึ่งเกี่ยวข้องกับวัตถุวิธีการเดียว
คุณควรเลือกภาษาที่ดีที่สุดสำหรับสภาพแวดล้อมที่คาดหวังและความเชี่ยวชาญของคุณ
เลือก C # หากคุณทำงานในสภาพแวดล้อม Microsoft เท่านั้น ในขณะที่ C # ได้มาตรฐานภายใต้ ISO / IEC 23270: 2003, เวอร์ชั่นของ Microsoft ยังคงใช้งานได้อย่างสมบูรณ์เท่านั้น ส่วนสำคัญของภาษาไม่ได้อยู่ในมาตรฐานและอยู่ภายใต้สิทธิบัตรของ Microsoft ไม่มีใครจะใช้ภาษาที่เข้ากันได้อย่างสมบูรณ์กับระบบอื่น ๆ ดังนั้นคุณจึงเป็นผู้ขายที่ถูกล็อคไว้ที่ Microsoft Windows และ. Net ตราบใดที่คุณใช้ภาษา หากคุณกำลังมองหาทักษะที่จะใช้ในตลาดอุปกรณ์พกพาควรมองหาภาษาอื่น
Java ใช้งานได้ แต่มีค่าใช้จ่ายจำนวนมากส่วนหนึ่งเป็นเพราะคุณสมบัติเช่นการรวบรวมขยะ Java ยังไม่ได้มาตรฐานโดย ISO / IEC ดังนั้นคุณจึงไม่รับประกันหากคุณเปลี่ยนแพลตฟอร์มและเวอร์ชันของ Java มีเพียงความตั้งใจที่ดีที่สุดของ Sun / Oracle หากคุณวางแผนที่จะทำงานกับ Android ในที่สุดนี่คือหนทางที่แน่นอน การเขียนโปรแกรมของ Android นั้นเป็นจาวาโดยมีการเปลี่ยนแปลงเล็กน้อย
C ++ เป็นมาตรฐานและคอมไพเลอร์เกือบทั้งหมดเป็นไปตามมาตรฐานสากลดังนั้นคุณจึงรับประกันพฤติกรรม แต่ภาษาไม่ได้ปกป้องคุณจากตัวคุณเอง คุณต้องทำการล้างข้อมูลและตรวจสอบด้วยตัวเอง อันนี้ไม่ยาก โปรแกรมเมอร์ C / C ++ ทำสิ่งเหล่านี้มาหลายปีแล้ว Apple ใช้ Objective C สำหรับทุกสิ่งดังนั้นหากคุณต้องการตั้งเป้าหมายสำหรับ Apple ฉันแนะนำให้คุณลองทำเช่นนี้แทน
หากคุณเห็นว่าตัวเองกำลังทิ้ง Windows ไว้บ้างฉันขอแนะนำให้เรียนรู้ทั้ง C / C ++ และ Java ซึ่งทั้งสองอย่างนี้เป็นที่ต้องการของตลาด
ในความสัมพันธ์กับ C ++ vs C # (เพราะฉันไม่ค่อยเชี่ยวชาญใน Java) สิ่งที่ฉันขาดไปคือความสามารถในการเข้าถึงข้อมูลระดับล่างใน Windows ตัวอย่างเช่นคุณไม่สามารถพัฒนาไดรเวอร์การแสดงผลดั้งเดิมใน C # (ยัง) แต่คุณสามารถใช้ C ++ สิ่งนี้ไม่ทำให้ C ++ ดีขึ้น ฉันเห็น C ++ กับ C # เป็นชุดประกอบกับ C
C # อยู่ในมุมมองของฉันมีประสิทธิภาพมากขึ้นถ้าคุณดูเวลาที่ใช้คุณลักษณะจริง ค่าปรับประสิทธิภาพของรันไทม์. Net นั้นเล็กน้อยสำหรับ 99% ของแอพพลิเคชั่นที่ได้รับการพัฒนา อาจมีความสำคัญหากคุณใช้การวนลูปแน่นใช่โดยทุกวิถีทาง แต่ส่วนใหญ่เวลาที่แอปพลิเคชั่นไม่ได้ใช้งานกำลังรอสัญญาณอินพุตหรือสัญญาณขัดจังหวะใด ๆ (ดิสก์ IO คลิกปุ่มเครือข่ายเสร็จสิ้นการเคลื่อนไหว) .
ห้องสมุด CLR ที่มีฟังก์ชั่นการใช้งานทั้งหมดของเขานั้นมีประโยชน์มากมาย เมื่อฉันฝึกอบรมผู้พัฒนาระดับจูเนียร์ C # ส่วนใหญ่บอกว่าชอบการตั้งชื่อแบบตรรกะของคลาสสมาชิกและเนมสเปซ การค้นหาคุณลักษณะของเมธอดนั้นสมเหตุสมผลบน SDK สิ่งที่ Visual Basic 5 นั้นมีข้อบกพร่องอย่างจริงจัง สิ่งนี้ช่วยให้พวกเขาใช้ห้องสมุดอย่างมากมาย หลังจากเรียนรู้ไวยากรณ์ของภาษาการเรียนรู้ห้องสมุดใหม่มีความสำคัญต่อการเข้าใจ SDK ที่ดี มันช่วยให้คุณประหยัดจากการพลิกโฉมพวงมาลัย