C # bugünlerde popüler görünüyor. Sözdizimsel olarak neredeyse Java ile aynı olduğunu duydum. Java ve C ++ daha uzun süredir var. Hangi nedenlerden dolayı Java ve C ++ üzerinden C # seçmeliyim?
C # bugünlerde popüler görünüyor. Sözdizimsel olarak neredeyse Java ile aynı olduğunu duydum. Java ve C ++ daha uzun süredir var. Hangi nedenlerden dolayı Java ve C ++ üzerinden C # seçmeliyim?
Yanıtlar:
Soru, "Modern, tipik uygulama geliştirme için hangi dil daha uygun?" Olmalı.
Düzenleme: Aşağıdaki yorumlardan bazılarını ele aldım. Küçük bir not: doğal olarak birçok şeyiniz olduğunda, deyimler olarak, bunun her zaman kendiniz uygulamaktan veya indirmekten ve kullanmaktan daha büyük bir fark olduğunu düşünün. Hemen hemen her şey bu dillerin herhangi birinde uygulanabilir. Sorun şu ki - dillerin size doğal olarak sağladığı şey.
Bu yüzden başımın üstünden (her iki dilde bazı argümanlar geçerli)
this
işaretçi argümanını dikkate almaz ) ve böylece sınıflar arasında daha dinamik ve esnek ilişkiler yaratır. Bunun ne anlama geldiğini bilmiyorsanız düzenleyin , sonra void döndüren ve bir void (*ptr)()
değişkeni geçersiz kılan bir üye yöntemi atamayı deneyin . C # delegeleri this
işaretçiyi yanlarında taşırlar , ancak kullanıcının her zaman bununla ilgilenmesi gerekmez. void()
Başka herhangi bir void()
delegeye herhangi bir sınıfın yöntemini atayabilirler .using
ifade) destekler. Java 7 de bunu destekleyecek, fakat C # daha uzun zamandır kullanıyor.yield
.this
işaretçi ile erişmeniz ve bunu genel bir işlev işaretleyicisine (yani aynı sınıfta değil) yapan yöntemi bağlamanız gerekiyorsa, bunu yapmanın hiçbir doğal yolu yoktur. C # 'da bedavaya alabilirsiniz. Nasıl çalıştığını bile bilmek zorunda değilsin.this
işaretçiye ihtiyacı vardır .using
Açıkçası ıdisposable mahfazalar ile birlikte ifadesi, RAII büyük bir örnektir. Bu bağlantıya bakınız . GC'ye sahip olduğunuz için C ++ 'ta C ++' da olduğu kadar RAII'ye ihtiyacınız olmadığını düşünün. İhtiyacınız olan belirli zamanlar için, açıkça using
ifadeyi kullanabilirsiniz . Bir diğer küçük hatırlatma: hafızayı boşaltmak pahalı bir işlemdir. GC birçok durumda performans avantajına sahiptir (özellikle de çok fazla belleğiniz varsa). Hafıza sızdırılmayacak ve yeniden dağıtma için çok fazla zaman harcamayacaksınız. Dahası, tahsis de daha hızlıdır, çünkü her seferinde yalnızca bir defa hafıza ayırmazsınız. Arama new
sadece son nesne göstergesini arttırmaktır.new
ve delete
bunlar ampirik olarak her zaman burada ve orada hatalara yol açar, ya da (C ++ 11 ile) otomatik işaretleyicileri doğal olarak kullanabilirsiniz, ancak çok ve çok ekleyebileceklerini unutmayın. Kodun gürültüsü . Yani GC hala orada bir kenarı var.Windows, istemci bilgisayarlarda hakim olan İşletim Sistemidir. Windows uygulamaları için en iyi GUI çerçeveleri, .NET Framework ile birlikte Winforms ve WPF'dir . .NET Framework ve API'leri ile çalışmak için en iyi programlama dili C # ' dır . Java bunun için bir alternatif değildir. C ++ ise otomatik bellek yönetimi olmadan daha eski bir dil C #, C ++ 'a benzemektedir ancak otomatik bellek yönetimine sahiptir ve sizi daha üretken kılan işaretçilerle çalışmak zorunda değilsiniz. C ++ hala bazı durumlarda en iyi seçenek olabilir, ancak iş dünyasında yaygın olan yoğun veri tabanı uygulamaları için değil.
Windows ortamında ve C # ile çalışmaya alışkınsanız, sunucu programlaması için IIS'yi ve temel yönetim için Windows Server'ı öğrenmek için en az yatırım yapmanız gerekir.
Şirket ağlarında konuşlandırılacak bir yazılım geliştiriyorsanız, Active Directory içeren bir Windows Server kullanarak Windows merkezli bir ortam kullanıyor olmaları muhtemeldir. Böyle bir ortamda, C # ve .NET Framework ile yapılmış bir çözümü entegre etmek ve uygulamak kolaydır .
Şahsen ben bir Java geliştiricisiyim, bir C # geliştiricisi değilim, ama web ile çalışıyorum. Windows ağı için ağ uygulamaları geliştiriyor olsaydım C # 'ya geçerdim. Ancak Java'yı Linux tabanlı web sunucuları için tercih ediyorum. Gömülü sistemler için C ++ 'ı seçecektim, çok fazla bağımlılık yapmam.
Evet, C # , C ++ ve Java'dan daha modern özelliklere sahip daha iyi bir dildir, ancak C # seçiminde en önemli şey değildir .
Yazılımınızın ortamı C # seçimi için çok önemlidir . Eğer bir ortamda çalışıyorsanız , Windows istemcileri, Windows sunucuları, Active Directory, IIS ve belki SQL Server sonra C # ile çok iyi bir dildir .NET Framework .
Örneğin, web servisleri olan bir Unix ortamında çalışıyorsanız, Java benim seçimim olacaktır. Gömülü sistemler ile çalışıyorsanız veya donanım cihazlarıyla bütünleşmek zorundaysanız C ++ iyi bir seçim olacaktır.
C # ve Java
C # eğer çok iyi bir dil:
Dil olarak C #, Java'dan çeşitli şekillerde daha iyidir (özellikler, değer türleri, birleştirilmiş jenerikler vb. İçin daha iyi sözdizimi). C # ' yı Java dili olarak tercih ettim, ama şüphe uyandıran şeylerin programlarına oldukça benziyorlar ve benzer uygulamalar için uygunlar.
Öte yandan, Java'nın da bazı büyük avantajları vardır:
Java ile C # oldukça yakın bir çağrı ve gerçekten Microsoft kampında mı yoksa Açık Kaynak / platformlar arası kampında mı olmak istediğinize bağlı.
Şahsen ben Java'yı tercih ediyorum çünkü:
C / C ++
C / C ++, tamamen farklı bir hayvandır. Ben ediyorum değil aşağıdaki nedenlerle günümüzde genel amaçlı uygulama geliştirme için tavsiye:
Bununla birlikte, belirli bir sınırlı sayıda özel alanda, özellikle de şüphesiz ki mükemmel bir seçimdir:
Bu nedenle, temel olarak, C / C ++, özellikle uygun olduğu etki alanlarından birine odaklanırsanız, mükemmel bir seçimdir.
I heard that syntactically they are almost the same.
Sözdizimsel? Kim sözdizimi hakkında uçan maymunlar verir? Sözdizimi yalnızca bir şey için iyidir: sözdizimsel olarak benzer dillerden daha hızlı geçişi sağlamak. Bu kadar.
C #, Java'dan çok daha iyidir. Genel ve fonksiyonel programlama desteğini göz önünde bulundurun - C # Java'nın çok önünde. Operatör aşırı yüklerinden bahsetmiyorum bile ve diğer iyi şeyler - C # çok daha iyi özellikli. Java'nın C # dan daha iyi olduğu düşünülmesinin imkanı yok.
C ++ ve C # daha fazla yarışmada. C ++, inanılmaz derecede sinir bozucu bir arkaik derleme modeline ve C'den bir dizi eski hastalığa sahiptir, ancak şablonları, jeneriklerden çok daha güçlüdür ve kaynak yönetimi yaklaşımları, genel olarak using
, tam bir başarısızlık olduğu gibi , çok daha esnek ve güçlüdür. Daha hızlı.
Eh ve delegeler C#
gibi bazı güzel yerleşik özelliklere sahiptir LINQ
. Her iki dünyadan da en iyisini alıyor - Java
ve C++
. Karşılaştırma için buraya bakın .
Ama ben Java
dünyayı daha çok seviyorum - çok daha açık kaynak kodlu çerçeveler ve her platformda çalışıyor. Ve bana bahsetme Mono
- güvenilir bir seçenek değil.
Bazı kaynaklara göre (bkz. Örneğin http://www.indeed.com/jobtrends ) C # hala Java'dan daha az popüler ve C ++ kadar popüler.
C #, Java'nın sahip olmadığı özellikler sağlar; örneğin, özellikler, işlevsel programlama stili ve benzeri gibi belirli programlama deyimleri için doğrudan destek. C #, C ++ 'dan daha yüksek bir soyutlama seviyesine sahiptir, bu geliştirme zamanının program hızından daha önemli olduğu bir avantajdır.
Şahsen ben hala Java / C ++ dünyalarını tercih ediyorum. Petar Minchev'in dediği gibi, Java daha açık kaynak kodlu çerçevelere ve uygulamalara sahip, her yerde çalışıyor, belirli bir satıcıya ve işletim sistemine daha az bağlı. C ++ 'ın benzer avantajları vardır, ancak kod çoğu zaman bir platformdan diğerine giden uyarlamaları gerektirir. Linux'ta geliştirmeyi tercih ettiğimden ve bildiğim kadarıyla Linux'ta C # ile tam anlamıyla kaçamadığım için C # ile hiç ilgilenmedim çünkü programlama ihtiyaçlarım C, C ++, Java, Scala tarafından karşılanıyor.
Öte yandan, birçok geliştiricinin belirli bir satıcıya bağlı olması bir sorun değildir: Microsoft, işletim sistemi pazarında baskın bir konuma sahiptir ve C # birçok iş fırsatı sunmaktadır. Bu nedenle, IMO'nun birçok geliştiricisi C # 'yı benimsemiştir, çünkü zengin özelliklere sahip bir dil olmasının yanı sıra, aynı zamanda iyi bir yatırımdır.
"Bir programlama dili içeren hangi Yazılım Geliştirme Çerçevesi" ne daha iyi?
Çalışacağınız "çevre" gibi başka şeyler eklemeyi unutmuşsunuz.
Yalnızca Windows işletim sistemi için mi çalışacaksınız, ancak düşük seviyede olması ve çok fazla belleği ve başka kaynakları olması gerekmiyor mu?
.NET'i Windows üzerinden çerçeve olarak seçin ve C # kullanın.
Sadece Windows için mi çalışacaksınız, fakat düşük seviyede olmak zorunda değil, AMA, çok fazla kaynağa sahip değil misiniz?
Delphi Çerçevesini seçin (ve Object Pascal Delphi programlama dilini veya Lazarus Object Pascal programlama dilini)
Uygulamanız mı? Farklı cep telefonlarında oyun gibi çeşitli platformları desteklemek için gerekli mi?
Java Framework'ü ve Java programlama dilini seçin.
Grafik arayüzü olarak KDE ile Linux mu?
C ++ ile QT çerçevesini seçin
Grafik arayüzü olarak Gnome ile Linux mu?
C ++ ile GObject / GLib çerçevesini seçin
Gelişen sürücüler gibi çok düşük seviyeli işlemlerle mi çalışacaksınız?
Düz C veya C ++, birkaç kütüphanede standart kütüphanelere sahip İşletim Sistemleri için kullanılır.
Sadece 2 sentim.
Bir arama yaparsanız, en iyi programlama dilleri üzerine tartışma üzerine yanılmak olasıdır. İşte arama sonuçlarından biri - http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html - Java hala en popüler dil gibi görünüyor.
Java, C ++ 'nın bazı eksikliklerini gidermeye çalıştı (ve programcıların gerçek zamanlı olmayan ve kritik olmayan uygulamalar için hayatı kolaylaştırıyor). Partiye geç gelen C #, Java dilindeki bazı eksikliklerden kaçındı. C # oldukça fazla ilerleme kaydetti (Microsoft üzerinde çok fazla kontrol sahibi olduğu için), Java’daki gelişmeler paydaşları arasındaki çatışmalar nedeniyle önemli bir süre engellendi.
Daha önce belirtilmeyen birkaç şey:
C #, C ++ 'dan iyidir, çünkü:
Büyük bir basitliğe çeviren başlık dosyaları ile yok eder.
C # Java'dan daha iyidir çünkü:
Hem referans tipi (sınıf) hem de değer tipi (yapı) kullanıcı tanımlı türlerini destekler; ne yaptığınızı biliyorsanız, önemli performans avantajları sağlayabilir.
Tek yöntemli arayüzler gibi delegeleri destekler, böylece tek yöntemli nesneleri içeren sıkça oluşan yapıların kodlamasını büyük ölçüde basitleştirir.
Beklenen ortamınız ve uzmanlığınız için en iyi dili seçmelisiniz.
Yalnızca Microsoft ortamında çalışıyorsanız C # öğesini seçin. C #, ISO / IEC 23270: 2003 kapsamında standardize edilmiş olsa da, Microsoft'un sürümü, tek uygulama olarak kalmaya devam etmektedir. Dilin birçok önemli kısmı standart tarafından kapsanmamaktadır ve bu nedenle Microsoft'un patentlerine tabidir. Başka hiç kimse, dilin tümüyle uyumlu bir sürümünü diğer sistemler için uygulayamaz, bu nedenle satıcı, dili kullandığınız sürece Microsoft Windows ve. Mobil pazarda kullanmak için beceriler arıyorsanız, başka bir dile bakmak en iyisidir.
Java çalışır, ancak çöp toplama gibi özelliklerden dolayı kısmen çok fazla yükü vardır. Java ayrıca ISO / IEC tarafından standartlaştırılmamıştır, bu nedenle Java platformlarını ve sürümlerini değiştirirseniz, yalnızca Sun / Oracle'ın en iyi niyetlerini değiştireceğinizin garantisi yoktur. Sonunda Android ile çalışmayı planlıyorsanız, bu kesinlikle gitmek yoludur. Android'in programlaması temelde bir kaç değişiklikle Java.
C ++ standardize edilmiştir ve hemen hemen tüm derleyiciler uluslararası standarda uymaktadır, bu nedenle garantili bir davranışınız vardır, ancak dil sizi kendinizden korumaz. Kendi başınıza temizleme ve taşma kontrolü yapmalısınız. Bu zor değil. C / C ++ programcıları bunu uzun yıllardır yapıyor. Apple her şey için Objective C kullanır, bu yüzden Apple'ı hedeflemek istiyorsanız, bunun yerine denemenizi öneririz.
Windows'u bir noktada geride bıraktığınızı görürseniz, her ikisi de şu anda pazarlanabilir olan hem C / C ++ hem de Java öğrenmenizi öneririm.
C ++ vs C # ile ilgili olarak (Java'da yeterince uzman olmadığım için), burada eksik olduğum şey, Windows'ta düşük düzeyli şeylere erişme yeteneğidir. Örneğin, C # (henüz) bir yerel ekran sürücüsü geliştiremezsiniz, ancak C ++ ile yapabilirsiniz. Bu C ++ 'ı daha iyi yapmaz. C ++ 'ı C #' ye karşı C # 'yı montaj olarak görüyorum.
Bir özelliği gerçekten uygulamak için gereken zamana bakarsanız C # benim görüşüme göre çok daha verimli. Net çalışma zamanının performans cezası, geliştirilen uygulamaların% 99'u için ihmal edilebilir. Sıkı bir döngü kullanıyorsanız, evet, elbette, ancak bir uygulamanın boşta kalması, herhangi bir giriş, sinyal veya kesilmeyi beklemesi (disk GÇ, düğme tıklaması, ağ, animasyon tamamlama) .
Tüm fonksiyonları ile birlikte CLR kütüphanesinin bir başka büyük yararı var. Küçük geliştiricilere C # eğitimi verdiğim zaman, çoğu sınıfların, üyelerin ve ad alanlarının mantıksal adlandırma kurallarını sevdiklerini söyledi. Bir yöntemin özelliğini bulmak SDK'da mantıklıydı, Visual Basic 5'in ciddi şekilde kusurlu olduğu bir şey. Bu onların kütüphaneyi benimsemelerine müthiş yardımcı oldu. Bir dilin sözdizimini öğrendikten sonra, yeni bir kütüphane öğrenmeye başlamak, herhangi bir SDK'yı iyi kavramak için önemlidir. Tekerleği yeniden icat etmekten kurtarıyor.