MW211 EXIT

devlog
CSS/背景色を透明にする
2011年08月17日
background-color:transparent;
分類:CSS
PHP/if-else文をswitch-case文に書き換える
2011年08月16日
┌───────────┐
│if (判定文1) {        │
│  処理1;              │
│} else if (判定文2) { │
│  処理2;              │
│} else if (判定文3) { │
│  処理3;              │
│} else {              │
│  処理4;              │
│}                     │
└───────────┘
上記は下記のように書き換えられる。
┌───────────┐
│switch (TRUE) {       │
│  case (判定文1):     │
│    処理1;            │
│    break;            │
│  case (判定文2):     │
│    処理2;            │
│    break;            │
│  case (判定文3):     │
│    処理3;            │
│    break;            │
│  default:            │
│    処理4;            │
│    break;            │
│}                     │
└───────────┘
分類:PHP
switch-case文の字下げ(インデント)
2011年08月15日
switch-case文は、caseを一段下げると見やすいので、
以下のような感じで字下げを行っていた。
┌───────────┐
│switch (判定項目) {   │
│  case 判定値:        │
│    処理;             │
│    break;            │
│  case 判定値:        │
│    処理;             │
│    break;            │
│  default:            │
│    処理;             │
│    break;            │
│}                     │
└───────────┘
だが、処理中にif文のネストを入れてみると、caseと同じ階層に閉じ括弧「}」がなく
間延びしていることがわかる。
┌───────────┐
│switch (判定項目) {   │
│  case 判定値:        │
│    if (判定文) {     │
│      if (判定文) {   │
│        if (判定文) { │
│          処理;       │
│        }             │
│      }               │
│    }                 │
│  @←この階層に「{」がない
│    break;            │
~~~~~~~~~~~~~
│}                     │
└───────────┘
ということで、以下のようにswitchの階層とcaseの階層を同一としようと思う。
┌───────────┐
│switch (判定項目) {   │
│case 判定値:          │
│  処理;               │
│  break;              │
│case 判定値:          │
│  処理;               │
│  break;              │
│default:              │
│  処理;               │
│  break;              │
│}                     │
└───────────┘
ちょっと違和感があるが、慣れの問題なのだろう。
ちなみにif-else文との対応関係であれば、以下のような感じだ。
であれば、後者(右)に統一したと思えばいい。
┌───────────┐┌───────────┐
│if (判定文) {         ││if (判定文) {         │
│    処理;             ││  処理;               │
│  } else if (判定文) {││} else if (判定文) {  │
│    処理;             ││  処理;               │
│  } else {            ││} else {              │
│    処理;             ││  処理;               │
│}                     ││}                     │
└───────────┘└───────────┘
┌───────────┐┌───────────┐
│switch (判定項目) {   ││switch (判定項目) {   │
│  case 判定値:        ││case 判定値:          │
│    処理;             ││  処理;               │
│    break;            ││  break;              │
│  case 判定値:        ││case 判定値:          │
│    処理;             ││  処理;               │
│    break;            ││  break;              │
│  default:            ││default:              │
│    処理;             ││  処理;               │
│    break;            ││  break;              │
│}                     ││}                     │
└───────────┘└───────────┘

…と思ったが、使ってみるとことのほか見づらい。
if文を使わずswitch-case文を使っているメリットが半減したようだ。
ということで、特例的に字下げは元のままとしようと思う。
これはあくまで与太話ということで。。。
分類:設計
MicrosoftExcelの小ネタ(2)
2011年08月12日
通常、結合セルを生成する時、左上端(もしくは値のあるセル)のみの値を残し
それ以外の値は初期化されてしまう。

しかし、結合セルに対して、
「形式を選択して貼り付け」で「数式」を選択してコピーすると、
全てのセルに同じ値が入る。

ただし、それが何に有効なのか(何に使えるのか)は定かではない。
分類:Excel
(無題)
2011年08月08日
Happy Birthday to You!
ER図の矢印の向き
2011年08月04日
電流はプラス極からマイナス極へ進むが、
その中を流れる電子はマイナス極からプラス極へ進むらしい。

ER図の矢印は「1対多」関係の場合、「1 → 多」の向きに矢印を記述するものだ。
しかし、外部キーと主キーの関係についてポインタ的矢印で表すと
「外部キー → (参照先テーブルの)主キー」の方がわかりやすい。

例えば、個人が属している組織名を取得する場合
「(個人の外部キーである)組織ID → (組織の主キーである)組織ID (→組織名)」
みたいな流れだとわかりやすい。

しかし、これだと「個人 → 組織」で、「多 → 1」と矢印の向きが逆になる。
「個人」から「組織」(名)は一意に決まるのだから、「個人 → 組織」の矢印の向きだ。

う~ん、ややこしい。
表単位では「→」でも、列単位だと「←」となってしまう感じだ。

この紛らわしさを回避するために、表単位の「1 → 多」の矢印を、
別の記号(「─●」とか「─∈」(カラスの足)とか)にする場合もあるようだ。

ちなみに「外部キー」とそれが指し示す「主キー」の関係って
「大企業の平社員」と「下請け先の中小企業の社長」みたいな関係だなと思った。
分類:設計
矛盾
2011年08月02日
(C言語系プログラムの)コーディング規約で、
「switch-case文にはdefaultおよびbreakを必ず記述すること」ってのと、
「実行されない処理は記述しないこと」ってのが、併存していることがある。
break直前にcontinueを記述することになったら…。

追記:continueを禁止にすればよいか。。。
分類:設計
UTF-8のマルチバイト文字の文字長
2011年07月29日
全角文字(マルチバイト文字)は、
(非プロポーショナルフォントでは)半角文字2つ分の横幅をとる。

「Shift-JIS」などたいていの文字コードにおいては、
半角文字は「1バイト」、全角文字は「2バイト」であり、
この横幅の比率と一致する
つまり「文字長(横幅)=バイト長」である。

しかし、「UTF-8」において、全角文字は「3バイト」である(要は情報量が多い)。
つまり「文字長(横幅)<バイト長」となる。

一方、たいていのプログラム言語においては、
「文字数を求める関数」と「バイト長を求める関数」が
それぞれ用意されている。
PHPにおいては、文字数を求める関数は「mb_strlen(,'UTF-8')」で、
バイト長を求める関数は「strlen()」である。

「文字長(横幅)」を求めたい場合、全角文字が「2バイト」なら
「文字長=バイト長」なので、「バイト長」を求めるだけでよい。

しかし、全角文字は「3バイト」の「UTF-8」の場合はそうはいかない。

「文字数」と「バイト長」を駆使して「文字長」を求めようとすると
「(文字長+バイト長)/2」で求めることができることがわかる。

方程式を解けば導きだせる答えなのだが、
不思議なことに「足して2で割れば」文字長が算出できてしまうのである。
(1の比率のものと3の比率のものを足して2で割れば2の比率になるだけだが)

…と満足してたら、PHPには「mb_strwidth(,'UTF-8')」という文字長を
ダイレクトに求めることができる関数があったのであった。

  例)「ああAAA」の場合
    (1) strlen('ああAAA')               →  9(=全角2文字×3バイト+半角3文字)
    (2) mb_strlen('ああAAA','UTF-8')    →  5(=5文字)
    (3) mb_strwidth('ああAAA','UTF-8')  →  7(=全角2文字×2+半角3文字)
        ((1)+(2))/2=(9+5)/2=7=(3)
分類:PHP
MWⅡII開発者blogを開始しました
2011年07月26日
MWⅡII開発者blogを開始しました。

プログラムに関する技術情報を記録していこうと思います。


追記:2011年11月03日に「devlog」に名称変更しました。
前へ 1 … 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 次へ