---
title: 失憶症限定,開發手冊製作
slideOptions:
transition: slide
tags: 簡報
---
## 失憶症限定,開發手冊製作
### 以Swift為例
---
##### Present by: 游諭
![](https://i.imgur.com/n8gy9NT.png)
To this keynote.
---
| Key | value |
| -------- | -------- |
| name | 游諭 |
|nickName | "Yu" |
|now|Craftsman|
|reading|Git、命名原則|
---
參考資料:
1. cc2e: 第32章 自我文件化程式碼
2. 易讀程式碼之美學
3. Apple - Markup format
4. jazzy
5. Medium
note:
軟體開發實務指南 36頁(779~815)
---
## Agenda
- 文件
- 註解
- MarkDown
- Jazzy
---
## 文件
- <span style="color:orange">文件</span>
- 註解
- MarkDown
- Jazzy
----
> 好的文件說明是程式設計師放在程式裡面、展現其專業成就的標誌。
> 『軟體開發實務指南』
----
![](https://i.imgur.com/Wvu5lPs.jpg =500x600)
----
什麼是好的文件說明?🤫
----
程式碼自我檢查
1. 類別名稱有意義嗎?能顯示其核心意圖嗎?
2. 每個子程式名稱都能準確指示其確切做些什麼嗎?
3. 變數名稱有意義嗎?
4. 迴圈變數能提供更多資訊嗎?而不是`i`, `j`, `k`?
5. 程式術語是否盡可能用問題領域術語,而不是CS術語?
---
## 註解
- 文件
- <span style="color:yellow">註解</span>
- MarkDown
- Jazzy
----
### 程式碼文件
> 註解還是不註解?to be, or not to be
----
### 反對寫註解
- 我已經有夠多的程式碼要看了,何必再去讀一大堆註解?
- 註解沒什麼用,他只不過是用更囉唆的方式又重複寫一遍程式碼...
- 沒人更新程式碼的註解
- 當精力其中在程式碼時,不該分心去寫註解。
----
### 支持寫註解
- 被追問“你這段程式碼到底在寫什麼”的折磨。
- 寫註解不是浪費時間,而是給自己一個工作上的指標。
- Pseudo code 型態的註解 [wiki](https://zh.wikipedia.org/wiki/伪代码)
----
### 高效率註解
1. 註解風格
2. 虛擬碼設計
3. 註解技術
----
1. 註解風格 - 難以維護的風格
``` c
不易編輯
/***********************************/
/* class: 範例類別 */
/* */
/*作為簡報範例使用 */
/***********************************/
//class: 範例類別
//
//作為簡報範例使用
```
----
1. 註解風格 - 簡單維護的風格
```c
/*********************************
* class: 範例類別
*
* 作為簡報範例使用
*********************************/
```
----
2. 虛擬碼設計 - 1A2B Pseudo code
```swift
簡易版本
while A != 4
A= 0, B = 0
if isvalid(input)
for i in 0...3 && j in 0...3
if answer[i] == input[j]
if i == j A++;
if i != j B++;
進階版本
當不是4A0B
重設為0A0B
如果輸入合法
遍歷正確答案與輸入答案
當出現字元相等時:同格則A+1,不同格則B+1
```
----
- 假如在寫程式碼之前以註解先勾勒出程式碼,完成程式碼之日,也是註解寫好之時。
- 再填入低層次的程式碼之前,就以寫出高層次的虛擬碼,因此可以獲得所以設計方面的好處。
- 當發生難以設計邏輯時,使用虛擬碼整理思路,編碼會更容易,註解也自然而然做好了。
----
3. 註解技術 - Know How
1. 行尾註解
2. Why > How
3. 程式碼本身的註解功能 a.k.a. 命名
4. 子程式的介面假設
5. 標註類別、檔案、APP
6. IEEE ISO 軟體開發標準
```
///建立一個新帳號
if accountType == AccountType.NewAccount{
...
}
```
note:
1. 宣告輸入輸出資料時使用
```swift
func demoFunc(
data:String //需要處理的資料
for:Int //資料處理的參考
)->String //回傳的資料是如何如何*&^%
```
2. Why > how
3. 程式碼本身的註解功能 a.k.a. 命名
4. 子程式的介面假設
1. 斷言前制條件與後製條件 cc2e ch8.2
2. 子程式的侷限性
3. 說明子程式的全域效果
4. 紀錄演算法資料來源
5. 使用MD註解程式各部分
---
## Xcode mark down
- 文件
- 註解
- <span style="color:green">MarkDown</span>
- Jazzy
----
## Markdown v.s. Markup
----
1. Description
1. Parameters
1. Throws
1. Returns
----
### 單行或是區域註解區別
```
Single Line
/// Quick help Syntax
//: Playground Syntax
Block Comment
/** */ Quick help Syntax
/*: */ Playground Syntax
```
----
Italics, Bold
```
**bold** or *italic*
__bold__ or _italic_
```
----
lazy like me: `cmd`+`opt`+`/`
note:
Attention
**Inserting Callouts**:
* Author
* Authors
* Bug
* Complexity
* Copyright
* Custom Callout
* Date
* Example
* Experiment
* Important
* Invariant
* Note
* Pre-condition
* Post-condition
* Remark
* Requires
* See Also
* Since
* Version
* Warning
---
## Xcode 插件
- 文件
- 註解
- MarkDown
- <span style="color:orange">Jazzy</span>
----
![](https://i.imgur.com/SvEjNGh.jpg)
----
`$> jazzy --min-acl internal`
note:
```
MIN ACL
Config file: min_acl
Command line: --min-acl [private | fileprivate | internal | public | open]
minimum access control level to document
Default: public
```
---
## Review today:
- <span style="color:orange">文件</span>
- <span style="color:yellow">註解</span>
- <span style="color:green">MarkDown</span>
- <span style="color:orange">Jazzy</span>
----
![](https://i.imgur.com/AdgIGkA.jpg)
----
## 避免寫作抗拒
- 原始碼應當含有程式大部分的關鍵資訊。
- 註解應說出程式碼無法說出的事情,如概述或用意。
- 差勁的文件/註解只會浪費時間,好的註解才有價值。
- 有些註解風格需要重複性勞動,應改用易於維護的註解風格。
note:
好的程式碼本身就是最好的說明。
---
## before Q&A
找人共讀/筆:易讀程式碼之美學
----
## Q&A
----
### Thank you
spoiler alert: Pseudo code
note:
Source:
[Apple Developer - Markup format](https://developer.apple.com/library/archive/documentation/Xcode/Reference/xcode_markup_formatting_ref/index.html#//apple_ref/doc/uid/TP40016497-CH2-SW1)
[jazzy - Github](https://github.com/realm/jazzy)
[Easy Documentation for your Swift project using Jazzy](https://medium.com/@arpit.cor/easy-documentation-for-your-swift-project-using-jazzy-9117f6a8709a)
```
$> jazzy -h config
OUTPUT
Config file: output
Command line: -o, --output FOLDER
Folder to output the HTML docs to
Default: docs
SDK
Config file: sdk
Command line: --sdk [iphone|watch|appletv][os|simulator]|macosx
The SDK for which your code should be built.
Default: macosx
HIDE DECLARATIONS
Config file: hide_declarations
Command line: --hide-declarations [objc|swift]
Hide declarations in the specified language. Given that generating Swift docs only generates Swift declarations, this is only really useful to display just the Swift declarations & names when generating docs for an Objective-C framework.
CONFIG FILE
Config file: config
Command line: --config PATH
Configuration file (.yaml or .json)
Default: .jazzy.yaml in source directory or ancestor
XCODEBUILD ARGUMENTS
Config file: xcodebuild_arguments
Command line: -x, --xcodebuild-arguments arg1,arg2,…argN
Arguments to forward to xcodebuild
Default: []
SOURCEKITTEN SOURCEFILE
Config file: sourcekitten_sourcefile
Command line: -s, --sourcekitten-sourcefile FILEPATH
File generated from sourcekitten output to parse
EXCLUDED FILES
Config file: exclude
Command line: -e, --exclude filepath1,filepath2,…filepathN
Source file pathnames to be excluded from documentation. Supports wildcards.
Default: []
AUTHOR NAME
Config file: author
Command line: -a, --author AUTHOR_NAME
Name of author to attribute in docs (e.g. Realm)
AUTHOR URL
Config file: author_url
Command line: -u, --author_url URL
Author URL of this project (e.g. https://realm.io)
VERSION
Config file: module_version
Command line: --module-version VERSION
module version. will be used when generating docset
Default: 1.0
README PATH
Config file: readme
Command line: --readme FILEPATH
The path to a markdown README file
GITHUB URL
Config file: github_url
Command line: -g, --github_url URL
GitHub URL of this project (e.g. https://github.com/realm/realm-cocoa)
GITHUB FILE PREFIX
Config file: github_file_prefix
Command line: --github-file-prefix PREFIX
GitHub URL file prefix of this project (e.g. https://github.com/realm/realm-cocoa/tree/v0.87.1)
MIN ACL
Config file: min_acl
Command line: --min-acl [private | fileprivate | internal | public | open]
minimum access control level to document
Default: public
THEME DIRECTORY
Config file: theme
Command line: --theme [apple | fullwidth | jony | DIRPATH]
Which theme to use. Specify either 'apple' (default), one of the other built-in theme names, or the path to your mustache templates and other assets for a custom theme.
Default: apple
```
```
$> jazzy -h
```