アカウント名:
パスワード:
「戻り値」が「return value」の一般的な訳語かと思っていたけど、PHPでは違うんでスカイノ。
#PHPは入門書の数ページしか読んでいない(「当座数年内の私の業務には関係ない」と悟った)ので、#見当はずれだった(「戻り値」とは概念の異なる用語として扱われているなど)らすまない
言われるまで気にしたこともなかったですが、PHPのリファレンスだと確かに「返り値 [php.net]」となってますな。
仕事でそれなりの規模があるアプリをPHPで開発しているので、型が宣言できるようになるのは非常に助かります。引数が数値だったり文字列だったり、はたまたobjectを返すかと思ったらfalseを返してたり、PHPしかやってない人のソースはわけわからんわ・・・。
> 引数が数値だったり文字列だったり、引数の型を変える方は、静的型付けなJavaやC++とかでも「関数のオーバーロード」がありますので、PHPが特殊というわけでもないでしょう。
> はたまたobjectを返すかと思ったらfalseを返してたり、PHPしかやってない人のソースはわけわからん
こっちはPHPなどの動的型付け言語に特有な話ですが、それは利用者の問題ではないでしょう。PHPの組み込み関数レベルで、「エラー時はfalseを返す」ような仕様はあふれてますよ。状況に応じて返り値の型を変えられる、というのは動的型付け言語の醍醐味といっていいんじゃないかと思います。
とはいえ、PHP組み込みのstrpos(文字列検索関数)などのような「見つかった時は、見つけた位置(0オリジン)を返す」「見つからなかった時はfalseを返す」という設計仕様が、PHPの「false == 0」が真になるという言語仕様とあいまって、「if (strpos(…) != false) {」って記述だと「0桁目で見つかっても見つからなかったことになる」から「そういう時は型チェックを厳密に行う === / !== を使え」ってことになるわけですが。
PHPは「手軽さ」を売りにしつつ「手軽に使おうとすると罠にはまる」というひどい言語になっちゃってるんだよねぇ…
# 0 と false と null に別の意味を持たせて使い分けるハメになった時は、ちょっと後悔しました。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
※ただしPHPを除く -- あるAdmin
返り血? (スコア:1)
「戻り値」が「return value」の一般的な訳語かと思っていたけど、PHPでは違うんでスカイノ。
#PHPは入門書の数ページしか読んでいない(「当座数年内の私の業務には関係ない」と悟った)ので、
#見当はずれだった(「戻り値」とは概念の異なる用語として扱われているなど)らすまない
Re:返り血? (スコア:0)
言われるまで気にしたこともなかったですが、PHPのリファレンスだと確かに「返り値 [php.net]」となってますな。
仕事でそれなりの規模があるアプリをPHPで開発しているので、型が宣言できるようになるのは非常に助かります。
引数が数値だったり文字列だったり、はたまたobjectを返すかと思ったらfalseを返してたり、PHPしかやってない人のソースはわけわからんわ・・・。
Re:返り血? (スコア:3, 興味深い)
> 引数が数値だったり文字列だったり、
引数の型を変える方は、静的型付けなJavaやC++とかでも「関数のオーバーロード」がありますので、PHPが特殊というわけでもないでしょう。
> はたまたobjectを返すかと思ったらfalseを返してたり、PHPしかやってない人のソースはわけわからん
こっちはPHPなどの動的型付け言語に特有な話ですが、それは利用者の問題ではないでしょう。PHPの組み込み関数レベルで、「エラー時はfalseを返す」ような仕様はあふれてますよ。
状況に応じて返り値の型を変えられる、というのは動的型付け言語の醍醐味といっていいんじゃないかと思います。
とはいえ、PHP組み込みのstrpos(文字列検索関数)などのような「見つかった時は、見つけた位置(0オリジン)を返す」「見つからなかった時はfalseを返す」という設計仕様が、
PHPの「false == 0」が真になるという言語仕様とあいまって、「if (strpos(…) != false) {」って記述だと「0桁目で見つかっても見つからなかったことになる」から「そういう時は型チェックを厳密に行う === / !== を使え」ってことになるわけですが。
PHPは「手軽さ」を売りにしつつ「手軽に使おうとすると罠にはまる」というひどい言語になっちゃってるんだよねぇ…
# 0 と false と null に別の意味を持たせて使い分けるハメになった時は、ちょっと後悔しました。