hiromasa.zone : o)

2007/4/22 Sunday 投稿時の月齢:5.1  月名:六日月  潮汐:中潮 Moon:5.1[六日月]今日の心技体 : 低調期低調前不安定期好調前不安定期

マルチリンガルの弊害 このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加

日記 - 晴のち曇 ひろまさ @ 13:28

Web にかかわるとマルチリンガルになることが多いです。 といっても人間の言葉ではなくコンピュータ言語。

フロントは DHTML + CSS + JavaScript 、バックエンドは PHP とか。 これだけでも 4種類。 あと、SQL がはいってきたり、その他関連技術の言語がでてきたり…。

デザイナーとプログラマーの分業というのは良く聞きますが、やっぱりひとつだけ分かって、あとはまったく分からんと言うのは無理なので、結局全部かじる結果となります。

特に AJAX とかだと、上記の例は JavaScript と PHP が密になります。 で一人でいっしょに書いたりするわけですが、、いやコンピュータ言語なんかどれもいっしょなので大抵なんとかなるんですが、でも細かい仕様の差でハマることもあります。

あれ、エラーなぜかでる、、、あ変数名に $ ついてねーよ、うわ!メンバアクセスは -> かい、みたいな(笑)

まーシンタックスはいいとして、言語仕様でうっかりハマった話。

プログラム言語にはたいてい、関数という機能がついています。 関数に値を引数で渡すと答えが返ってくるという機能。 よく初心者に難しいと言われるのは、引数に”参照”を渡す場合。 オブジェクト(操作対象)を参照で渡して、関数(メソッド)に操作してもらうなんて使い方はよくやります。

PHP4 と PHP5 でこの部分の仕様が完全に違うのですが、とりあえず PHP4 で。

function hoge(&$object1) {
  $object2 = new Object2();
  $object1 = $object2;
}

こーすると、hoge に渡された $object1 は $object2 に入れ替わって戻ります。 こんなことはあんまりしないけど、サンプルってことで。

じゃー、JavaScript で同じことをかく。

function hoge(object1) {
  object2 = new Object2();
  object1 = object2;
}

しかし、JavaScript の場合これは正しく動作しません。(object1 はそのまんま)

あれー、参照渡しだからいいはずなんだけどなー、と悩む。。

ぴこん!

実は Java 系の場合、引数の参照変数に対する代入は意味を持ちません。 ポインタアドレスはその変数に渡ってくるので、もちろん該当オブジェクトの操作はできるのですが、引数の変数自体は参照ではなく値渡しなのです。 逆に PHP で引数を受け取る部分で & をつけた場合は C のポインタ渡しと同じく “引数の変数も参照”(?) です。

ちなみに、PHP5 は & をつけなくてもオブジェクトは参照で渡るように変わりましたが、この場合は Java と同じ仕様、”引数の変数自体は参照ではなく値渡し” になるようです。 & をつけた場合は、PHP4 と同様の動作です。

PHP4 ばっかりいじってたから、、

こんがらがった。

なんでこんなことがおきたかというと JavaScript で、

function hoge(array) {
  var tuika = new Array();
  tuika.push("mogemoge");
  tuika.push("hogehoge");
  // tuika を結合
  array = array.concat(tuika);
}

とかってやって、あれーー呼び元で array に tuika されん。。 って。 ハマったのです。

そもそも、concat (配列の結合) メソッドが array に対しての操作ではなく、結合された配列を “返す” って仕様が意味分からないのですが、、普通 array.concat(tuika); だけで array に追加されるだろーて。 😛

まぁまぁ文句を言ってもしょうがない。。 マルチリンガルな方は、似て非なるものにご注意ください。(こんなハマりかたするのはぼくだけか。。

2 Comments

Comment

  1. From: aka - 2007/4/22 Sunday Nighttime (Comment)

    マルチリンガルで真っ先に思い浮かんだものが i18nとl10nな私は似非ローカライザー。:razz:

  2. From: ひろまさ - 2007/4/24 Tuesday Morning (Comment)

    なるほど、人間インタープリタですね。 :mrgreen:


このサイトはコンテンツをフリーズしました。トラックバック・コメントは閉じられています。

新しいサイトは、

hiromasa.another :o)

です。 :-)

このサイトについて

このブログは引っ越しを行いコンテンツはフリーズしています。hiromasa.anotherへどうぞ。

Powerd By WordPress

We (Heart) WordPress

WordPressME Logo
WordPress Plugins

ブログ内検索

Todays Popular

WordPress Ring

はてなリング - WordPress -

情報

31 queries. 0.308 seconds.

このページの先頭へ