アカウント名:
パスワード:
一度しか通らない道だから実行結果に問題はないんだけど、コードの途中に突然変数の宣言が現れてその変数を一時的に使ってたりとかなら・・・。あとプロシージャの中でGotoとGosubとか日常的に使いまくりだったりとか・・・。
でもちゃんと動くからいいじゃない。人に見せるわけでもないしいいよね。どうせ見るのは自分だし・・・。的な思いからそのままになってます。
コードの途中に突然変数の宣言が現れてその変数を一時的に使ってたりとかなら・・・。
え、これってダメなの?使う場所の近くで宣言する方がいいって思ってるんですが。
VB使いのレベルのひどさが垣間見られるね。
ちょっと待て、COBOLerなんだが...
と言うのは置いといて、Cなどでは普通だと思うけどVBだと問題なのかな?
JavaScriptだと明らかに問題ですね。関数の途中とかブロックの中で「var i;」とか宣言しても、あたかもすべて関数の先頭で宣言したかのように振る舞うというすごい特徴を持っています。複数回宣言すると1つにまとめられます。これはECMA-262で厳密に定められた仕様なのですが、宣言はすべて関数の先頭で行わないと一見不可解な動作をすることになります。C90(not C++)のように言語仕様で強制されているよりもたちが悪いです。というわけで「言語による」ような気がします。
JavaScriptは、暗黙の参照渡しなど、Cに慣れた人には罠が多いですよね。
参照渡し(call by reference)というと、C++/PHPのreferenceや、VB(Script)のByRef、Perlのような、変数そのものへの参照を意味することが多いです。その意味で言うと、JavaScriptは参照渡しではありません。
void foo(int& a) { a += 1; } // call by reference int i = 1;foo(i);// i => 2
JavaScriptは全てがオブジェクトです(Javaと違って整数等もオブジェクト。)から、「オブジェクトへの参照」の、値渡し(call by value)です。
function foo(a) { a += 1; } // call by valuefunction bar(b) { b.push(1); } // call by value var i = 1, ary = [];foo(i);bar(ary);// i => 1, ary => [ 1 ]
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
192.168.0.1は、私が使っている IPアドレスですので勝手に使わないでください --- ある通りすがり
VBだけど (スコア:0)
一度しか通らない道だから実行結果に問題はないんだけど、
コードの途中に突然変数の宣言が現れてその変数を一時的に使ってたりとかなら・・・。
あとプロシージャの中でGotoとGosubとか日常的に使いまくりだったりとか・・・。
でもちゃんと動くからいいじゃない。
人に見せるわけでもないしいいよね。
どうせ見るのは自分だし・・・。
的な思いからそのままになってます。
Re: (スコア:1)
コードの途中に突然変数の宣言が現れてその変数を一時的に使ってたりとかなら・・・。
え、これってダメなの?
使う場所の近くで宣言する方がいいって思ってるんですが。
Re: (スコア:0)
VB使いのレベルのひどさが垣間見られるね。
Re: (スコア:1)
VB使いのレベルのひどさが垣間見られるね。
ちょっと待て、COBOLerなんだが...
と言うのは置いといて、Cなどでは普通だと思うけどVBだと問題なのかな?
Re: (スコア:0)
JavaScriptだと明らかに問題ですね。関数の途中とかブロックの中で「var i;」とか宣言しても、あたかもすべて関数の先頭で宣言したかのように振る舞うというすごい特徴を持っています。複数回宣言すると1つにまとめられます。これはECMA-262で厳密に定められた仕様なのですが、宣言はすべて関数の先頭で行わないと一見不可解な動作をすることになります。C90(not C++)のように言語仕様で強制されているよりもたちが悪いです。
というわけで「言語による」ような気がします。
Re:VBだけど (スコア:1)
JavaScriptは、暗黙の参照渡しなど、Cに慣れた人には罠が多いですよね。
Re:VBだけど (スコア:1)
参照渡し(call by reference)というと、C++/PHPのreferenceや、VB(Script)のByRef、Perlのような、変数そのものへの参照を意味することが多いです。その意味で言うと、JavaScriptは参照渡しではありません。
JavaScriptは全てがオブジェクトです(Javaと違って整数等もオブジェクト。)から、「オブジェクトへの参照」の、値渡し(call by value)です。