Mercurial設定ファイル(Windows)
Mercurialについていろいろかこうと思ったけど、なかなかうまく行かないので、
役に立つものから紹介。
設定ファイルの例。
tortoiseHgを使っています。
開発環境をVisualStudioに合わせています。
(他の開発環境も使う方は設定は適宜、レポジトリ直下するといいです。)
# Generated by TortoiseHg setting dialog
# usernameを変更して、C:\Users\\に保管 [ui]
merge = kdiff3
username = Your Name[tortoisehg]
vdiff = kdiff3
editor = "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\devenv.exe"[extensions]
hgext.win32text=
hgext.win32mbcs=[encode]
= cleverencode:
[decode]
= cleverdecode:
diffにはkdiff3を指定しているけど重い。もっと軽いのを探します。
エンコードとデーコード指定はWindows環境では大事。
メソッド内に、1つしかreturnが存在しないものがあるのは、こんな流れがあったのかも
はてブにコメント書いて見たものの、いい足りないので・・・
もちろん、これは良くない事例で、これのことを個人的には”蛇腹”とか”アコーディオン”とか呼んでいる。
bool IsMetabolicSyndrome(bool is男性, int 腹囲, int max血圧, int min血圧, int 中性脂肪, int 血糖値) { bool ret = false; if (is男性 == true) { if (腹囲 <= 85) { ret = true; } else { if (max血圧 <= 130) { ret = true; } else { if (min血圧 <= 85) { // 中略 } } } } else { // 女性の場合で条件式が続く } return ret; }
@ITの記述にも、同様の記述があったけど、こちらはWikipedhiaの記述。wikipedia:構造化プログラミング
構造化定理 1つの入り口と1つの出口を持つようなプログラムは、 「順次・反復・分岐」の3つの基本的な論理構造によって 記述できる
ここで、”1つの出口”1つの出口の意味を”制御を最後の行に移して終わる”と考えた人たちが上に書いたようなプログラムを書いたのではないかと思う。
ちょうど、中古で手に入れて積読してあったダイクストラさんの構造化プログラミングを確認してみた。
この本はAlgolの啓蒙も兼ねているようで、ソースコードをが多く出てくる。Algolの言語仕様かも知れないけれど、戻り値が確定しても、すぐさまサブルーチンを抜ける記述はなかった。
しかし、returnは分岐したプログラムの制御がサブルーチン(メソッド)の出口に制御を渡すのでわざわざ、値を戻すのを一ヶ所に集中させる必要はないよ。
実際に、このreturnが1つの記述に違和感がない開発者に”蛇腹”になったメソッドをreturnを使ってリファクタリングできないか訊いたところ、こんな内容の回答をもらった。
「戻り値を返す意外に他の処理をしている可能性があるので、うまくいかないかもしれない。」
なるほど、確かにその通りだけど…
構造化プログラミングの定義もそろそろ、幾つか加えて新しいものがあったらうれしいな。
個人的には、returnがない言語でコーディングする際は、代わりにgo toを使うようにしている。
■
今、ちょっとADO.NETの勉強中です。
DataTableの設定でよくカラムの設定があるんだけど、なんだかめんどくさい点があってたまたま改善案が思いついたのでメモする。
とは言っても、DataTableを継承して独自形式のDataTableを作る面倒があるので実際はやらないけど・・・
すでにDataTable.Columsに設定済みのカラムをたとえば、プライマリーキーに設定する場合カラムを同じオブジェクトから取り出す必要があって、なんだか冗長で嫌だ。
こんな感じ
DataTable dt = new DataTable();
dt.Columns.Add("col1");
dt.Columns.Add("col2");dt.PrimaryKey = new DataColumn[]{dt.Columns["col1"]};
同じDataTableの中身なのは自明だからテーブルの宣言は不要だと思う。
そういえは、VisualBasicにはWithがあるから・・・
Dim dt As New DataTable
With dt
.Columns.Add("col1")
.Columns.Add("col2").PrimaryKey = New DataColumn() {.Columns("col1")}
End With
これはこれで、書きやすいね。
でも、これで良くない?
dt.PrimaryKey = new string[]{"col1"};
あ〜そうか、プロパティは型別にオーバーロードできないから・・・
C#っぽくないけど、こんなのはどうだろう?
dt.SetPrimaryKey({"col1"});
または、
dt.PrimaryKeyToString = new string[]{"col1"};
でもね。おなじオブジェクトが持っているプロパティを使って設定するプロパティは多くて・・・
文法的にこんなのがあればいいのだけど。
よびだし側で、型の替わりにこんな風にインスタンスを指定することができて
this.Columns[] PrimaryKey
{get; set;}
呼び出す側はこう指定できる。
dt.PrimaryKey = new DataColumn[]{["col1"]};
自動的にこう装飾してくれるというわけ。
dt.PrimaryKey = new DataColumn[]{dt.Columns["col1"]};
もしこれができたら、emunなんかの指定がずいぶん楽になる気がする。
いきなり設定値を書くことができるし、インテリセンスの恩恵がある。
追記ーあー、流れるようなインターフェイスっていうのがあるんだね。
上の例だと、こんな感じ。
dt.SetPrimaryKey.Col1;
複数指定の場合は
dt.SetPrimaryKey.Col1.And.Col2;
確かにこれはいいな。
と思う半面、どうやって実装するんだろうとも思う。
コードの自動生成でもしない限り面倒過ぎるかも。。。