public int cal(int a){ //計算処理 }
のコードのように戻り値の型として、int型を指定していますが、
このほかにも様々な戻り値の型がもちいられます。
しかし、僕にとって、戻り値の型の指定は
このメソッドがどの型の戻り値を返すかを示すものにすぎません
例えば上の場合、calメソッドはint型を返すのか、とわかります。
つまり、人間の理解のための印にしか感じません。
戻り値の型の指定をすることがjavaの文法から消えたら
人間の理解のほかに、不具合が生じることがあるのですか?
教えてください
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
静的型付け言語でも戻り値の型指定をなくすことは可能で、実際にそういう仕様にしている言語はたくさんあります。型推論と呼ばれます。
(型推論というのはもっと広い分野を指す用語ですが)
C++は省略できるようになりましたし、TypeScriptも、あとなんだ、Crystal。いきなりマイナー言語すみません。
関数型言語は大体戻り値型指定いりませんし。
投稿2016/10/03 12:24
総合スコア5568
0
ベストアンサー
まず、動的(型付け)言語では型を指定しないので、
プログラムを動作させるのに絶対必須ではありません。
しかし、静的言語、
とくに大規模開発によく用いられるJavaでは、
開発の属人性を低くするため性悪説的に、
interfaceと合わせて型安全性を重視しています。
したがって、戻り値の型も指定するのです。
これだけだと分かりにくいと思うので、さらに詳しく言います。
ひとりで組んでるときは、戻り値の型指定が不要に思えるでしょうが、
多人数で組むと、設計者(や他の実装者)の意図が不明なことがあります。
とくにインターフェイスによる型指定は設計の意図を示します。
静的言語の型付け部分は、型設計用の専用言語
だと考えると分かりやすいです。
これには違和感があるかもしれませんが、
でもたとえば正規表現も、ホスト言語とは別の外部DSLですが、
パターンマッチ用のひとつの言語として認められてますよね。
つまり、(インターフェイスによる)型指定は、「戻り値はintだよ」などと、
自分とは別の設計者(または他の実装者)が、意図を示しています。
しかも、意図を示すだけならコメントに書いてもいいですが、
コンパイルエラーで弾くことによって、
設計の型を実装者に機械的に強制できます。
これをしないと、たとえば実装者が勝手に戻り値を別の型にしてしまい、
別の場所で型のエラーが出て、デバッグに時間がかかったりします。
だから、大規模開発で、型付けのコストを
デバッグやテストなどのコストが上回るとしたら、
型付けに合理性があるだろう、という考え方です。
投稿2016/10/03 12:35
編集2016/10/03 12:43総合スコア5592
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
こんにちは。
以下、「こういうことをしてみてはいかがでしょう?」という提案になります。
ですので、質問に対する直接的な回答にはなっていないかもしれません。
その点はご了承ください。
まず、僭越ながら言わせて頂きますと、そういう細かいところにいちいち疑問を持ち、
適当な自己流の解釈で流さないで、このような質問サイトで、質問として投げる
というのは、プログラマーになるための資質として大変良いことと思いました。
貴殿のブログも拝読させて頂きましたが、Androidアプリを開発することを見据えて、
JAVAからプログラミングを始められたとお見受けしました。自分が作りたいアプリを、
まがりなりにも作れる段階までJAVAの学習を進めるのは、主軸としてはよいと思う一方で、
戻り値の型の指定をすることがjavaの文法から消えたら
人間の理解のほかに、不具合が生じることがあるのですか?
という疑問を別の角度から考えるために、動的型付け言語の
どれか1つに、一瞬寄り道してみるのもいいかもしれません。
(というのが私の提案です。)
寄り道する言語は、Python でもPHPでもRubyでも、どれか好みのものを
選べばよいかと思います。
これらの言語の入門編に寄り道したあとで、この質問を再度
振り返ると、おそらく何か気づきがあると思います。
学習が上手く進むといいですね。
投稿2016/10/03 13:02
総合スコア9058
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/03 14:12
0
Javaは静的型付け言語なので実行前にメソッドの返す型がわかっている必要があります、Javaではコンパイル時にメソッドが返す型を解析しています。
仮にこの仕様がなくなった場合、実行時に型付けの齟齬が出てしまうため実行時エラーが大量に発生しますね。
リファレンスを見ればいいと言う人もいますが、全ての人がリファレンスを見ているわけではありません。これはteratailの質問を見てもわかりますよね。
投稿2016/10/03 12:28
総合スコア18155
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/03 12:42
0
人間の理解のための印にしか感じません。
そんなことはありません。例えば、以下のようなメソッドを書けばコンパイルエラーになります。
java
1public int cal(int a){ 2 // 返り値の型が合わずコンパイルエラー 3 return "some invalid string"; 4} 5 6public int cal2(int a){ 7 if(a == 5){ 8 return 3; 9 } 10 // 値を返さない可能性があるのでコンパイルエラー 11}
そして何より、このメソッドを使う側で型情報が必要となります。
投稿2016/10/03 12:22
総合スコア145121
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/03 12:28
2016/10/03 12:52
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/03 12:49