Okada Hiroshi の blog

typo が多いです

Android Javaでやっぱりフィールドにmまたは_をつけるべきではないのか。

少し前に、

gfx.hatenablog.com

という記事があって、その時は自分もブックマークで「新規に書く場合はそうすべきだと思う」とか言っていたのだけれども。最近ちょっと意見が変わりました。

m 又は _ をつけた方が良い理由は以下のとおりです。

  • 確かに IDE では、フィールドとローカル変数や、パラメータと区別がつくけどコードは必ずしも IDE 上でだけ見るわけではない。コマンドラインで git --diff することもあるし、ブログに引用されるかもしれない*1。コードのポータビリティー(どの環境でもそれなりにわかりやすくする)はそれなりに確保すべき。

  • フィールドと引数は往々にしてかぶる。その場合、 typo に弱くなる。例えば

class Product {
    private static final double RATE = 0.8;
    private int price = 1;

    public void setPrice(int price) {
        if (price >= 100) {
           this.price = (int)( RATE * (price - 100) + 100);
        } else {
           this.price = price;
        }
    }

を間違えて

class Product {
    private static final double RATE = 0.8;
    private int price = 1;

    public void setPrice(int plice) { // r と l を typo
        if (price >= 100) {
           this.price = (int)( RATE * (price - 100) + 100);
        } else {
           this.price = plice; // r と l を typo
        }
    }

としてしまった場合、間違いをみつけることが非常にむずかしくなる。

  • そもそも型についてのハンガリアン記法とちがって、無限に種類が増えるものではない、m がメンバー変数であるのは十分に java 文化圏では認知されている。

以上です。

*1:そしてそのブログの読者は色弱かもしれない

Haskell 勉強記録 35 日目

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

今日は、第13章:モナドがいっぱい の途中(位置6700) まで読み進めました。

今日のまとめ(復習の部分が多いです)

  • Functor 関数を文脈付きの値に適用して、文脈付きの値を得るための typeclass
    (*2) fmap Just 3
  • Applicative 文脈付きの関数を文脈付きの値に適用して、文脈付きの値を得るための typeclass
    Just (*2) <*> Just 3
    (*) <$> Just 2 <*> Just 3
  • Monad 普通の値を取るって文脈付きの値を返す関数を文脈付きの値に適用して、文脈付きの値えるための typeclass
    Just 3 >>= \x -> Just (x * 2)

Haskell 勉強記録 34 日目

色々、あってサボっていたが今日からまた勉強を再開しました。

ブランクが長かったので 12章 モノイドの初めから進めました。 今日は 12章の終わり(位置 6572)まで読み進めました。

今日のまとめ

type, newtype, data の違い
  • type 型シノニム、型に別名をつける、別名と元の型名は同じなので混ぜて書いてもよい。
  • newtype 既存の型を包み込んだ新しい型を作り出す。
    慣用句: newtype 新しい型名 = 新しい型名 { get新しい型名 :: 既存の型名} deriving (...)
  • data 自作の新しい型を作る複数のコンストラクタを持てる。
Monoid

結合的(associativity) な二項演算子単位元からなる構造 Monoidにする方法が複数あるときは newtype でくるむ。 Ordering モノイドを使うと、値比較で優先する特徴と劣後する特徴を持つような事例を簡単にあらわせる。

Folderble

畳みこみのできる構造 有る形を Folderbleにするには foldMap を定義すればよい。

わからなかったこと

foldMap を定義するとなんで foldr が自動的に使えるようになるのか。

Haskell 勉強記録 32 日目

昨日は、PCの設定等をいじっていなかったので、ほとんど読み進められませんでした。

今日は 第12章:モノイド モノイドとの遭遇 の途中 (位置 6404/11175) まで読み進めました。

アプリカティブファンクターの部分は読み進むのが結構たいへんでした。やはり見慣れない記号だと、なかなか頭に入ってきません。

「すごいHaskellたのしく学ぼう!」を読んでいて出てきた関数のメモ

Haskell 勉強記録 30 日目

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

今日は、概念的な部分が多くて少し難しかったです。

第11章:ファンクターからアプリカティブファンクターへ ファンクター則の終わり (位置 5550/11175) まで読み進めました。

今まで出てきた関数