パスワードを忘れた? アカウント作成
11982076 story
PHP

次期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に達しなかったことから、共倒れを避けるため両方の仕様が採用されたためとのこと。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2015年03月28日 16時53分 (#2786460)

    「戻り値」が「return value」の一般的な訳語かと思っていたけど、PHPでは違うんでスカイノ。

    #PHPは入門書の数ページしか読んでいない(「当座数年内の私の業務には関係ない」と悟った)ので、
    #見当はずれだった(「戻り値」とは概念の異なる用語として扱われているなど)らすまない

    • by Anonymous Coward

      PHP以外でも「返り値」って表記はよく見かけるので、特に違和感はない。

      # 自分で書くときは「戻り値」だけど。

      • by Anonymous Coward

        その手の表記揺れは訳語には憑き物だし、自分でもチョイチョイ間違えるのでそんなに違和感ない。
        文句があるなら、常に英語表記した方が安全だと思う。

      • by Anonymous Coward

        I'm comingみたいに主体の差だからぜんぜん許容範囲

    • by Anonymous Coward

      言われるまで気にしたこともなかったですが、PHPのリファレンスだと確かに「返り値 [php.net]」となってますな。

      仕事でそれなりの規模があるアプリをPHPで開発しているので、型が宣言できるようになるのは非常に助かります。
      引数が数値だったり文字列だったり、はたまたobjectを返すかと思ったらfalseを返してたり、PHPしかやってない人のソースはわけわからんわ・・・。

      • Re:返り血? (スコア:3, 興味深い)

        by taka2 (14791) on 2015年03月28日 19時24分 (#2786529) ホームページ 日記

        > 引数が数値だったり文字列だったり、
        引数の型を変える方は、静的型付けなJavaやC++とかでも「関数のオーバーロード」がありますので、PHPが特殊というわけでもないでしょう。

        > はたまたobjectを返すかと思ったらfalseを返してたり、PHPしかやってない人のソースはわけわからん

        こっちはPHPなどの動的型付け言語に特有な話ですが、それは利用者の問題ではないでしょう。PHPの組み込み関数レベルで、「エラー時はfalseを返す」ような仕様はあふれてますよ。
        状況に応じて返り値の型を変えられる、というのは動的型付け言語の醍醐味といっていいんじゃないかと思います。

        とはいえ、PHP組み込みのstrpos(文字列検索関数)などのような「見つかった時は、見つけた位置(0オリジン)を返す」「見つからなかった時はfalseを返す」という設計仕様が、
        PHPの「false == 0」が真になるという言語仕様とあいまって、「if (strpos(…) != false) {」って記述だと「0桁目で見つかっても見つからなかったことになる」から「そういう時は型チェックを厳密に行う === / !== を使え」ってことになるわけですが。

        PHPは「手軽さ」を売りにしつつ「手軽に使おうとすると罠にはまる」というひどい言語になっちゃってるんだよねぇ…

        # 0 と false と null に別の意味を持たせて使い分けるハメになった時は、ちょっと後悔しました。

        親コメント
    • by Anonymous Coward

      プログラムってのはなぁ、ハックアンドスラッシュなんだよ。
      真っ赤に染まってコードを書くんだ。

      • by Anonymous Coward

        PHPコードのデバッグもディアブロも、両方とも時間泥棒だしな。

    • by Anonymous Coward
      「返り値」と「戻り値」では戻り値の方がしっくりくるけど、
      メソッドの説明書いてるときは、「結果としてxxを返す」「xxが返る」と書くな。
      「xxが戻る」とはほとんど書いたことない気がする。

      だからか、返り値でもそんなに違和感はない。

      ※ 個人の感想です
      • by Anonymous Coward

        私はまさに『「値を戻す」「値が戻る」って言わないだろ?』って理屈で、返値で通してる。
        // 送り仮名まで省略しちゃってるな。

    • by Anonymous Coward

      戻り値の方が正直意味が分からないのは気のせい?
      値そのものは戻りも返りもしていないんだぜ。

      返り値だったらまだ「返答」なのかなってのがあるんだけど。

      一番適切なのは「応答値」とかなんじゃねえのかなーって個人的な脳内では思ってる。

      • by Anonymous Coward

        返却値じゃないかの。

        正直、引数経由で返すのも、returnで返すのも戻り値/返り値には違いないので面倒だよねぇ。
        術語としては、関数の返値といえば引数ではなくreturn返却値のことなのだけど、日本語表現としては曖昧よね。

  • by Anonymous Coward on 2015年03月28日 16時53分 (#2786459)

    Hack言語へと移行する方が楽しそう。

    そういえば Wikimedia も HHVM を導入したそうだよ。
    How we made editing Wikipedia twice as fast [wikimedia.org] [qiita.com]

  • by Anonymous Coward on 2015年03月28日 19時44分 (#2786541)

    かえって他の言語にシェアを奪われるのは気のせい?
    喩えるなら、VBがVB.netになった時にけっこうな開発者が「OOPなら一緒やわ」ってJavaとC#に流れた印象があるんだけど。

    今だと、「だったらNode.js使ってみるわ」って層が少なからずいるように思う。

    • >喩えるなら、VBがVB.netになった時にけっこうな開発者が「OOPなら一緒やわ」ってJavaとC#に流れた印象があるんだけど。

      いやむしろ「VB6のコードが動かないんやったら、それVBちゃうやろ」ってことで、
      VBユーザーがVB6に止まるか、他の言語に移るかの二者択一を迫られたんじゃね。

      そして移行先としては、VB.netは魅力的では無かった。
      同じ移るならWinアプリ開発ではC#でも同じじゃねと。

      親コメント
      • by Anonymous Coward

        いやぁ、vb.netも悪くないですよ。C#と同じことを、VBの書式でできるんですもの。
        VB固有のレガシーな関数も使えますし。

        とはいえ、VBの書式である必要は特にないので、C#でも良いですけどね。
        VBの方が冗長だけど、ラムダ式の書き方とかはVBの方がわかりやすいですねぇ…。若干だけど素人向きかもね。

        #VBじゃないと書けない記法が何かあった気がするんだよな…。なんだっけ。

    • by Anonymous Coward

      なんだかんだ言っても、PHP4 -> 5 -> PHP5.3~
      と乗り越えてきてるけどね。

    • by Anonymous Coward

      そこでjsかいな。
      Java回帰なんじゃないのか。

      • by Anonymous Coward

        システム屋さん的にはそうなんだけど、
        Webデザイン屋さん界隈で特に
        「バックエンドもjsでできるならフロントエンドエンジニアにバックエンドもやらせられるやん?」
        と、安易に考えてる動きが少なからずあるね。

  • by Anonymous Coward on 2015年03月29日 14時53分 (#2786826)

    オーバーロードも実装してくれ。トレイトでもなんとかなるけどオーバーロードつけてくれ。

    • by Anonymous Coward

      引数の型宣言が可能になったら次はオーバーロードやるんじゃないすかね。
      てか現状でもオーバーロードは実現できるんじゃね?
      受け取ったパラメータの型は判別可能なんだし。
      それを静的にやりたいとか関数内で場合分けするのやだとかそういうのはわかりますけど。

      • by Anonymous Coward

        再度読んだら
        「てか現状でもオーバーロードは実現…」以下に相当することは、

        >トレイトでもなんとかなるけど

        ってちゃんとかいてありましたね…。
        ぼけてました、すみません。

typodupeerror

コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell

読み込み中...