#author("2022-01-23T19:25:02+00:00","default:sagasite","sagasite")
[[Program]] > [[Haskell]] > [[Haskell入門]] > 第1章 はじめてのHaskell
RIGHT:2022-01-24 (月) 公開
//RIGHT:2022-01-24 (月) 更新
#html{{
<div class="alert alert-info">学習メモ</div>
<table border="0" cellpadding="5"><tr><td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4774192376/vertex9-22/" target="_blank"><img src="https://m.media-amazon.com/images/I/41xoNsYARcL._SL160_.jpg" border="0"></a></td><td> </td><td valign="top"><a href="https://www.amazon.co.jp/exec/obidos/ASIN/4774192376/vertex9-22/" target="_blank">Haskell入門 関数型プログラミング言語の基礎と実践</a><br>本間 雅洋<br>技術評論社<br>2017-09-27<br>¥3608</td></tr></table>
}}
#contents
//----------------------------------------
* 【Column】 静的型付けの限界 [#q9986892]
静的型付け言語でも型安全性を保証できない場合もあります。
**(例)Javaの場合 [#p29901ac]
#code(java){{
int result = true ? 123 : "ABC";
}}
これは、Javaの型システムが、3項演算子の第3項をこの場合は無視できることを判断できないために、コンパイルエラーが起きます。
*** Javaの三項演算子 [#j6f0f198]
- Java | 条件演算子(三項演算子)
https://www.javadrive.jp/start/ope/index13.html
>''条件演算子 (三項演算子)''
条件演算子は 3 つの値を必要とする演算子で三項演算子とも呼ばれます。
条件式の真偽に応じて二つの値を返すことができ、あたかも if 文のような処理を行うことができます。
条件式 ? 式1 : 式2
>条件式が true の場合は式1を評価した値を返します。
fales の場合は式2を評価した値を返します。
3 つの式をそれぞれ指定し、式1と式2は評価した結果として何らかの値を返す必要があります。
- Javaで三項演算子はどこまで許されるか - Qiita
https://qiita.com/ikemo/items/f81f08055bb873b4d648
>三項演算子を使っていいのは、単純なもののみに限られるのが自分の中での結論です。
**(検証)paizaのオンライン実行環境で確認 [#u6105196]
- (Java) | ブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IO
https://paiza.io/projects/LQ5zlCsbS9yS0lKBVEiRag?language=java
#code(java){{
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
// Your code here!
System.out.println("XXXXXXXX");
int result = true ? 123 : "ABC";
}
}
}}
上記のJavaコードをコンパイルすると、エラーメッセージが出ます。
Main.java:7: error: incompatible types: bad type in conditional expression
int result = true ? 123 : "ABC";
^
String cannot be converted to int
1 error
静的型付け言語でも、型安全性を保証できない場合もあることを念頭において利用しましょう。