Friday, 6 January 2012

Quản lý tốt code để thành chuyên gia


Có quá nhiều thứ để phải học để trở thành lập trình viên pro, những hãy quản lý những gì mình có để mọi thứ không bị rối rém 

1 - Chú thích và tài liệu đi kèm

Các IDE  (Integrated Development Environment) tốt luôn có hộ trợ tốt cho bạn, vì không phải ai cũng có thể nhớ hết các chức năng,hàm của một ngôn ngữ lập trình, comment sẽ giúp người đọc và người viết gợi nhớ hơn, kèm theo đó là tài liệu để học đã có sẵn trong các công cụ IDE. Hãy tận dụng nóó


2 - Căn chỉnh code

Mọi thứ sẽ đi từ từ,nhưng trước hết hãy coi những dòng của bạn là một bài văn, bạn trình bày  nó ra sao để người đọc thấy hứng thú.
Style 1:
  1. function foo() {  
  2.     if ($maybe) {  
  3.         do_it_now();  
  4.         again();  
  5.     } else {  
  6.         abort_mission();  
  7.     }  
  8.     finalize();  
  9. }  
Style 2:
  1. function foo()  
  2. {  
  3.     if ($maybe)  
  4.     {  
  5.         do_it_now();  
  6.         again();  
  7.     }  
  8.     else  
  9.     {  
  10.         abort_mission();  
  11.     }  
  12.     finalize();  
  13. }  
Style 3:
  1. function foo()  
  2. {   if ($maybe)  
  3.     {   do_it_now();  
  4.         again();  
  5.     }  
  6.     else  
  7.     {   abort_mission();  
  8.     }  
  9.     finalize();  
  10. }  

Ví dụ PEAR :
  1. function foo()  
  2. {                     // placed on the next line  
  3.     if ($maybe) {     // placed on the same line  
  4.         do_it_now();  
  5.         again();  
  6.     } else {  
  7.         abort_mission();  
  8.     }  
  9.     finalize();  
  10. }  


3 - Rút bớt comment không cần thiết

Trước một đống code do coder cũ để lại hãy tối ưu nó rồi xem lại trang code đó bạn sẽ thấy khác biệt.
  1. // get the country code  
  2. $country_code = get_country_code($_SERVER['REMOTE_ADDR']);  
  3.   
  4. // if country code is US  
  5. if ($country_code == 'US') {  
  6.   
  7.     // display the form input for state  
  8.     echo form_input_state();  
  9. }  

  1. // display state selection for US users  
  2. $country_code = get_country_code($_SERVER['REMOTE_ADDR']);  
  3. if ($country_code == 'US') {  
  4.     echo form_input_state();  
  5. }  

4 - Gom nhóm 

Tận dụng khoảng trống để code của bạn ưa nhìn bằng cách gom nhóm theo chức năng,hàm..
  1. // get list of forums  
  2. $forums = array();  
  3. $r = mysql_query("SELECT id, name, description FROM forums");  
  4. while ($d = mysql_fetch_assoc($r)) {  
  5.     $forums []= $d;  
  6. }  
  7.   
  8. // load the templates  
  9. load_template('header');  
  10. load_template('forum_list',$forums);  
  11. load_template('footer');  


5 - Đặt tên

PHP hay các ngôn ngữ khác cũng vậy, đặt tên cho biến, hàm, lớp... nên để ý, mình thích kiểu đặt tên trong Java.
  • strpos() vs. str_split()
  • imagetypes() vs. image_type_to_extension()
Những cách phổ biến sau:
  • camelCase:từ đầu tiên không viết hoa,các từ sau viết hoa.
  • underscores: gạch dưới: mysql_real_escape_string().

  1. class Foo_Bar {  
  2.   
  3.     public function someDummyMethod() {  
  4.   
  5.     }  
  6.   
  7. }  
  8.   
  9. function procedural_function_name() {  
  10.   
  11. }  


6 - Nguyên tắc DRY

Hãy sử dụng những đoạn code lập lại cho hợp lý trước khi bạn làm hệ thống bị ngập lụt,tìm hiểu khẩu hiệu dưới đây:
“Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.”
  1. $this->load->view('includes/header');  
  2.   
  3. $this->load->view($main_content);  
  4.   
  5. $this->load->view('includes/footer');  

7 - Tránh sự lồng code

Có quá nhiều code lồng nhau, nếu để cho IDE format thì thật tồi tệ.
  1. function do_stuff() {  
  2.   
  3. // ...  
  4.   
  5.     if (is_writable($folder)) {  
  6.   
  7.         if ($fp = fopen($file_path,'w')) {  
  8.   
  9.             if ($stuff = get_some_stuff()) {  
  10.   
  11.                 if (fwrite($fp,$stuff)) {  
  12.   
  13.                     // ...  
  14.   
  15.                 } else {  
  16.                     return false;  
  17.                 }  
  18.             } else {  
  19.                 return false;  
  20.             }  
  21.         } else {  
  22.             return false;  
  23.         }  
  24.     } else {  
  25.         return false;  
  26.     }  
  27. }  
đẹp hơn :
  1. function do_stuff() {  
  2.   
  3. // ...  
  4.   
  5.     if (!is_writable($folder)) {  
  6.         return false;  
  7.     }  
  8.   
  9.     if (!$fp = fopen($file_path,'w')) {  
  10.         return false;  
  11.     }  
  12.   
  13.     if (!$stuff = get_some_stuff()) {  
  14.         return false;  
  15.     }  
  16.   
  17.     if (fwrite($fp,$stuff)) {  
  18.         // ...  
  19.     } else {  
  20.         return false;  
  21.     }  
  22. }  

8 - Độ dài của dòng

Đôi mắt của chúng tôi được thoải mái hơn khi đọc các cột cao và thu hẹp của văn bảnĐây chính là lý do tại sao các bài báo như thế này:
Hãy từ bỏ đoạn code quá dài
  1. // bad  
  2. $my_email->set_from('test@email.com')->add_to('programming@gmail.com')->set_subject('Methods Chained')->set_body('Some long message')->send();  
  3.   
  4. // good  
  5. $my_email  
  6.     ->set_from('test@email.com')  
  7.     ->add_to('programming@gmail.com')  
  8.     ->set_subject('Methods Chained')  
  9.     ->set_body('Some long message')  
  10.     ->send();  
  11.   
  12. // bad  
  13. $query = "SELECT id, username, first_name, last_name, status FROM users LEFT JOIN user_posts USING(users.id, user_posts.user_id) WHERE post_id = '123'";  
  14.   
  15. // good  
  16. $query = "SELECT id, username, first_name, last_name, status 
  17.     FROM users 
  18.     LEFT JOIN user_posts USING(users.id, user_posts.user_id) 
  19.     WHERE post_id = '123'";  


9 - Tệp và thư mục cũng cần quản lý

Tốt nhất hãy tham khảo vài Framework, họ là những chuyên gia mà:

10 - Tên phù hợp

Thông thường, các biến được mô tả và chứa một hoặc nhiều từTuy nhiên, điều này không nhất thiết áp dụng cho các biến tạm thờiChúng có thể được như ngắnnhư  một nhân vật duy nhất.
Đó là một thực hành tốt để sử dụng tên phù hợp cho các biến tạm thời của bạn cùng một loại vai tròDưới đây là một vài ví dụ  tôi có xu hướng sử dụng trong mã của tôi:
  1. // $i for loop counters  
  2. for ($i = 0; $i < 100; $i++) {  
  3.   
  4.     // $j for the nested loop counters  
  5.     for ($j = 0; $j < 100; $j++) {  
  6.   
  7.     }  
  8. }  
  9.   
  10. // $ret for return variables  
  11. function foo() {  
  12.     $ret['bar'] = get_bar();  
  13.     $ret['stuff'] = get_stuff();  
  14.   
  15.     return $ret;  
  16. }  
  17.   
  18. // $k and $v in foreach  
  19. foreach ($some_array as $k => $v) {  
  20.   
  21. }  
  22.   
  23. // $q, $r and $d for mysql  
  24. $q = "SELECT * FROM table";  
  25. $r = mysql_query($q);  
  26. while ($d = mysql_fetch_assocr($r)) {  
  27.   
  28. }  
  29.   
  30. // $fp for file pointers  
  31. $fp = fopen('file.txt','w');  

11 -  Viết hoa các từ cần thiết

Trong khi thêm code SQL hãy viết hoa tất cả các từ khóa SQL
  1. SELECT id, username FROM user;  
  2.   
  3. UPDATE user SET last_login = NOW()  
  4. WHERE id = '123'  
  5.   
  6. SELECT id, username FROM user u  
  7. LEFT JOIN user_address ua ON(u.id = ua.user_id)  
  8. WHERE ua.state = 'NY'  
  9. GROUP BY u.id  
  10. ORDER BY u.username  
  11. LIMIT 0,20  

12 - Tách code và dữ liệu

Lại sử dụng các công cụ hay framework để tham khảo về việc phân tách dữ liệu và code mà ở đây là phần hiển thị HTML và code 
Framework  PHP  Khá ok:
Mẫu khá chuẩn:


13 - Cú pháp bên trong template

Nên xem xét việc kết hợp code và template
  1. <div class="user_controls">  
  2.     <?php if ($user = Current_User::user()): ?>  
  3.         Hello, <em><?php echo $user->username; ?></em> <br/>  
  4.         <?php echo anchor('logout''Logout'); ?>  
  5.     <?php else: ?>  
  6.         <?php echo anchor('login','Login'); ?> |  
  7.         <?php echo anchor('signup''Register'); ?>  
  8.     <?php endif; ?>  
  9. </div>  
  10.   
  11. <h1>My Message Board</h1>  
  12.   
  13. <?php foreach($categories as $category): ?>  
  14.   
  15.     <div class="category">  
  16.   
  17.         <h2><?php echo $category->title; ?></h2>  
  18.   
  19.         <?php foreach($category->Forums as $forum): ?>  
  20.   
  21.             <div class="forum">  
  22.   
  23.                 <h3>  
  24.                     <?php echo anchor('forums/'.$forum->id, $forum->title) ?>  
  25.                     (<?php echo $forum->Threads->count(); ?> threads)  
  26.                 </h3>  
  27.   
  28.                 <div class="description">  
  29.                     <?php echo $forum->description; ?>  
  30.                 </div>  
  31.   
  32.             </div>  
  33.   
  34.         <?php endforeach; ?>  
  35.   
  36.     </div>  
  37.   
  38. <?php endforeach; ?>  


14 - Đối tượng và thủ tục

Lập trình hướng đối tượng có thể giúp bạn tạo ra mã cũng có cấu trúc. Nhưng điềuđó không có nghĩa là bạn cần phải từ bỏ lập trình thủ tục hoàn toàn. Thực sự tạo ra một kết hợp của cả hai phong cách có thể được .Đối tượng nên được sử dụng để đại diện cho dữ liệu, thường trú tại một cơ sở dữ liệu.
  1. class User {  
  2.   
  3.     public $username;  
  4.     public $first_name;  
  5.     public $last_name;  
  6.     public $email;  
  7.   
  8.     public function __construct() {  
  9.         // ...  
  10.     }  
  11.   
  12.     public function create() {  
  13.         // ...  
  14.     }  
  15.   
  16.     public function save() {  
  17.         // ...  
  18.     }  
  19.   
  20.     public function delete() {  
  21.         // ...  
  22.     }  
  23.   
  24. }  
Thủ tục.
  1. function capitalize($string) {  
  2.   
  3.     $ret = strtoupper($string[0]);  
  4.     $ret .= strtolower(substr($string,1));  
  5.     return $ret;  
  6.   
  7. }  

Lập trình hướng đối tượng trong PHP



Object-Oriented Programming in PHP

15 - Đọc Mã nguồn mở


Dự án mã nguồn mở được xây dựng với đầu vào của nhiều nhà phát triển. Các dự án này cần phải duy trì một mức độ cao của khả năng đọc  mà nhóm có thể làm việc cùng nhau một cách hiệu quả nhất có thể.  vậy, nó là một ý tưởng tốt đểduyệt qua các mã nguồn của các dự án này để quan sát những gì các nhà phát triển đang làm.

Nguồn : tutsplus


No comments:

Post a Comment