page_adsence

2014年5月20日火曜日

プログラミング作法(名前の付け方編)

プログラムを書いている時によく頭を悩ますのが変数や関数等々の名前の付け方。
Google翻訳みたいな感じで最適な名前を返してくれるサービスが欲しいと何度思ったことか。

「名前は情報を含み、簡潔で覚えやすく、できれば発音可能な名前が望ましい。」

とか言われても正直そんないい名前ほいほい思いつかないです。
でも、訓練次第ではいい名前が付けられるようになると思うので、自戒の意味を込めて記載しておきます。

1.グローバルとローカルの名前の付け分け


「グローバルにはわかりやすい名前を、ローカルには短い名前をつける。」

グローバル変数は定義上プログラムのどこにでも出現する可能性があるため、読む人がその意味を思い出せる程度に長く、説明的な名前をつける必要がある。
個々のグローバル変数の宣言に短いコメントを入れておくとよい。
変数だけでなく、グローバルな関数、クラス、構造体にも、プログラム中での役割を表す説明的な名前をつける必要がある。

逆にローカル変数は短い名前で十分。
あまり長い名前は逆にプログラムの可読性を下げる。

2.統一性を出し、コードを文章に


「関連性のあるものには関連性のある名前をつけ、関係を示すと共に違いを際立たせるようにする。」

class UserQueue {
    int noOfItemsInQ, frontOnTheQueue, queueCapacity;
    public int noOfUsersInQueue() {…}
}

上記のプログラムではQueueという単語がQ、Queue、queueとして登場している。
しかしキューはUserQueue型の変数からしかアクセス出来ないので、メンバ名に"queue"を入れる必要はない。
文脈だけで十分に理解出来るので、下記の文は冗長である。
queue.queueCapacity

そのため、下記のプログラムの方が優れていると言える。
class userQueue {
    int nitems, front, capacity;
    public int nusers() {…}
}

このように記述することで、下記のように文を書けるようになる。
queue.capacity++;
n = queue.nusers();

3.関数名の付け方


「関数には能動的な名前をつけ、問題がなければそのあとに名詞をつける。」

now = date.getTime();
putchar('¥n');

ブール値を返す場合は、戻り値が不明確にならないような名前をつける必要がある。
わかりにくい
if (checkoctal(c)) ...

わかりやすい
if (isoctal(c))...

とりあえず今回はここまで。
今後もこの内容を意識してプログラミングしていきたいと思います。

2014年5月19日月曜日

Parallels上のWindowsマシンでGoogleIMEのON/OFF切り替え

MacOSでは、日本語入力と英字入力をそれぞれ「かな」キーと「英数」キーに割り当てられている。
しかし、Parallels上のWindowsで「かな」キーと「英数」キーを押すと、MacOSと同様の挙動はしてくれない。
そこでMacOSと同様に「かな」キーと「英数」キーで日本語入力と英字入力を切り替える方法のメモ。

1.Parallels上のWindows環境で、テキストサービスと入力言語画面を開く。(言語バー内で右クリック→設定)
2.全般タブの「Google日本語入力」を選択し、プロパティボタンを押下。

2014年5月16日金曜日

MacOSのプレビュー機能でアクセス権があるのに開けない(未解決)

Macで画像を大量に開く場合、フォルダ内の全画像を選択してダブルクリックで開くのですが、この作業を続けていると

「ファイル”XXXXXX”を表示するためのアクセス権がないため、開けませんでした。」

と出てくる。
以前から何度か経験している現象だ。

・パーミッションに問題がないにも関わらず、画像が開けない。
・別のアプリを使って画像を開くことは可能。

以上の2点から画像自体に問題はなさそう。
では何が問題なのか?
最初は普通に開けるので、メモリの問題かと思って検証してみた。
以下の1〜4の手順を繰り返し行う。
なお、以下の手順の間はプレビューアプリ自体は起動しっぱなし。

1.200枚くらいの画像をまとめて開く。
2.ウィンドウを閉じる。
3.同じ画像200枚をまとめて開く。
4.ウィンドウを閉じる。

これに関しては問題なかった。
最初に全ての画像を開くのにかかった時間と、
2回目以降に全ての画像を開くのにかかった時間では、明らかに2回目以降の方が早かった。
普通に考えたら最近開いた画像に関してはキャッシュか何かしているんだろうと想像出来る。
では次に毎回違う画像を開いて見たらどうか検証してみた。
以下の1〜4の手順を繰り返し行う。
なお、以下の手順の間はプレビューアプリ自体は起動しっぱなし。

1.200枚くらいの画像をまとめて開く。
2.ウィンドウを閉じる。
3.違う画像200枚をまとめて開く。
4.ウィンドウを閉じる。

結果1912枚の画像を開くことが出来たが、1913枚目からは全て開けなかった。
以降プレビューアプリでは1枚も画像が開けなかった。

アクティビティモニタでメモリの使用量とかを確認してみたが、
画像を大量に開いたからといって、メモリ使用量が増えているわけではなかった。
現在の所、原因は不明だが、プレビューアプリを再起動するとまた問題なく見れるようになる。

普通に考えるとプレビューアプリにキャッシュ出来る画像容量に達したから開けなくなったのかと思ったのですが、アクティビティモニタを見た限りではそうじゃないらしい。

謎。