iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
自我挑戰組

我推的Laravel系列 第 12

【Day-11】我推的Laravel-進階篇-Coding Style

  • 分享至 

  • xImage
  •  

簡介

Coding Style,可以翻作程式碼風格
之所以在進階篇的頭篇來作介紹,除了難度之外有以下幾點

  1. 閱讀程式的愉悅性: 你應該不會想看到有人把變數命名成$a、$b、$aaa吧
  2. 與他人協作: 如果分別兩個共用的Class,有同樣的功能性,假設insert好了,一個function名稱寫insert(),另一個寫insertData(),這樣改日用到時,一邊$postService->insert,另一邊$commentService->insetData(),可能會不小心寫錯
  3. Laravel、PHP的基本Coding Style: 後面會提到
  4. 顯得很專業(?

Coding Style有一定要遵循嗎?
嚴格來說沒有,如果對於你來說程式只要能跑就可以,那當然可以
但上面也提到了,你如果不是老闆、主管,終究會和人合作
現在有一定架構的團隊,基本上都會要求遵循既有的Coding Style

PSR

Laravel 遵循 PHP-FIG(PHP Framework Interoperability Group)制定的 PSR(PHP Standard Recommendations)標準,特別是 PSR-1、PSR-2 和 PSR-4。這些標準涵蓋了命名空間、類名、方法名、文件和目錄結構等方面的建議。遵循這些標準有助於保持代碼的一致性。

K&R、Allman

K&R 函數名和花括號單獨一行:

function a()
{
    // 函數內容
}

Allman 函數名和花括號同一行:

function a() {
    // 函數內容
}

官方文件是依循PSR-2
https://ithelp.ithome.com.tw/upload/images/20230925/20163286WHrMWxtacW.png
有興趣可以自己拜讀

駝峰、蛇式

駝峰命名法(Camel Case)

Laravel 通常使用此來命名類、方法、變數和路由。意思就是變數和方法名應該以小寫字母開始,並使用大寫字母來分隔單詞,例如 $userName 或 getUsersList()。

蛇式命名法(snake_case)

而跟駝峰常來比較的就是蛇式命名法(snake_case),其命名方式就是$user_name
不說別的,Mysql的表名、欄位名稱,通常是以蛇式命名
https://ithelp.ithome.com.tw/upload/images/20230925/20163286zHfnCLk99c.png

命名其意義

變數命名除了駝峰式之外,一般希望有它的意義
如: Request $request、$startTime
而不是 $r、$sT、$x、$y
說到$x、$y想到foreach

foreach($posts as $key => $value){
}

上面這個寫法,筆者覺得是可以,給初學者,可以知道$key代表、$value代表
但筆者覺得也可以寫成

foreach($posts as $key => $post){
}

註釋和文件塊:

使用有意義的註釋來解釋代碼的目的和操作。在函數、類和方法的開頭,通常使用 PHPDoc 風格的注釋,描述參數、返回類型和方法的目的。文件頂部通常包括版權信息、作者和描述。

刪除無用的註解

如:

// dd('測試');
// or
// $test = ['a' => 'aaa', 'b' => 'bbb'];
// return $test;
// or
// 先過濾參數、打API、回傳format存入資料庫

最後一行取決個人與團隊,這種比較偏向規劃程式碼寫法,筆者是會刪掉,下面會示範筆者認為註解寫法

function 範例

/**
 * 這寫上該function描述
 * @param  \Illuminate\Database\Eloquent\Model|string  $table
 * @param  array  $data
 * @param  string|null  $connection
 * @param  string|null  $deletedAtColumn
 * @return array<int, string|null>
 */
public function hosts($table, array $data = [], $connection = null, $deletedAtColumn = 'deleted_at'): array
{
    return [
        $this->allSubdomainsOfApplicationUrl(),
    ];
}

具備描述、傳入&回傳參數、以及回傳型態(: array)

註解寫法

// 創建一個包含用戶名的集合
$users = new Collection(['user1', 'user2', 'user3']);

// 使用 map 函數將用戶名轉換為大寫
$usersUpperCase = $users->map(function ($userName) {
    return strtoupper($userName);
});

註解寫英文還是中文

取決與團隊,現在及未來會不會有不會中文的同事,一般筆者偏向寫英文,比較沒有問題

總結

其實除了基本的Coding Style,主要還是看團隊
當然如果你覺得現在團隊寫的有問題,(也許)可以進行討論

一起寫出令人愉悅的程式碼吧!


上一篇
【Day- 10】我推的Laravel-基礎篇-Testing (with Fake)
下一篇
【Day-12】我推的Laravel-進階篇-OOP & SOLID
系列文
我推的Laravel31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言