リーダブルコードを読む part2
こんにちはかわです。
アドベントカレンダー17記事目です。
続きを書いていきます。
2章 名前に情報を詰め込む
1 明確な単語を選ぶ
「get」はあまり明確ではない
例 def GetPage(url):
・・・
これはどこから取ってくるものなのか?
インターネットから取ってくるのであれば
「Feach」「Download」のほうが明確
例 Size -> Height NumNodes MemoryBytes 等
気取った言い回しより明確で正確に
2 tmpやretvalなどの汎用的な名前を避ける
tmp・retval・foo この3つより
目的、実物の値を表した名前を選ぶ
retvalには「戻り値」という情報しかないためプラスαの情報を付加する
tmpという名前は、生存期間が短く、一時的な保管が大切な変数にだけ使用
ループイテレータ(i, j, k, iterなど)が複数ある場合、
説明的な名前にするとバグが目立ちやすくなる
3 抽象的な名前よりも具体的な名前を使う
例 ServerCanStart() -> CanListenOnPort()
任意のTCP/IPポートをサーバがリッスンできるかを確認するメソッド
変更後のほうがメソッドの動作をそのまま表している
4 名前に情報を追加する
名前は短いコメントのようなもの
大切な情報があれば「単語」を変数名に追加する
値の単位や危険や注意を換気する情報も追加したほうがいい
5 名前の長さを決める
スコープが小さければ短い名前でいい
->スコープが大きいならば長い名前を
エディタの「単語補完」機能を使用すべし
頭文字や省略形を使用する場合、誰が見ても明確に
不要な単語は取り除く
6 名前のフォーマットで情報を伝える
いろいろなフォーマットがあるためチームで統一して書くべし
大文字やアンダースコアに意味を持たせる
以上
リーダブルコードを読む part1
こんにちはかわです。
アドベントカレンダー16記事目です。
今回は
この本を読み進めて章ごとに要約していきたいと思います。
1章 理解しやすいコード
1 優れたコードとは?
「簡潔」と「安心」はどちらが大切か?
Ruby 2.4.0
//九九の表示 //簡潔例 1.upto(9){|i|1.upto(9){|j|puts"#{i} * #{j} = #{i * j}"}} //安心例 for i in 1..9 do for j in 1..9 do result = i * j puts"#{i} * #{j} = #{result}" end end
2 読みやすさの基本定理
コードは他の人が最短時間で理解できるように書かなければいけない
3 小さいことは絶対にいいこと?
「理解するまでにかかる時間」を短くすることが大切!!!
コードは短ければいいということではない。
コードを短くし、理解に時間がかかるのであれば長いままでもいいし、
コメントを書いたほうがわかりやすくなるのであれば書いたほうがいい
4 「理解するまでにかかる時間」は競合する?
高度に最適化されたコードであっても、理解しやすくすることができるはず。
理解しやすいコードは、優れた設計やテストのしやすさにつながることが多い。
以上
Swift 基礎文法 part4
こんにちはかわです。
アドベントカレンダー15記事目です。
やっていきます。
クラス
アクセス修飾子
修飾子 | 説明 |
---|---|
open | モジュール外からもアクセス可能 |
public | モジュール外からのアクセス可能だが継承、オーバーライドが不可 |
internal | モジュール内からのアクセス可能(デフォルト) |
fileprivate | 同じファイル内からのアクセスを可能 |
private | クラス等の宣言内のみからのアクセスを可能 |
class Human{ private var age = 0 private var name = "" init(_ n: String,_ a: Int){ //イニシャライズ name = n age = a } func hallo() { print("Hallo") } func Age() -> Int{ return age } func Name() -> String{ return name } } var hu = Human("kawa", 2) hu.hallo() // => Hallo print("\(hu.Age())歳") // => 2歳 class JapaneseHuman: Human{//Humanを継承 override func hallo() {//オーバーライド super.hallo() //Humanクラスのhallo()が起動 print("こんにちは") } } var ja = JapaneseHuman("river", 25) ja.hallo() /*=> Hallo こんにちは */
構造体
書式
struct 構造体名{}
struct Calculator{ func add(value: Int, value2: Int) -> Int{ var result: Int = 0 //処理は省略 return result } }
while文
var result = 0 var i = 0 while i < 10{ result += i i += 1 } print(result)// => 45
guard文
書式
guard let チェック後に利用する変数名 = チェックする変数名 else {
変数が無効であった場合の処理
}