続きを読む 伝統のパワースポット 神田明神
Kenji のすべての投稿
下町情緒あふれる町 浅草
インデントにタブではなくスペースを使う理由
コードを書く際によく話題になるインデント。タブを使いますか?スペースを使いますか?それともほかのなにかを使いますか?
私はスペースを使います。 それはインデントが見易さのためのものだからです。
タブは制御文字
タブは制御文字で見易さの調整に使われるものではありません。確かに昔はタイプライターの位置調整のために使われていたそうですが、今はそういった使われ方はしません。もしタブ文字がタイプライターにおける水平タブと同じ意味を持つのなら、タブ幅を個人で変えられるようにはしなかったでしょう。
TSV では、 タブは異なる属性だとか、異なる種類だとかいう意味を表すための区切り文字になります。 タブでインデントを行ったソースコードをコピーしてExcelに貼り付けると、タブでインデントされた文字は別の列に貼り付けられます。 そういった情報の制御文字として タブは使われています。
ありがちな誤解
このようにタブを制御文字として扱うと、「インデントは情報の深さを表すものだから、タブでインデントしてもいいじゃないか」と考えてしまうこともあるかもしれません。 たしかにタブを使っていれば、先ほど例に挙げた Excel にコードを張り付けるケースでは、インデントされた行はそれだけ右のカラムに貼り付けられます。
しかし、情報の深さはインデントだけで決まるものではありません。 そのため、仮にすべてのコードがきれいにインデントされているとしてもタブを使うべきではないです。
下に情報の深さをインデントを使って表した例を示します。 (都合上 下の例ではインデントをスペース2つで現しています。)
1 |
sample_function(a, b, c, d, e); |
1 2 3 4 5 6 7 |
sample_function( a, b, c, d, e ); |
インデントを情報の深さとしてとらえると、1つ目では特に深い情報がなく、2つ目では1行に書ける関数でも、仮に引数が1つでも改行とインデントが必要になります。 また2つ目ではカンマの存在意義がありません。
最後に
最初に書いた「私はスペースを使います。 それはインデントが見易さのためのものだからです。」というのはわかっていただけたでしょうか。 インデントは見易さの問題を解決する目的があるので、見える文字であるスペースを使っています。
Android アプリ Your Place のコードを公開します
、東京メトロ オープンデータ活用コンテストがありました。 そのとき私が応募したアプリのソースコードを公開します。
概要
東京メトロの駅の中から行き先を決めてくれるアプリです。 家にいたくないけれど行き先が決まっていないときに使えます。 Android Wear とも連携し、 Android Wear で行き先や周辺スポットを見ることもできます。
理想
開発に使える時間の制約などから、単純に「行き先を決めてくれるアプリ」になっていますが、次の機能も実装したいと思っていました。
- 気学を用いて運勢のいい方角のなかから行き先を決める。
- 運勢のいい方角と現在地をマップ上で見られるようにする
- 行き先を決める中で、そのときの気分を考慮する。
- 行ったことのある東京メトロの駅を記録し、全駅コンプリートしたらなにかを出す。
- 目的地の駅や乗り換えの駅に接近したら、 Android Wear に通知を出す。
- 複数人で出かけるときの設定項目を考える。
- タップだけでなく、 シェイク して行き先を決められるようにする。
要するにパーソナライズして本当におすすめの駅を探すということです。
振り返って
初めて作った Android アプリ にしてはそれなりによくできたのではないでしょうか。
class の名前などは知識不足もあり、 修正した方がいいものもあります。
pik でバージョン管理
pik といえば、 windows で使える ruby の複数バージョン管理ツールです。 記事執筆時点で pik は github で No longer maintained
と書かれていまが、 私は使い慣れた pik を使います。
落とし穴
Windows 7 32bit で検証済み。msi インストーラ を実行して windows にインストールするのですが、 そのままでは使えません。 ある意味バグが残っているので一部修正して使います。
まずは インストーラのページ から 記事執筆時点での最新版 pik-0.3.0.pre.msi をダウンロードして実行し、そのままインストールします。
設定を変更していなければ C:\pik
に pik に関するファイルがインストールされます。 その中の C:\pik\pik.bat
の 7行目 で %HOME%
になっているところを %USERPROFILE%
に変更します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@ECHO OFF "%~dp0pik_runner.exe" "%~f0" %* IF "%PIK_HOME%"=="" ( IF EXIST "%USERPROFILE%\.pik\pik_run.bat" (call "%USERPROFILE\.pik\pik_run.bat") ) ELSE ( IF EXIST "%PIK_HOME%\pik_run.bat" (call "%PIK_HOME%\pik_run.bat") ) |
Windows では %HOME%
という環境変数は定義されていません。 (インストール先ディレクトリ から考えて) %USERPROFILE%
に変えればうまくいきます。 Windows 8.1 でも同じです。