川のブログ

川の適当気ままなブログです。 

リーダブルコードを読む part2

こんにちはかわです。

アドベントカレンダー17記事目です。

続きを書いていきます。

kawakawa.hatenablog.com

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 名前のフォーマットで情報を伝える

qiita.com

いろいろなフォーマットがあるためチームで統一して書くべし

大文字やアンダースコアに意味を持たせる

以上

kawakawa.hatenablog.com

リーダブルコードを読む 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 「理解するまでにかかる時間」は競合する?

高度に最適化されたコードであっても、理解しやすくすることができるはず。

理解しやすいコードは、優れた設計やテストのしやすさにつながることが多い。

以上

kawakawa.hatenablog.com

Swift 基礎文法 part4

こんにちはかわです。

アドベントカレンダー15記事目です。

やっていきます。

kawakawa.hatenablog.com

クラス

アクセス修飾子
修飾子 説明
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 {

変数が無効であった場合の処理

}

swift guard文 - Google 検索

以上