@manhnguyenv

Welcome to my blog!

Write Clean Code

October 6, 2018 23:01

Write Clean Code (edit)

https://github.com/thangchung/clean-code-dotnet

https://www.codingblocks.net/software-development-tips-and-tricks/

Ternary Operator Example (? :)

return value = 10 ? true : false;

Null Coalescing Operator Example (??)

return artist ?? new Artist() {};

Prefer String interpolation

string temp = $"Name: {name}, Age: {age}";

Use expression bodied Methods

public string GetMessage() => return "Hello World";
public string Name => "Afzaal Ahmad Zeeshan"; 

A few things you should know prior to reading this guide:

  1. Improvements to C# that were made in its 6th version
  2. LINQ in .NET framework
  3. Asynchronous programming and Task object in C#
  4. Unsafe programming in C#, which allows you to go into memory management

Curly braces + Check null

public void Draw(Shape shape)
{
    if (shape == null)
        throw new ArgumentNullException("shape");

Mã sạch

October 6, 2018 21:53

Mã sạch (edit)

Bjarne Stroustup:

"Tôi thích mã của tôi thanh lịch và hiệu quả. Lô-gic nên đơn giản để làm cho nó khó gặp những lỗi ẩn, có tối thiểu những sự phụ thuộc để dễ dàng bảo trì, xử lý lỗi hoàn chỉnh theo những chiến lược thống nhất, và hiệu suất gần như tối ưu để không cám dỗ người ta làm mã lộn xộn với những trò tối ưu hóa lố lăng. Mã sạch là mã làm tốt một việc"

  • Xử lý lỗi không hoàn chỉnh
  • Đặt tên không nhất quán
  • Mã sạch là mã làm tốt một thứ

Grady Booch:

"Mã sạch là mã đơn giản và trực tiếp. Mã sạch được đọc như đọc văn xuôi được viết trôi chảy. Mã sạch không bao giờ làm lu mờ ý định của người thiết kế mà nó luôn có đầy những sự trừu tượng hóa rõ ràng và những dòng mã điều khiển dễ hiểu."

  • Trừu tượng hóa rõ ràng
  • Mã của chúng ta phải có tính thực-tế-nó-vậy, không phải có tính suy đoán, không chắc chắn
  • Nó chỉ gồm những gì thực sự cần thiết. Người đọc phải hiểu rõ điều chúng ta quyết định làm trong từng dòng mã.

Dave Thomas:

"Mã sạch là mã có thể được đọc và cải tiếng bởi một nhà phát triển bất kỳ chứ không phải chỉ tác giả của nó mới đọc nổi. Nó phải có cả kiểm thử đơn vị ở phía lập trình viên lẫn kiểm thử chấp chận do khách hàng thực hiện. Mã sạch có những tên có ý nghĩa. Nó chỉ đưa ra một cách để làm một việc chứ không đưa ra nhiều cách. Mã sạch có tối thiểu  những sự phụ thuộc luôn được định nghĩa một cách tường minh, và đưa ra một cách dùng rõ ràng và tối thiểu hóa các API. Mã nên dễ đọc bởi vì tùy từng ngôn ngữ, không phải mọi thông tin cần thiết đều có thể được thể hiện rõ ràng chỉ bằng mã."

  • Mã không có kiểm thử thì không thể gọi là sạch
  • Nhỏ hơn thì tốt hơn
  • Mã nên dễ đọc

Michael Feathers, tác giả của Working Effectively with Legacy Code:

  • Mã sạch bao giờ cũng trông như được viết bởi những người có tâm
  • Mã sạch là mã được để tâm tới

Ron Jeffries:

Trong những năm gần đây, tôi bắt đầu làm theo, gần như đầy đủ, những quy tắc của Beck về mã nguồn đơn giản. Xếp theo độ quan trọng thì thứ tự là:

• Chạy tất cả các kiểm thử;

• Không có sự trùng lặp;

• Diễn đạt tất cả các ý tưởng thiết kế có trong hệ thống;

• Có tối thiểu số lượng các lớp, phương thức, chức năng, và những thứ tương tự.

Trong số những quy tắc này, tôi quan tâm chủ yếu tới sự trùng lặp. Khi một điều được thực hiện nhiều lần, đó là một dấu hiệu cho thấy có một ý tưởng trong tâm trí chúng ta đã không được triển khai tốt trong mã nguồn. Tôi cố gắng tìm ra nó là gì. Sau đó tôi cố gắng thể hiện ý tưởng đó rõ ràng hơn.

“Với tôi, tính rõ nghĩa bao gồm việc đặt tên có ý nghĩa, và tôi thường phải đổi tên của một thứ gì đó nhiều lần cho tới khi vừa  ý. Với các công cụ viết mã hiện đại như là Eclipse, đổi tên không hề phức tạp, vì vậy không phải là vấn đề lớn đổi với tôi trong việc đổi các tên. Tuy nhiên, tính rõ nghĩa cũng không chỉ nằm trong các tên. Tôi cũng xem xét liệu có đối tượng hay phương thức nào làm nhiều hơn một việc hay không. Nếu nó là một đối tượng, có thể sẽ cần phải chia nó thành hai hoặc nhiều đối tượng. Nếu nó là phương thức, tôi thường dùng kỹ thuật tái cấu trúc “Extract Method”, kết quả là tôi có một phương thức diễn đạt rõ ràng hơn về việc nó làm, và một số phương thức con diễn đạt việc đó được làm như thế nào.”

Sự trùng lặp và tính rõ nghĩa đã chiếm rất nhiều thời gian của tôi trong định nghĩa về mã sạch, đổi lại chỉ với hai điều đó thôi cũng có thể làm cho mã xấu trở nên sạch hơn rất nhiều. Tuy nhiên, còn một điều nữa mà tôi vẫn làm để viết mã sạch thì khó diễn đạt hơn một chút.

“Sau nhiều năm làm công việc này, tôi nhận thấy rằng có vẻ mọi chương trình điều được tạo thành từ những yếu tố rất giống nhau. Ví dụ như “tìm thứ gì đó trong một bộ sưu tập (collection)”. Cho dù cái chúng ta có là một cơ sở dữ liệu các hồ sơ nhân viên, hay một bảng băm (hashmap) của khóa và giá trị, hoặc một mảng các phần tử loại gì đó, thì chúng ta cũng đều nảy sinh nhu cầu tìm lấy một món trong chỗ đó. Thế nên khi tôi muốn làm cái việc “tìm thứ gì đó”, tôi thường bao gói việc triển khai cụ thể vào một lớp hoặc phương thức trừu tượng hơn. Việc này cho tôi một vài lợi thế thú vị”.

“Tôi hoàn toàn có thể triển khai chức năng ngay lúc đó một cách đơn giản bằng cách sử dụng một bảng băm (hashmap) chẳng hạn, nhưng do tất cả các tham chiếu đến việc tìm kiếm đó đều được gói lại trong trừu tượng hóa nhỏ bé của tôi(một hàm tìm kiếm), tôi có thể thay đổi cách thức triển khai việc tìm kiếm bất cứ lúc nào tôi muốn. Và tôi có thể đi tiếp nhanh hơn trong khi vẫn có thể thay đổi nó sau.”

“Thêm vào đó, việc trừu tượng hóa bộ sưu tập (collection) lên thường giúp tôi chú ý tới việc gì đang thực sự diễn ra, và giữ cho tôi khỏi sa vào việc triển khai những cách làm phức tạp (arbitrary collection), trong khi tôi thực ra chỉ cần vài cách cực kỳ đơn giản để tìm kiếm điều tôi muốn”.

“Giảm thiểu trùng lặp, cực kỳ rõ nghĩa, và sớm xây dựng những trừu tượng hóa nhỏ.

Với tôi, đó là những thứ làm nên mã sạch”.

Ward Cunningham:

"Bạn biết bạn đang làm việc với mã sạch khi mỗi đoạn mã bạn đọc đúng như những gì bạn mong đợi. Bạn có thể gọi nó là mã đẹp khi mã đó làm cho ngôn ngữ trông cứ như là ngôn ngữ được tạo ra để giải quyết vấn đề đó."

Ý nghĩa của đoạn phim:

Phần lớn của đoạn phim đó là tác vụ cuộn và nhảy tới các mô-đun khác.

“Bob nhảy vào mô-đun.”

“Anh ta cuộn xuống chức năng cần phải sửa đổi.”

“Anh ấy dừng lại, cân nhắc các lựa chọn.”

“Ô, giờ thì hắn cuộn lên đầu mô-đun để kiểm tra việc khởi tạo của 1 biến.”

“Giờ anh ấy cuộn lại chỗ cũ và bắt đầu gõ.”

“Opp, anh xóa câu vừa gõ.”

“Anh lại gõ lại câu đó.”

“Anh lại xóa nó một lần nữa..”

“Anh gõ một nửa của một thứ khác, nhưng rồi lại xóa nó đi.”

“Anh cuộn xuống một hàm khác, chỗ mà có gọi tới hàm anh ta đang sửa đổi, để xem nó được gọi như thế nào.”

“Anh cuộn lại chỗ cũ, gõ lại y hệt những gì vừa xóa.”

“Anh tạm dừng.”

“Anh xóa đoạn code đó một lần nữa!

“Anh ta mở tạm một cửa sổ khác để xem xét một subclass. Liệu chức năng kia có bị ghi đè không?

. . .

Bạn thấy vấn đề rồi chứ. Thực vậy, tỷ lệ giữa thời gian đọc mã so với viết mã nhiều hơn 10:1.

Chúng ta liên tục phải đọc lại mã cũ, việc này chiếm một phần nhất định trong quá trình viết mã mới. Bởi vì tỷ lệ này cao như vậy, chúng ta muốn việc đọc hiểu mã phải thật dễ dàng, ngay cả khi nó làm cho việc viết mã trở nên khó khăn hơn. Tất nhiên ta không thể viết mã mà không cần đọc chính đoạn mã đang viết (trừ khi bạn nhắm mắt trong khi viết mã), thế nên làm cho mã dễ đọc cũng thực sự giúp cho việc viết mã trở nên dễ dàng hơn.

 

Clean code

October 3, 2018 14:53

Clean code (edit)

It's very useful especially if you want to arrange or compare codes, thanks for the people who answer this question, I've got the answer from here and would like to share it with Stackoverflow:

Visual Studio has ability to delete empty lines in replace operation using regular expressions.

  • Click Ctrl-H (quick replace)

  • Tick "Use Regular Expressions"

  • In Find specify ^$\n

  • In Replace box delete everything.

  • Click "Replace All"

All empty lines will be deleted.

Regular expression for empty line consist of

Beginning of line ^

End of line $

Line break \n

Note that normally in Windows an end of line indicated by 2 characters  - Carriage Return (CR, ASCII 13, \r) Line Feed (LF, ASCII 10, \n).

A regex to remove blank lines that are/aren't really blank (i.e. they do/don't have spaces): ^:b*$\n

To remove double lines: ^:b*\n:b*\n replace with: \n

* for Visual Studio 2013 and above:*

^\s*$\n

and for double lines:

^(?([^\r\n])\s)*\r?\n(?([^\r\n])\s)*\r?\n

How to Remove Blank Lines in Visual Studio

We can use regular expressions to find blank lines and replace them with white spaces.

Following steps are to find blank lines and replace:

In visual studio 2012.

1. Press “ Ctrl+ Shift + H “.

And window shown like:

replace

2. Write regular expression For (vs2012) "^(?([^\r\n])\s)*\r?$\r?\n" or for vs 2010 "^$\n or ^&\n" in find what box.

3. Leave Replace with box as empty.

4. In find check Use Regular Expressions.

Then Replace or Replace all as you want.

These steps will remove all blank spaces from current document or whole project as you choose Look in box.

Other regular expressions are predefined by visual studio as in below image.(or can see by (a)+ button on find what box).

expressions

Categories

Recent posts