C # tampaknya menjadi populer akhir-akhir ini. Saya mendengar bahwa secara sintaksis hampir sama dengan Java. Java dan C ++ sudah ada sejak lama. Untuk alasan apa saya harus memilih C # di atas Java dan C ++?
C # tampaknya menjadi populer akhir-akhir ini. Saya mendengar bahwa secara sintaksis hampir sama dengan Java. Java dan C ++ sudah ada sejak lama. Untuk alasan apa saya harus memilih C # di atas Java dan C ++?
Jawaban:
Pertanyaannya harus "Bahasa mana yang lebih cocok untuk pengembangan aplikasi modern dan tipikal?".
Sunting: Saya membahas beberapa komentar di bawah. Sebuah komentar kecil: pertimbangkan bahwa ketika Anda memiliki banyak hal secara asli, sebagai idiom, itu adalah perbedaan besar daripada menerapkan atau mengunduh dan menggunakannya sendiri setiap saat. Hampir semuanya dapat diimplementasikan dalam bahasa-bahasa ini. Pertanyaannya adalah - bahasa apa yang disediakan secara asli untuk Anda.
Jadi dari atas kepala saya (beberapa argumen berlaku untuk kedua bahasa) ...
this
argumen pointer yang diketik secara statis ), dan karenanya menciptakan hubungan yang lebih dinamis dan fleksibel antar kelas. sunting jika Anda tidak tahu apa artinya ini, maka cobalah menetapkan metode anggota yang mengembalikan void dan menerima void ke void (*ptr)()
variabel. Delegasi C # membawa this
pointer, tetapi pengguna tidak selalu harus peduli tentang itu. Mereka hanya dapat menetapkan void()
metode kelas apa saja untuk void()
delegasi lain .using
pernyataan). Java 7 juga akan mendukung ini, tetapi C # telah memilikinya untuk waktu yang lebih lama.yield
pernyataan.this
pointer, dan mengikat metode yang melakukannya ke pointer fungsi generik (yaitu tidak di kelas yang sama), maka tidak ada cara asli untuk melakukannya. Dalam C #, Anda mendapatkan secara gratis. Anda bahkan tidak perlu tahu cara kerjanya.this
pointer.using
pernyataan, jelas bersama dengan pembungkus IDisposable, adalah contoh yang bagus dari RAII. Lihat tautan ini . Pertimbangkan bahwa Anda tidak perlu RAII sebanyak dalam C # seperti yang Anda lakukan dalam C ++, karena Anda memiliki GC. Untuk waktu-waktu tertentu Anda memang membutuhkannya, Anda dapat menggunakan using
pernyataan itu secara eksplisit . Pengingat kecil lainnya: membebaskan memori adalah prosedur yang mahal. GC memiliki keunggulan kinerja mereka dalam banyak kasus (terutama ketika Anda memiliki banyak memori). Memori tidak akan bocor, dan Anda tidak akan menghabiskan banyak waktu untuk melakukan deallocating. Terlebih lagi, alokasi juga lebih cepat, karena Anda tidak mengalokasikan memori setiap kali, hanya sesekali. Memanggil new
hanya menambah pointer objek terakhir.new
dan delete
, yang secara empiris selalu mengarah ke kesalahan di sana-sini, atau (dengan C ++ 11) Anda dapat menggunakan auto pointer secara native, tetapi perlu diingat bahwa mereka menambah banyak dan banyak kebisingan ke kode. Jadi GC masih memiliki keunggulan di sana.Windows adalah Sistem Operasi yang mendominasi pada komputer klien. Kerangka kerja GUI terbaik untuk aplikasi Windows adalah Winforms dan WPF bersama dengan .NET Framework . Bahasa pemrograman terbaik untuk bekerja dengan .NET Framework dan APInya adalah C # . Java bukan alternatif untuk ini. Dan C ++ adalah bahasa yang lebih tua tanpa manajemen memori otomatis. C # mirip dengan C ++ tetapi memiliki manajemen memori otomatis dan Anda tidak harus bekerja dengan pointer, yang membuat Anda lebih produktif. C ++ masih bisa menjadi pilihan terbaik untuk beberapa kasus, tetapi tidak untuk aplikasi database intensif bentuk yang umum dalam bisnis.
Jika Anda terbiasa bekerja di lingkungan Windows dan dengan C #, Anda memerlukan investasi paling sedikit untuk mempelajari IIS untuk pemrograman server dan Windows Server untuk administrasi dasar.
Jika Anda mengembangkan perangkat lunak yang akan digunakan di jaringan perusahaan, kemungkinan mereka menggunakan lingkungan yang berpusat pada Windows menggunakan Windows Server dengan Active Directory. Dalam lingkungan seperti itu mudah untuk mengintegrasikan dan menggunakan solusi yang dibuat dalam C # dan .NET Framework .
Secara pribadi, saya adalah pengembang Java, bukan pengembang C #, tetapi saya bekerja dengan web. Saya akan beralih ke C # jika saya sedang mengembangkan aplikasi jaringan untuk jaringan Windows. Tapi saya lebih suka Java untuk server web berbasis Linux. Saya akan memilih C ++ untuk embedded system kalau saya tidak akan banyak bergantung.
Ya, C # adalah bahasa yang lebih baik dengan fitur yang lebih modern daripada C ++ dan Java, tetapi itu bukan hal yang paling penting untuk memilih C # .
Lingkungan untuk perangkat lunak Anda adalah yang paling penting untuk memilih C # . Jika Anda bekerja di lingkungan dengan klien Windows, server Windows, Active Directory, IIS dan mungkin SQL Server maka C # adalah bahasa yang paling baik dengan .NET Framework .
Jika Anda bekerja di lingkungan Unix dengan misalnya layanan web, Java akan menjadi pilihan saya. Dan jika Anda bekerja dengan sistem embedded atau harus berintegrasi dengan perangkat perangkat keras C ++ akan menjadi pilihan yang baik.
C # dan Java
C # adalah bahasa yang sangat baik jika:
C # sebagai bahasa lebih bagus daripada Java dalam berbagai cara (sintaksis yang lebih baik untuk properti, tipe nilai, reified generics, dll.). Saya lebih suka C # sebagai bahasa ke Jawa tetapi dalam skema besar hal itu bahasa yang cukup mirip dan cocok untuk aplikasi serupa.
Di sisi lain, Jawa juga memiliki beberapa keuntungan besar:
Jadi Java vs C # adalah panggilan yang cukup dekat dan itu benar-benar turun ke apakah Anda ingin berada di kamp Microsoft atau kamp Open Source / lintas-platform.
Secara pribadi, saya lebih suka Java karena:
C / C ++
C / C ++ pada dasarnya adalah binatang yang sama sekali berbeda. Saya tidak akan merekomendasikan hal ini untuk pengembangan aplikasi tujuan umum saat ini karena alasan berikut:
Namun itu tidak diragukan lagi pilihan yang bagus dalam sejumlah domain khusus tertentu, khususnya:
Jadi pada dasarnya, C / C ++ adalah pilihan yang bagus jika dan hanya jika Anda berfokus pada salah satu domain yang sangat cocok.
I heard that syntactically they are almost the same.
Secara sintaksis? Siapa yang memberi monyet terbang tentang sintaksis? Sintaks hanya baik untuk satu hal: memungkinkan migrasi yang lebih cepat dari bahasa yang mirip secara sintaksis. Itu dia.
C # jauh lebih baik daripada Java. Pertimbangkan dukungan pemrograman generik dan fungsional mereka - C # jauh di depan Jawa. Belum lagi kelebihan operator, dan hal-hal bagus lainnya - C # jauh lebih baik ditampilkan. Tidak mungkin Java bisa dianggap lebih baik daripada C #.
C ++ dan C # lebih merupakan kontes. C ++ memiliki model kompilasi kuno yang sangat menjengkelkan dan banyak penyakit warisan dari C, tetapi templatnya jauh lebih kuat daripada obat generik, dan pendekatan pengelolaan sumber dayanya jauh lebih fleksibel dan kuat secara umum, seperti using
kegagalan total, dan dijalankan lebih cepat.
Yah C#
memiliki beberapa fitur bawaan yang bagus seperti LINQ
dan delegasi. Ini mendapatkan yang terbaik dari kedua dunia - Java
dan C++
. Lihat di sini untuk perbandingan lengkap.
Tapi saya suka Java
dunia lebih baik - lebih banyak kerangka kerja open source dan berjalan di setiap platform. Dan jangan beri tahu saya Mono
- ini bukan pilihan yang bisa diandalkan.
Menurut beberapa sumber (lihat misalnya http://www.indeed.com/jobtrends ) C # masih kurang populer daripada Java, dan sepopuler C ++.
C # memang menyediakan fitur yang kurang dimiliki Java, misalnya dukungan langsung untuk idiom pemrograman tertentu seperti properti, gaya pemrograman fungsional, dan sebagainya. C # memiliki tingkat abstraksi yang lebih tinggi daripada C ++, yang merupakan keuntungan ketika waktu pengembangan lebih penting daripada kecepatan program.
Secara pribadi, saya masih lebih suka dunia Java / C ++. Seperti yang dikatakan Petar Minchev, Java memiliki lebih banyak kerangka kerja sumber terbuka dan aplikasi, yang beroperasi di mana-mana, kurang terikat pada vendor dan sistem operasi tertentu. C ++ memiliki kelebihan yang serupa, meskipun kode seringkali membutuhkan adaptasi dari satu platform ke platform lainnya. Karena saya lebih suka mengembangkan di Linux dan, setahu saya, saya tidak bisa sepenuhnya menggunakan C # di Linux, saya tidak pernah tertarik dengan C # karena kebutuhan pemrograman saya dicakup oleh C, C ++, Java, Scala.
Di sisi lain, bagi banyak pengembang yang terikat pada vendor tertentu bukan masalah: Microsoft memiliki posisi dominan di pasar sistem operasi dan C # memberikan banyak peluang kerja. Oleh karena itu, banyak pengembang IMO mengadopsi C # karena, selain menjadi bahasa yang kaya fitur, juga merupakan investasi yang baik.
Bagaimana dengan "Kerangka Pengembangan Perangkat Lunak Yang mana, yang mencakup bahasa pemrograman" yang lebih baik?
Anda lupa memasukkan hal-hal lain, seperti "lingkungan" tempat Anda bekerja.
Apakah Anda akan bekerja hanya untuk OS Windows, tetapi, tidak harus tingkat rendah, dan memiliki banyak memori dan sumber daya lainnya?
Pilih .NET sebagai framework di atas Windows, dan gunakan C #.
Apakah Anda akan bekerja hanya untuk Windows, tetapi, tidak harus tingkat rendah, TETAPI, tidak memiliki banyak sumber daya?
Pilih Kerangka Kerja Delphi (dan bahasa pemrograman Objek Pascal Delphi atau bahasa pemrograman Paskah Objek Lazarus)
Apakah aplikasi Anda. diperlukan untuk mendukung beberapa platform, seperti game, di ponsel yang berbeda?
Pilih Java Framework, dan bahasa pemrograman Java.
Apakah Linux dengan KDE sebagai antarmuka grafis?
Pilih kerangka kerja QT, dengan C ++
Apakah Linux dengan Gnome sebagai antarmuka grafis?
Pilih kerangka GObject / GLib, dengan C ++
Apakah Anda akan bekerja dengan banyak operasi tingkat rendah, seperti mengembangkan driver?
Plain C atau C ++ digunakan untuk beberapa Sistem Operasi, dengan pustaka standar, sebagai framework.
Hanya 2 sen saya.
Jika Anda melakukan pencarian, Anda mungkin akan menemukan diskusi tentang bahasa pemrograman top. Berikut adalah salah satu hasil pencarian - http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html - Java tampaknya masih menjadi bahasa yang paling populer.
Java mencoba untuk menghilangkan beberapa kekurangan C ++ (dan membuat hidup para programmer lebih mudah untuk aplikasi non-real-time dan non-critical). C # menjadi pendatang baru ke pesta, menghindari beberapa kekurangan bahasa Jawa. C # telah membuat banyak kemajuan (karena Microsoft memiliki banyak kendali atas itu) sementara kemajuan di Jawa diblokir untuk periode waktu yang cukup lama karena konflik di antara para pemangku kepentingannya.
Beberapa hal yang belum disebutkan:
C # lebih baik daripada C ++ karena:
Itu tidak jauh dengan file header, yang diterjemahkan dengan sangat sederhana.
C # lebih baik daripada Java karena:
Ini mendukung kedua tipe referensi (kelas) dan tipe nilai (struct) tipe yang ditentukan pengguna, yang, jika Anda tahu apa yang Anda lakukan, dapat menghasilkan manfaat kinerja yang signifikan.
Ini mendukung delegasi, yang seperti antarmuka metode tunggal, sehingga sangat menyederhanakan pengkodean konstruksi yang sering terjadi yang melibatkan objek metode tunggal.
Anda harus memilih bahasa terbaik untuk lingkungan yang Anda harapkan dan keahlian Anda.
Pilih C # jika Anda bekerja di lingkungan khusus Microsoft. Sementara C # distandarisasi di bawah ISO / IEC 23270: 2003, versi Microsoft tetap satu-satunya implementasi yang lengkap. Beberapa bagian penting dari bahasa ini tidak tercakup oleh standar dan karenanya tunduk pada paten Microsoft. Tidak ada orang lain yang akan mengimplementasikan versi bahasa yang sepenuhnya kompatibel untuk sistem lain, jadi pada dasarnya, Anda adalah vendor yang terkunci pada Microsoft Windows dan .Net selama Anda menggunakan bahasa tersebut. Jika Anda mencari keterampilan untuk digunakan di pasar seluler, lebih baik melihat ke bahasa lain.
Java berfungsi, tetapi memiliki banyak overhead, sebagian karena fitur seperti pengumpulan sampah. Java juga tidak distandarisasi oleh ISO / IEC, jadi Anda tidak memiliki jaminan jika Anda beralih platform dan versi Java, hanya niat terbaik Sun / Oracle. Jika pada akhirnya Anda berencana untuk bekerja dengan Android, ini jelas cara yang harus dilakukan. Pemrograman Android pada dasarnya adalah Java, dengan beberapa perubahan.
C ++ distandarisasi dan hampir semua penyusun mengikuti standar internasional, jadi Anda menjamin perilaku tetapi bahasa tidak melindungi Anda dari diri sendiri. Anda harus melakukan pemeriksaan pembersihan dan limpahan sendiri. Ini tidak sulit. Pemrogram C / C ++ telah melakukan ini selama bertahun-tahun. Apple menggunakan Objective C untuk semuanya, jadi jika Anda ingin membidik Apple, saya sarankan Anda untuk mencoba ini.
Jika Anda melihat diri Anda meninggalkan Windows di beberapa titik, saya sarankan belajar C / C ++ dan Java - keduanya dapat dipasarkan saat ini.
Sehubungan dengan C ++ vs C # (karena saya tidak cukup mahir di Jawa), apa yang saya lewatkan di sini adalah kemampuan untuk mengakses hal-hal tingkat rendah pada Windows. Misalnya, Anda tidak dapat mengembangkan driver tampilan asli di C # (belum), tetapi Anda bisa dengan C ++. Ini tidak membuat C ++ lebih baik. Saya melihat C ++ versus C # sebagai Majelis versus C.
C # menurut saya jauh lebih efisien jika Anda melihat waktu yang diperlukan untuk benar-benar mengimplementasikan fitur. Denda kinerja runtime. Net diabaikan untuk 99% dari aplikasi yang dikembangkan. Mungkin penting jika Anda menjalankan loop ketat, ya dengan segala cara, tetapi sebagian besar waktu aplikasi idle, menunggu segala jenis input, sinyal atau interupsi (disk IO, klik tombol, jaringan, penyelesaian animasi) .
Perpustakaan CLR dengan semua fungsinya memiliki manfaat besar lainnya. Ketika saya melatih C # untuk pengembang junior, kebanyakan dari mereka mengatakan mereka menyukai konvensi penamaan kelas, anggota dan ruang nama yang logis. Menemukan fitur metode logis di SDK, sesuatu yang Visual Basic 5 cacat serius. Ini sangat membantu mereka dalam mengadopsi perpustakaan. Setelah mempelajari sintaks suatu bahasa, mempelajari perpustakaan baru sangat penting untuk memahami SDK apa pun. Ini menyelamatkan Anda dari menciptakan kembali roda.