# 有沒有辦法做到 個性化Coding Style? 小弟覺得目前程式碼排版的方法好像還太原始 想激發大家對於**個人客製化程式碼排版**(我想稱之為**re-formatter**) 的想像與探討 不曉得可行性與否 如果可行,希望最終有人能著手發展這個想法 ## 關於Coding Style > 程式碼 = 將邏輯作為文字語句排列組合的樣子 每個人都有自己舒適的排版風格 就像閱讀一篇文章,文字不能完全沒有排版,需要有空格、有換行 這就是美感 世界上可能有公認最舒服的排序方式 雖說在人群間美感也許大同小異,但還是會有細微的差異 實際上,相同的排版方式對每個人來說感受都不太一樣 文章的標點符號受到筆者平時的換氣、講話習慣影響 接著,會影響到閱讀者的停頓與連貫 有人一次能閱讀5個字、有人能讀到7個字的名詞 甚至選擇不同的**字型(font style)** 都會影響到這些 每個人有所差異,每個人審美觀不同 ## 現有問題及痛點 不同的程式碼風格的人要一同工作,這一直都是寫程式協作上很大的磨合成本 以下從個人與協作上的幾個面向角度出發 ### 1. 學習新語言 每當學習一門全新的語言時,無法立刻習慣與轉換 (尤其同時寫兩門不同語言的時候) 例如:不同語言間使用不同的英文字來表達**函式**: - def - function - func - fun - f 有時候我只想寫`func` 我不想在鍵盤上敲`function`這麼多字、又覺得`fun`過短,也不想寫成`def` 我希望能在javascript裡面使用`func`,希望`func`代表著`function` 當IDE或編譯器在函示的位置上看到`func`時,程式碼在執行時就會自動轉成`function` ``` a. 我希望能夠客製化一個程式語言裡的內置關鍵字 (customize program keyword) ``` ### 2. 對方怎麼沒有排版 之前在公司看到兩個新人,在同一份專案間互相改來改去 A看到B寫的code怎麼都沒有排版,於是按IDE的快捷鍵 將整頁程式碼排版成IDE設定的風格,覺得自己做出了貢獻 後來B看到A寫的code,也覺得A怎麼都沒有排版 空白鍵的數目都對不上來,git比對一整片都是紅色的difference 於是也按下快捷鍵,將整頁程式碼排版成IDE設定的風格,也覺得自己做出了貢獻 兩人互相覺得,對方寫完code怎麼沒有做排版 來來回回好幾次,然後git紀錄就增長了虛肥 結果只是兩人IDE設定的tab, space不同 ### 3. 很嚴謹的風格,但沒有也沒影響 有的專案規定比較嚴格,要求良好的寫程式習慣: - 要在行尾加分號 - 每個物件的成員都要加上public或private (即使該語言不用加任何東西,預設就代表public的效果) - 頁尾要加一行空白 每次寫程式我都會留意,照著規範走 最終專案的程式碼一致也讓人看起來順眼 但有時候也會思考,我每次多打的這些字、這些留意的心力,是不是只是為了風格的一致性? ### 4. 段落換行空幾格 每個人看到文章段落密集、鬆散的舒適度不一樣 在段落與段落,有的人喜歡看到一行空白、有的喜歡兩行空白 有的空白數目要取決於前後文到底多長 > 記得國中時 > 我在網上寫小說都不換行、整篇密密麻麻的 > 然後被同學直接吐槽:『阿你家按Enter是要錢喔?』 > > 從此我就沒省過了 ### 5. 一行最多有幾個字 一行程式碼到底只能有多少個字元寬? - 80字換行 - 120字換行 - 不限 我不想讓程式碼被壓得太扁平,更不想看到程式碼突出螢幕範圍太多 可是有的人螢幕就真的比較大阿!! ``` b. 我希望每個人可以自訂排版方式,包括參數引數的換行、哪裡要留空白鍵 但只會在自己的電腦上看到,不會影響到repository 將本地的程式碼通通壓縮後(刪去全部空白以及無用輔助詞) 或者照官方公訂的標準版本排版 或者某些方式處理,才進行git比對、上傳到github 但此會衍生出一個問題,造成在github上的code可讀性不佳 希望自訂的排版方式也可以在瀏覽遠端儲存庫時套用 另外,因為手機比較小,為方便在公車捷運上也能隨時閱讀 如果這一點能搭配 a. 跨裝置整合再好不過 ex: 電腦版呈現`func` 手機版呈現`fn`(縮小尺寸) ``` ### 6. 不同的地方,不同的命名Style 每種程式語言通常都會有一些**習慣、推薦規範**: - 檔案名稱只能全部小寫 - 常數要全大寫 - 寫物件要用底線蛇形命名 - 寫函式名稱要大駝峰命名 - 寫函式內部變數要小駝峰命名 - html tag, class name 要小寫搭配-號 - html id 要小寫駝峰命名 ... 我也知道官方推崇駝峰命名 `helloWorldApiRequest` 但偏偏有時候又希望能夠交雜,因為我覺得這樣變數的單字可讀性比較佳 就像我們真正在看英文單字 `helloWorld_apiRequest` ~~到底英文為什麼還要區分大小寫,哪個天才發明的~~ 語意牽涉到語言本身符號,想往上怪罪都追溯不完 > 其實我還有抱有好多類似疑問 > ~~為什麼規定特殊符號只有這些!@#$%^&*()\=+...~~ > ~~鍵盤為什麼只有這麼多按鍵~~ ``` c. 我希望每個人可以自訂變數名稱的呈現方式,可以隨意調整大小寫與底線 一樣只會在自己的電腦上看到 甚至希望可以有變數名稱叫 "hello world(api request) - int64" 跳脫空白與特殊符號的限制,不用被過往程式命名規則綁死 --- 以下是異想天開: 甚至有沒有空白、有沒有分隔符號或底線,只要語義對了,都代表著相同物件 "hello_world (api request) - int64" "hello world(apiRequest) int64" 希望有天能徹底解決由人類語言本身(溝通或書寫)所產生的障礙 ex: 由多個術語描述同個實體或語義 "referer"vs"referrer"、"溼姊"vs"濕姐"、"Hello"vs"Hello"、"磁碟"vs"軟盤"、"一二三"vs"甲乙丙" ``` ### 7. 不同程式語言間的整合 這個是最終極的版本,跨語言的整合 #### 一些不同語言的規範與約定 有的html元素是self-closing tag,只有opening卻沒有closing tag 在html內優先使用雙引號 在javascript內優先使用單引號 大寫駝峰代表export 小寫駝峰代表local 字串用雙引號 字元用單引號 多行句尾都加上逗號 但最後一行有的語言要加、有的語言不能加逗號 `_hello_` `__hello__` ... ... ... 每種程式語言都有各自不一樣的用法特色 假如每一種都寫,難道只能每一種都記憶嗎QQ #### 程式語言基本用法 常見的語言迴圈有這幾種寫法 ``` for (x;x;x) { ... } ``` ``` for x; x; x { ... } ``` ``` for x in range(x): ... ``` 這些有辦法自定義、或者互通嗎? ``` d. 我希望我寫任何的程式語言都能用目前已熟練的語言進行開發 不過考慮到型別類型與物件導向的支援度,這實際上應該不可行... 比較可行的是,希望透過設定這些關係達成程式語言的映射 能夠將if, for, function等用法,轉換成與熟悉語言類似的寫法 達成像排列積木那樣操控程式的基本邏輯 ``` --- ## 希望的願景 程式碼排版工具層出不窮,配置方式都不同 各家排版工具互相競爭紛擾、百家齊鳴 約定成俗的東西越來越多,最終產出一版又一版的 Coding Convention 導致工程師的腦容量越來越大 現在2023年11月,一進到新公司 主管馬上要你安裝某種formatter外掛,然後丟給你一包程式碼整理的工具設定檔 要求你每次寫完程式碼後,使用這套設定來做排版並上傳 目的是為了保持專案程式碼的一致性風格 但,程式碼語義應該是不受到任何排版風格影響的 這好像違背了每個人應該是看自己舒適的扣看得爽的初衷 寫程式的風格什麼時候是需要全體共同討論決定的事情呢? 辯論這個是需要花費時間與精力的事情、也很沒有意義 討論完後一定有人不願意買單 新進人員的意見也無法傳達給做出決策卻早已離開的元老 每個人都有自己的偏好 為什麼我不能有我看得順眼的風格,雖然看起來獨特但不影響與他人友好協作呢 (如果連變數的英文命名、程式上的邏輯風格也能相同就更好了 嘛,但這是胡思亂想的、好像沒有辦法解決... 如果連演算法風格都能一致,那是很可怕的事) 希望有朝一日 工程師能暢快的帶著自己的Profile Setting到處趴趴走 到哪不論看什麼專案、到處看了什麼都舒服,因為都是自己習慣的風格 不用再記憶這些風格的眉眉角角,而是專注在眼前的邏輯與意境上 所以,希望未來有人能做出這樣完整的一套工具 不曉得現在有沒有團隊在思考類似的解決方案,或者已有什麼套件能達成? 或者這樣實際上可能會面臨、產生什麼問題嗎? 整理過往寫程式的體驗,拋出自己想法 期待這顆硬邦邦的磚頭引來讓大家思考與討論,激盪出更好的辦法 <!-- ## 關於難易度(我目前的認知) 因為不知道現有技術能夠做到哪一個程度 也不曉得這個會是從Compiler、IDE、Plugins哪一個層面下手解決才是可行的 所以照著提到的點羅列了 A. B. C. D. 項目 a. 應該可以透過修改Compiler的Lexical Tokens達成 b. Formatter工具 跟 JetBrains IDE 能做到客製化的排版方式,但沒有做後續 我覺得比較關鍵的壓縮、上傳、瀏覽這段。 或許寫個腳本比較快(?:在git pull下來時在本地端做好個人排版;在每次做git比對、上傳repo時先執行壓縮 c. 調整變數大小寫這段不曉得 "hello world(api request) - int64" 這段應該能使用dict, map, object等方式寫字串進去作為key 雖然能自訂想要的名稱,但寫法不直覺,也無法透過Navigate來Trace code 或許重新設計一門新的語言比較快(? d. 真的不曉得,這已超出我的認知範圍了 -->
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up