C # dường như là phổ biến những ngày này. Tôi nghe nói rằng về mặt cú pháp, nó gần giống như Java. Java và C ++ đã tồn tại trong một thời gian dài hơn. Vì lý do gì tôi nên chọn C # trên Java và C ++?
C # dường như là phổ biến những ngày này. Tôi nghe nói rằng về mặt cú pháp, nó gần giống như Java. Java và C ++ đã tồn tại trong một thời gian dài hơn. Vì lý do gì tôi nên chọn C # trên Java và C ++?
Câu trả lời:
Câu hỏi nên là "Ngôn ngữ nào phù hợp hơn cho phát triển ứng dụng điển hình, hiện đại?".
Chỉnh sửa: Tôi đã giải quyết một số ý kiến dưới đây. Một lưu ý nhỏ: hãy xem xét rằng khi bạn có rất nhiều thứ nguyên bản, như thành ngữ, thì đó là một sự khác biệt lớn so với việc thực hiện hoặc tải xuống và sử dụng chúng mỗi lần. Hầu hết mọi thứ có thể được thực hiện trong bất kỳ ngôn ngữ nào. Câu hỏi là - những ngôn ngữ thực sự cung cấp cho bạn.
Vì vậy, trên đỉnh đầu của tôi (một số đối số áp dụng cho cả hai ngôn ngữ) ...
this
đối số con trỏ được gõ tĩnh ) và do đó tạo ra các mối quan hệ linh hoạt và linh hoạt hơn giữa các lớp. chỉnh sửa nếu bạn không biết điều này có nghĩa là gì, sau đó thử gán một phương thức thành viên trả về void và chấp nhận void cho một void (*ptr)()
biến. Các đại biểu C # mang theo this
con trỏ bên mình, nhưng người dùng không phải lúc nào cũng phải quan tâm đến điều đó. Họ chỉ có thể gán một void()
phương thức của bất kỳ lớp nào cho bất kỳ void()
đại biểu nào khác .using
tuyên bố). Java 7 cũng sẽ hỗ trợ điều này, nhưng C # đã có nó trong một thời gian dài hơn.yield
tuyên bố.this
con trỏ và liên kết phương thức thực hiện nó với một con trỏ hàm chung (nghĩa là không cùng lớp), thì đơn giản là không có cách nào để làm điều đó. Trong C #, bạn nhận được miễn phí. Bạn thậm chí không cần phải biết nó hoạt động như thế nào.this
con trỏ.using
tuyên bố, rõ ràng cùng với giấy gói IDisposable, là một ví dụ tuyệt vời của RAII. Xem liên kết này . Hãy xem xét rằng bạn không cần RAII nhiều như C # như bạn làm trong C ++, bởi vì bạn có GC. Đối với những thời điểm cụ thể bạn cần, bạn có thể sử dụng using
câu lệnh một cách rõ ràng . Một nhắc nhở nhỏ: giải phóng bộ nhớ là một thủ tục đắt tiền. GC có lợi thế về hiệu suất của chúng trong rất nhiều trường hợp (đặc biệt là khi bạn có nhiều bộ nhớ). Bộ nhớ sẽ không bị rò rỉ và bạn sẽ không dành nhiều thời gian cho việc giải quyết. Hơn nữa, phân bổ cũng nhanh hơn, vì bạn không phân bổ bộ nhớ mỗi lần, chỉ một lần trong một lần. Gọi new
chỉ đơn giản là tăng một con trỏ đối tượng cuối cùng.new
và delete
, theo kinh nghiệm luôn dẫn đến lỗi ở đây và ở đó, hoặc (với C ++ 11), bạn có thể sử dụng con trỏ tự động, nhưng hãy nhớ rằng chúng thêm rất nhiều của tiếng ồn cho mã. Vì vậy, GC vẫn có một lợi thế ở đó.Windows là hệ điều hành thống trị trên các máy khách. Các khung GUI tốt nhất cho các ứng dụng Windows là Winforms và WPF cùng với .NET Framework . Ngôn ngữ lập trình tốt nhất để làm việc với .NET Framework và API của nó là C # . Java không phải là một thay thế cho điều này. Và C ++ là một ngôn ngữ cũ hơn mà không cần quản lý bộ nhớ tự động. C # tương tự như C ++ nhưng có quản lý bộ nhớ tự động và bạn không phải làm việc với các con trỏ, điều này giúp bạn làm việc hiệu quả hơn. C ++ vẫn có thể là lựa chọn tốt nhất cho một số trường hợp, nhưng không phải cho các ứng dụng cơ sở dữ liệu chuyên sâu về hình thức phổ biến trong kinh doanh.
Nếu bạn đã quen làm việc trong môi trường Windows và với C #, bạn sẽ cần đầu tư ít nhất để học IIS cho lập trình máy chủ và Windows Server cho quản trị cơ bản.
Nếu bạn đang phát triển phần mềm sắp được triển khai trong các mạng công ty, có khả năng họ sử dụng môi trường tập trung vào Windows bằng Windows Server với Active Directory. Trong một môi trường như vậy, nó dễ dàng tích hợp và triển khai một giải pháp được thực hiện trong C # và .NET Framework .
Cá nhân tôi là nhà phát triển Java, không phải nhà phát triển C #, nhưng tôi làm việc với web. Tôi sẽ chuyển sang C # nếu tôi đang phát triển các ứng dụng mạng cho mạng Windows. Nhưng tôi thích Java cho các máy chủ web dựa trên Linux. Tôi sẽ chọn C ++ cho các hệ thống nhúng vì tôi sẽ không có nhiều phụ thuộc.
Đúng, C # là ngôn ngữ tốt hơn với các tính năng hiện đại hơn C ++ và Java, nhưng đó không phải là điều quan trọng nhất để chọn C # .
Môi trường cho phần mềm của bạn là quan trọng nhất để chọn C # . Nếu bạn làm việc trong môi trường với các máy khách Windows, máy chủ Windows, Active Directory, IIS và có thể SQL Server thì C # là ngôn ngữ tốt nhất với .NET Framework .
Nếu bạn làm việc trong môi trường Unix với các dịch vụ web, ví dụ Java sẽ là lựa chọn của tôi. Và nếu bạn làm việc với các hệ thống nhúng hoặc phải tích hợp với các thiết bị phần cứng thì C ++ sẽ là một lựa chọn tốt.
C # và Java
C # là một ngôn ngữ rất tốt nếu:
C # như một ngôn ngữ đẹp hơn Java theo nhiều cách khác nhau (cú pháp tốt hơn cho các thuộc tính, loại giá trị, tổng quát thống nhất, v.v.). Tôi thích C # là ngôn ngữ của Java nhưng trong lược đồ lớn, chúng là những ngôn ngữ khá giống nhau và phù hợp với các ứng dụng tương tự.
Mặt khác, Java cũng có một số lợi thế lớn:
Vì vậy, Java so với C # là một cuộc gọi khá gần gũi và nó thực sự phụ thuộc vào việc bạn muốn ở trong trại Microsoft hay trại mã nguồn mở / đa nền tảng.
Cá nhân, tôi thích Java vì:
C / C ++
C / C ++ về cơ bản là một con thú hoàn toàn khác. Tôi sẽ không đề xuất nó cho phát triển ứng dụng cho mục đích chung hiện nay vì những lý do sau:
Tuy nhiên, chắc chắn đây là một lựa chọn tuyệt vời trong một số lĩnh vực đặc biệt hạn chế, đặc biệt:
Vì vậy, về cơ bản, C / C ++ là một lựa chọn tuyệt vời nếu và chỉ khi bạn tập trung vào một trong những lĩnh vực mà nó đặc biệt phù hợp.
I heard that syntactically they are almost the same.
Cú pháp? Ai cho một con khỉ bay về cú pháp? Cú pháp chỉ tốt cho một điều: cho phép di chuyển nhanh hơn từ các ngôn ngữ tương tự cú pháp. Đó là nó.
C # tốt hơn rất nhiều so với Java. Hãy xem xét hỗ trợ lập trình chung và chức năng của họ - C # đi trước Java. Chưa kể quá tải nhà điều hành, và các công cụ tốt khác - C # là đặc trưng tốt hơn nhiều. Không có cách nào mà Java có thể được coi là tốt hơn C #.
C ++ và C # là một cuộc thi. C ++ có một mô hình biên dịch cổ xưa cực kỳ khó chịu và một loạt các bệnh di sản từ C, nhưng các mẫu của nó mạnh hơn rất nhiều so với thuốc generic và nói chung, các cách tiếp cận quản lý tài nguyên của nó linh hoạt và mạnh mẽ hơn, vì using
nó hoàn toàn thất bại, và nó thực thi nhanh hơn
Vâng C#
có một số tính năng tích hợp tốt như LINQ
và đại biểu. Nó đang nhận được tốt nhất từ cả hai thế giới - Java
và C++
. Nhìn vào đây để so sánh đầy đủ.
Nhưng tôi thích Java
thế giới hơn - các khung nguồn mở hơn nhiều và nó chạy trên mọi nền tảng. Và đừng nói với tôi về Mono
- đó không phải là một lựa chọn đáng tin cậy.
Theo một số nguồn (xem ví dụ: http://www.indeed.com/jobtrends ) C # vẫn ít phổ biến hơn Java và phổ biến như C ++.
C # không cung cấp các tính năng mà Java thiếu, ví dụ: hỗ trợ trực tiếp cho các thành ngữ lập trình nhất định như các thuộc tính, kiểu lập trình chức năng, v.v. C # có mức độ trừu tượng cao hơn C ++, đây là một lợi thế khi thời gian phát triển quan trọng hơn là tốc độ chương trình.
Cá nhân, tôi vẫn thích thế giới Java / C ++. Như Petar Minchev đã nói, Java có nhiều khung và ứng dụng nguồn mở hơn, nó chạy ở mọi nơi, ít bị ràng buộc với một nhà cung cấp và hệ điều hành cụ thể. C ++ có những ưu điểm tương tự, mặc dù mã thường cần sự thích ứng đi từ nền tảng này sang nền tảng khác. Vì tôi thích phát triển trên Linux và theo hiểu biết của tôi, tôi không thể tìm hiểu đầy đủ về C # trên Linux, tôi không bao giờ có hứng thú thực sự với C # vì nhu cầu lập trình của tôi được bảo vệ bởi C, C ++, Java, Scala.
Mặt khác, đối với nhiều nhà phát triển bị ràng buộc với một nhà cung cấp cụ thể không phải là vấn đề: Microsoft có vị trí thống lĩnh trong thị trường hệ điều hành và C # mang lại rất nhiều cơ hội việc làm. Do đó, IMO nhiều nhà phát triển chấp nhận C # bởi vì, ngoài việc là một ngôn ngữ giàu tính năng, nó còn là một khoản đầu tư tốt.
Thế còn "Khung phát triển phần mềm nào, bao gồm ngôn ngữ lập trình" thì tốt hơn?
Bạn đã quên bao gồm những thứ khác, như "môi trường" bạn sẽ làm việc cùng.
Bạn sẽ chỉ làm việc cho HĐH Windows, nhưng, không phải ở mức độ thấp, và có nhiều bộ nhớ và các tài nguyên khác?
Chọn .NET làm khung trên Windows và sử dụng C #.
Bạn sẽ chỉ làm việc cho Windows, nhưng, không phải ở mức độ thấp, NHƯNG, không có nhiều tài nguyên?
Chọn Khung Delphi (và ngôn ngữ lập trình Object Pascal Delphi hoặc ngôn ngữ lập trình Lazarus Object Pascal)
Là ứng dụng của bạn. cần thiết để hỗ trợ một số nền tảng, như trò chơi, trong các điện thoại di động khác nhau?
Chọn Khung công tác Java và ngôn ngữ lập trình Java.
Có phải Linux với KDE là giao diện đồ họa?
Chọn khung QT, với C ++
Có phải Linux với Gnome là giao diện đồ họa?
Chọn khung GObject / GLib, với C ++
Bạn sẽ làm việc với rất nhiều hoạt động cấp thấp, như phát triển trình điều khiển?
Plain C hoặc C ++ được sử dụng cho một số Hệ điều hành, với các thư viện chuẩn, làm khung.
Chỉ 2 xu của tôi.
Nếu bạn thực hiện tìm kiếm, bạn có thể sẽ vấp ngã khi thảo luận về các ngôn ngữ lập trình hàng đầu. Đây là một trong những kết quả tìm kiếm - http://www.tiobe.com/index.php/content/apersinfo/tpci/index.html - Java dường như vẫn là ngôn ngữ phổ biến nhất.
Java đã cố gắng loại bỏ một số thiếu sót của C ++ (và làm cho cuộc sống của các lập trình viên trở nên đơn giản hơn đối với các ứng dụng không theo thời gian thực và không quan trọng). C # là người đến muộn trong bữa tiệc, đã tránh được một số thiếu sót của ngôn ngữ Java. C # đã đạt được nhiều tiến bộ (vì Microsoft có nhiều quyền kiểm soát đối với nó) trong khi những tiến bộ trong Java đã bị chặn trong một khoảng thời gian đáng kể do xung đột giữa các bên liên quan.
Một vài điều chưa được đề cập:
C # tốt hơn C ++ vì:
Nó không đi với các tập tin tiêu đề, mà chuyển thành rất đơn giản.
C # tốt hơn Java vì:
Nó hỗ trợ cả các loại do người dùng xác định loại tham chiếu (lớp) và loại giá trị (struct), nếu bạn biết bạn đang làm gì, có thể mang lại lợi ích hiệu suất đáng kể.
Nó hỗ trợ các đại biểu, giống như các giao diện phương thức đơn, do đó đơn giản hóa rất nhiều việc mã hóa các cấu trúc xảy ra thường xuyên liên quan đến các đối tượng phương thức đơn.
Bạn nên chọn ngôn ngữ tốt nhất cho môi trường mong đợi và chuyên môn của bạn.
Chọn C # nếu bạn đang làm việc trong môi trường duy nhất của Microsoft. Mặc dù C # được tiêu chuẩn hóa theo ISO / IEC 23270: 2003, phiên bản của Microsoft vẫn là bản triển khai hoàn chỉnh duy nhất. Một số phần chính của ngôn ngữ không được bao gồm trong tiêu chuẩn và do đó phải tuân theo bằng sáng chế của Microsoft. Không ai khác sẽ triển khai phiên bản ngôn ngữ hoàn toàn tương thích cho các hệ thống khác, do đó, trên thực tế, bạn là nhà cung cấp bị khóa với Microsoft Windows và .Net miễn là bạn sử dụng ngôn ngữ này. Nếu bạn đang tìm kiếm các kỹ năng để sử dụng trong thị trường di động, tốt nhất nên tìm đến một ngôn ngữ khác.
Java hoạt động, nhưng có nhiều chi phí hoạt động, một phần do các tính năng như bộ sưu tập rác. Java cũng không được tiêu chuẩn hóa bởi ISO / IEC, vì vậy bạn không có gì đảm bảo nếu bạn chuyển đổi các nền tảng và phiên bản Java, chỉ có ý định tốt nhất của Sun / Oracle. Nếu cuối cùng bạn có kế hoạch làm việc với Android, đây chắc chắn là con đường để đi. Lập trình của Android về cơ bản là Java, với một vài thay đổi.
C ++ được chuẩn hóa và hầu hết tất cả các trình biên dịch đều tuân theo tiêu chuẩn quốc tế, vì vậy bạn đã đảm bảo hành vi NHƯNG ngôn ngữ không bảo vệ bạn khỏi chính bạn. Bạn phải tự mình thực hiện dọn dẹp và kiểm tra tràn. Điều này không khó. Các lập trình viên C / C ++ đã làm những việc này trong nhiều năm. Apple sử dụng Objective C cho mọi thứ, vì vậy nếu bạn muốn nhắm đến Apple, tôi khuyên bạn nên thử điều này thay thế.
Nếu bạn thấy mình rời khỏi Windows vào một lúc nào đó, tôi khuyên bạn nên học cả C / C ++ và Java - cả hai đều có thể bán được tại thời điểm này.
Liên quan đến C ++ so với C # (vì tôi không đủ thành thạo Java), điều tôi thiếu ở đây là khả năng truy cập các công cụ lowlevel trên Windows. Ví dụ: bạn không thể phát triển trình điều khiển hiển thị gốc trong C # (chưa), nhưng bạn có thể với C ++. Điều này không làm cho C ++ tốt hơn. Tôi thấy C ++ so với C # là hội so với C.
C # theo quan điểm của tôi hiệu quả hơn nhiều nếu bạn nhìn vào thời gian cần thiết để thực sự thực hiện một tính năng. Hình phạt hiệu năng của thời gian chạy .Net không đáng kể đối với 99% các ứng dụng được phát triển. Nó có thể có ý nghĩa nếu bạn đang chạy một vòng lặp chặt chẽ, vâng, bằng mọi cách, nhưng hầu hết thời gian một ứng dụng không hoạt động, chờ đợi bất kỳ loại đầu vào, tín hiệu hoặc ngắt (đĩa IO, nhấp vào nút, mạng, hoàn thành hoạt hình) .
Thư viện CLR với tất cả các chức năng của mình có một lợi ích lớn khác. Khi tôi đang đào tạo C # cho các nhà phát triển cơ sở, hầu hết trong số họ nói rằng họ thích quy ước đặt tên logic của các lớp, thành viên và không gian tên. Tìm một tính năng của phương thức là hợp lý trên SDK, một điều mà Visual Basic 5 đã bị thiếu sót nghiêm trọng. Điều này đã giúp họ rất nhiều trong việc áp dụng thư viện. Sau khi học cú pháp của một ngôn ngữ, việc học một thư viện mới có ý nghĩa quan trọng trong việc nắm bắt tốt bất kỳ SDK nào. Nó tiết kiệm cho bạn khỏi phát minh lại bánh xe.