次期PHPでは、引数や返り値のスカラー型宣言が可能に 33
ストーリー by headless
宣言 部門より
宣言 部門より
あるAnonymous Coward 曰く、
やや旧聞となるが、PHPコミュニティは数年にわたる議論と幾度もの投票の果てに、PHPの次期バージョン(PHP7)で関数の引数や返り値でintやstringなどのスカラー型の宣言を可能にする提案を3月17日に可決したという(PHP RFC: Scalar Type Declarations、東北ギークの記事)。
今回導入が決定された機能は「スカラー型宣言(Scalar Type Declarations)」と呼ばれるもので、これまでオブジェクトや配列でしか使用できなかった型宣言(タイプヒンティング)を拡張し、新たにint, float, string, boolのスカラー型も指定できるようにするもの。PHP7では元々返り値の型宣言の導入も予定されていたため、スカラー型宣言は引数と返り値の両方で使用可能となる。
興味深いことに、スカラー型宣言には暗黙の型変換を行うデフォルトの「弱い型検査」の他、ファイルの先頭でモードを宣言する「厳密な型検査」が搭載されるという。これは元々コミュニティに弱い型検査を求める人々と厳密な型検査を求める人々がおり、RFCが2010年頃から何度も提出されつつも双方が対立して可決に必要な3分の2に達しなかったことから、共倒れを避けるため両方の仕様が採用されたためとのこと。
返り血? (スコア:1)
「戻り値」が「return value」の一般的な訳語かと思っていたけど、PHPでは違うんでスカイノ。
#PHPは入門書の数ページしか読んでいない(「当座数年内の私の業務には関係ない」と悟った)ので、
#見当はずれだった(「戻り値」とは概念の異なる用語として扱われているなど)らすまない
Re: (スコア:0)
PHP以外でも「返り値」って表記はよく見かけるので、特に違和感はない。
# 自分で書くときは「戻り値」だけど。
Re: (スコア:0)
その手の表記揺れは訳語には憑き物だし、自分でもチョイチョイ間違えるのでそんなに違和感ない。
文句があるなら、常に英語表記した方が安全だと思う。
Re: (スコア:0)
エレクチオンし終わったのかどうかが気になる
Re: (スコア:0)
それは英語表記じゃ無くてカタカナ表記じゃね。
#カタカナ表記の表記揺れも結構大変だったりする。
Re: (スコア:0)
ごめん、ベタなのにわらったwww
なんでマイナスモデなんだよw
Re: (スコア:0)
I'm comingみたいに主体の差だからぜんぜん許容範囲
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 に別の意味を持たせて使い分けるハメになった時は、ちょっと後悔しました。
Re: (スコア:0)
プログラムってのはなぁ、ハックアンドスラッシュなんだよ。
真っ赤に染まってコードを書くんだ。
Re: (スコア:0)
PHPコードのデバッグもディアブロも、両方とも時間泥棒だしな。
Re: (スコア:0)
メソッドの説明書いてるときは、「結果としてxxを返す」「xxが返る」と書くな。
「xxが戻る」とはほとんど書いたことない気がする。
だからか、返り値でもそんなに違和感はない。
※ 個人の感想です
Re: (スコア:0)
私はまさに『「値を戻す」「値が戻る」って言わないだろ?』って理屈で、返値で通してる。
// 送り仮名まで省略しちゃってるな。
Re: (スコア:0)
戻り値の方が正直意味が分からないのは気のせい?
値そのものは戻りも返りもしていないんだぜ。
返り値だったらまだ「返答」なのかなってのがあるんだけど。
一番適切なのは「応答値」とかなんじゃねえのかなーって個人的な脳内では思ってる。
Re: (スコア:0)
返却値じゃないかの。
正直、引数経由で返すのも、returnで返すのも戻り値/返り値には違いないので面倒だよねぇ。
術語としては、関数の返値といえば引数ではなくreturn返却値のことなのだけど、日本語表現としては曖昧よね。
Hackしようぜ! (スコア:0)
Hack言語へと移行する方が楽しそう。
そういえば Wikimedia も HHVM を導入したそうだよ。
How we made editing Wikipedia twice as fast [wikimedia.org] 訳 [qiita.com]
Re:Hackしようぜ! (スコア:1)
実行環境としてはかなり近いレベルまで上るらしいですね
http://d.hatena.ne.jp/hnw/20141207 [hatena.ne.jp]
あわせ技でさらに、とはちょっと行かなそうですけど。
M-FalconSky (暑いか寒い)
あんまり複雑化して、別物レベルまで進化させると (スコア:0)
かえって他の言語にシェアを奪われるのは気のせい?
喩えるなら、VBがVB.netになった時にけっこうな開発者が「OOPなら一緒やわ」ってJavaとC#に流れた印象があるんだけど。
今だと、「だったらNode.js使ってみるわ」って層が少なからずいるように思う。
Re:あんまり複雑化して、別物レベルまで進化させると (スコア:1)
>喩えるなら、VBがVB.netになった時にけっこうな開発者が「OOPなら一緒やわ」ってJavaとC#に流れた印象があるんだけど。
いやむしろ「VB6のコードが動かないんやったら、それVBちゃうやろ」ってことで、
VBユーザーがVB6に止まるか、他の言語に移るかの二者択一を迫られたんじゃね。
そして移行先としては、VB.netは魅力的では無かった。
同じ移るならWinアプリ開発ではC#でも同じじゃねと。
Re: (スコア:0)
いやぁ、vb.netも悪くないですよ。C#と同じことを、VBの書式でできるんですもの。
VB固有のレガシーな関数も使えますし。
とはいえ、VBの書式である必要は特にないので、C#でも良いですけどね。
VBの方が冗長だけど、ラムダ式の書き方とかはVBの方がわかりやすいですねぇ…。若干だけど素人向きかもね。
#VBじゃないと書けない記法が何かあった気がするんだよな…。なんだっけ。
Re: (スコア:0)
なんだかんだ言っても、PHP4 -> 5 -> PHP5.3~
と乗り越えてきてるけどね。
Re: (スコア:0)
そこでjsかいな。
Java回帰なんじゃないのか。
Re: (スコア:0)
システム屋さん的にはそうなんだけど、
Webデザイン屋さん界隈で特に
「バックエンドもjsでできるならフロントエンドエンジニアにバックエンドもやらせられるやん?」
と、安易に考えてる動きが少なからずあるね。
どうせなら (スコア:0)
オーバーロードも実装してくれ。トレイトでもなんとかなるけどオーバーロードつけてくれ。
Re: (スコア:0)
引数の型宣言が可能になったら次はオーバーロードやるんじゃないすかね。
てか現状でもオーバーロードは実現できるんじゃね?
受け取ったパラメータの型は判別可能なんだし。
それを静的にやりたいとか関数内で場合分けするのやだとかそういうのはわかりますけど。
Re: (スコア:0)
再度読んだら
「てか現状でもオーバーロードは実現…」以下に相当することは、
>トレイトでもなんとかなるけど
ってちゃんとかいてありましたね…。
ぼけてました、すみません。
Re: (スコア:0)
印象で強要するような程度の相手に合わせるバカはいないよ
Re: (スコア:0)
フォントレンダラの件のMSのように、突っぱねるのが普通です
Re: (スコア:0)
煽りは置いといてそれなりに同意。
PHPに新しいバージョンを望んでいる人がどれだけいるのかは気になる所ではあります。
新しいバージョンが出ることは古いバージョンのサポートが消えていくという事で、
古いプログラムの実行エンジンも上げて行かざるを得ず、互換性の問題に追い立てられる事になります。
PHPのユーザーの間に、そのデメリットに勝る新機能の需要が存在するだろうかという点に、大いに疑問を感じますね。
戻り値の宣言は確かに魅力的なものではありますが、きっちりプログラム書きたいなら他の言語でよくねってのは妥当な判断だと思いますし、
下手に当初の思想から外れる傾向の機能を盛っていくぐらいなら、思想から再定義したPHP亜種の別の言語として
フォークさせてしまった方が良いのではとも思います。
Re:いいから絶滅してくれ (スコア:2)
Re:いいから絶滅してくれ (スコア:1)
言語機能の追加はともかくPHP7は高速化もされるので待ち望んでいる人は多いです。
他言語でもよくね?という判断はよくわかりますが、
世の中の開発の多くは既存システムの改修なので、既存資産が活かしつつ、
他言語の安全性をある程度手に入れられるというのは大きいです。
それと他言語に置き換える前のクッションとしてもPHP7は有効だと思います。