C# đã tiến hóa như thế nào (Những thay đổi của C# từ 1.0 cho tới 5.0)
Chẳng là gần đây, công ty mình vưa tuyển thêm 1 anh Technical Lead. Đợt mình hỏi ông leader phỏng vấn thế nào, ổng nhận xét "Kiến thức base C# khá vững, nói được những thay đổi của C# từ 1.0 tới 5.0". Mặc dù mình chỉ là junior dev nhưng mình thấy phần này không khó, do lỡ tìm hiểu rồi nên post bài ...
Chẳng là gần đây, công ty mình vưa tuyển thêm 1 anh Technical Lead. Đợt mình hỏi ông leader phỏng vấn thế nào, ổng nhận xét "Kiến thức base C# khá vững, nói được những thay đổi của C# từ 1.0 tới 5.0". Mặc dù mình chỉ là junior dev nhưng mình thấy phần này không khó, do lỡ tìm hiểu rồi nên post bài này chia sẻ cho các bạn luôn. Kiến thức ở bài viết này khá có ích, thích hợp đem đi chém gió, phỏng vấn hoặc hù mem mới.
Lưu ý nhỏ: C# thường được release với .NET. C# là ngôn ngữ lập trình, còn .NET là 1 thư viện/framework (Ta có VB.NET, F#, ASP.NET v...v). Trong phạm vi bài viết, mình chỉ đề cập vê những thay đổi trong bản thân ngôn ngữ C#, không giới thiệu những công nghệ mới qua từng phiên bản .NET như EF, WIF, v...v nhé. Có một số phần mình đã viết rồi, chỉ dẫn link tới bài viết cũ nhé.
1. C# 2 - Giải quyết vấn đề từ C# 1
a. Kiểu dữ liệu Generic: Nói đơn giản, nó là kiểu <T> mà các bạn hay dùng ấy. Với generic, code trở nên gọn gàng sáng sủa hơn, ta cũng có thể tái sử dụng function cho nhiều kiểu dữ liệu khác nhau.
b. Kiểu dữ liệu nullable: Trong nhiều trường hợp, ta cần thể hiện giá trị null với kiểu dữ liệu tham trị như int, double v...v. Với 1 số ngôn ngữ khác, ta phải chuyển nó sang dạng tham chiếu như Interger, Double. Với C# 2, ta có thể dùng kiểu nullable, khai báo bằng cách: Nullable<int> hoặc int?. Rất ngắn gọn và đơn giản.
c. Delegate: Đã có thể sử dụng anonymous delegate, viết ngắn học hơn so với C# 1 d. Partial class: Một partial class có thể được khai báo trong nhiều file khác nhau. Partial class được áp dụng trong Winform, class tự sinh từ Entity Framework, giúp ta dễ dàng thêm chức năng vào form, class mà không cần động tới những class được C# tự tạo ra.
d. Iterator (IEnumerable): Để duyệt từng phần tử một mảng, ta có thể dùng hàm foreach. Iterator là một cực hình khi implement trong C# 1. Với từ khóa yield, việc tạo Iterator trong C# đã trở nên rất dễ ràng.
2. C# 3 - Cải tiến trong data access, LINQ chào đời
a. Một số thay đổi nhỏ trong compiler: Một số thay đổi nho nhỏ được C# thêm vào, giúp việc code trở nên nhẹ nhàng hơn, bạn có thể xem code của các thay đổi này trong 2 phần đầu của series C# hay ho.
- Tự implement getter, setter thông qua properties
- Khởi tại object và array một cách dễ dàng
- Khai báo bằng biến var
- Anonymous class
b. Lambda expression: Lambda expression giúp việc viết delegate trở nên dễ dàng hơn rất nhiều. Mình đã viết 1 bài khá kĩ về thứ này, bạn có thể xem lại nếu quên.
c. Extension method: Bạn đọc lại phần mình viết về extension method ở bài viết trong link nhé.
d. Query và LINQ: Đây là phiên bản C# đầu tiên LINQ ra đời, đã làm võ lâm dậy sóng, giang hồ chấn động. Những cải tiến như var, anonymous class, lamda expression, extension method đều là nền tảng để xây dựng LINQ.
e. Ứng dụng khác của LINQ: Ban đầu, LINQ được dùng để filter, sort v...v các object trong bộ nhớ. Nhờ sự trợ giúp của expression tree, LINQ đã có 1 số ứng dụng khác như: LINQ to SQL (Dịch lambda expression thành SQL, query trực tiếp dưới database), LINQ to XML, Parellel LINQ.
3. C# 4 - Thay đổi nho nhỏ
a. Cải tiến nhỏ giúp code ngắn gọn hơn: Thêm named arguments và optional parameters
b. Lập trình với dynamic: Đây là thay đổi lớn nhất và đáng chú ý nhất trong C#. Với dynamic, giờ đây ta có thể làm việc với các object từ những ngôn ngữ dynamic như Python, Ruby, Javascript, ... Nghe có vẻ hoành tráng nhưng mình thấy dynamic ít được xài trong cái project thật, không hiểu vì sao :(.
4. C# 5 - Giảm thiểu đau đầu khi code bất đồng bộ
Điểm nhấn lớn nhất của phiên bản C# 5 này chính là 2 từ khóa async và await. Nhiều function trong C# đã được hỗ trợ call async và await. Phần này thì mình xin thú thật là mình cũng đọc rồi, nhưng do chưa áp dụng nhiều nên không hiểu mấy, có lẽ khi mình hiểu sâu hơn về vấn đề này, mình sẽ viết 1 bài hướng dẫn. (Ngày xưa mấy cái như event, delegate mình cũng ngu vậy ấy, về sau gặp trong code nhiều là tự động khá lên à.).
Bản gốc: Blog tôi đi code dạo