なんたらノート第三期ベータスマートフォン用の表示で見るなんたらノート第三期ベータこの広告は、90日以上更新していないブログに表示しています。2008-10-12いろんな言語のコードを比べてみたすこし前に、コードの字面について書いたので、いろいろな言語で共通して頻出しそうなパターンを例に、等価なコードを書いてみた。配列の各要素を関数に渡すループ手続きを書け。要素は辞書やオブジェクトで、関数は引数の内容を加工するかもしれない。ループブロック内のロジック追加を容易にするために、要素を一時変数で参照すること。いろんな方法論(単位処理をストラテジとして受け付ける集合演算用ライブラリとか?)はあれど、構造化プログラムの延長にあるかぎり、現実的には書き下しに勝る選択肢はないと思うので、言語を問わず比較できるかと思います。分岐だと、書き下しと多態のどっちがいいかは、言語の選択や状況(あと、好みやスキルに起因する感情)によるので。ややこしいかな?要するに、「公平に言語を比較しようとすると、foreachが得意かどうか比べるのがいいと思う」ってこと。...の→部分に、脳のシフトキーが要る直前の可読性は次のコードの記述性に影響するテキストエディタの単語補完機能も考慮に入れるといったところだろうか。余計な変数がない文(もしくは行)の数が少ない書く人による「ぶれ」が生じ得ない(誰が書いても同じコードになること。他人の癖は読みにくい)引き起こされる動作が明瞭につかめる発音して読むと、なんとなく自然言語に聞こえるという特徴は、可読性の高さと関係があると言えるかな。foreachの元祖の元祖、Perlから順にいきます。Perl/Pythonに似たのもあり。eend以上、まったく問題なく比較できるので、ノーコメント。ありがちな間違いプログラム。something(&$e);}?>一般的には、これだと仕様を満たしていません。この構文は、配列要素のコピーを$eに代入します。somethingは要素のコピーを書き換えてしまうため、$dataはまったく変化しません。基本的に、PHPのforeachは(というより、基本がポインタでなくコピーなPHPでは全般的に)破壊操作を想定していないのです。追記:いまPHP5.2なんですが、関数へのリファレンス渡しが警告されました。関数呼び出しまでにリファレンスを明確に確保するか、リファレンスを受ける関数として定義するか、どちらか明確にせよ、ということなのかな。修正すべきは、この書き換えでした。something($e);}?>修正にあたって、「歯抜け配列」に対する考慮も必要です。100;?>のようなものです。PHP配列では、要素数と最大インデックスの関係が保証できません。C言語のfor文イデオムを真似ても、真に等価なコードを保証することはできず、動作結果が入力値の状態に依存します。PHPには、他のすべての言語で共通している言語処理系の実行イメージの常識が通じないので、コードの等価性を比較するさいは、十分に気をつけてください。これを前提に、次へ読み進めてください。この後$eに代入されると、配列の末尾要素が破壊されるのでunset?>somethingのパラメータに$eを渡すか&$eを渡すかを書き分けている点に注目してください。関数へのリファレンス渡しが推奨されない理由と、unsetの必要性についてと併せて、(CポインタやPerlのリファレンスより圧倒的に難解で、しかも他の言語と共通しない独特な仕様の)PHPのリファレンスをよく理解していなければ、このような頻出イデオムも、正しく読み書きすることができません。※私はというと、理解したつもりでもよくバグを作り込んでしまい、そのたびに何度も理解しなおしています。必要ならクロージャでselfを束縛し、thisと見立てて扱う。});OOPと組み合わせるとき、thisのあいまいさ問題のために、どうしてもクロージャの理解が必要になります。thisが暗黙的であることや、クロージャの理解を必要とすることについては是非が分かれると思いますが、私の考え方では、クロージャの理解なくしてモダンなJavaScriptを書けるとは言えないと思います。something(e);}ここから型あり言語です。something(e);}もっとも最近の型あり言語では、型なし言語と比べて、評価に誤差程度の差しかないことに驚きでした。これだけで言語の全体を評価できるわけではありません。共通してそこそこ頻出するコードを例とした、ソースコードテキストの字面比較でしかありません。ああでも、ごめん、やっぱりまたPHPいじめになってしまった。〜PHPカンファレンス関西2014にむけてPHPカンファレンス関西2014リレーブログ11人目です。イレブンで...2010-10-31Twitterでクロージャのことを説明したら通じたTwitterでクロージャのことを説明したらうまくいったのでメモ。(1)月別アーカイブはてなブログをはじめよう!tanakahisateruさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。