ProgramHaskellHaskell入門 > 第1章 はじめてのHaskell

2022-01-24 (月) 公開
学習メモ
 Haskell入門 関数型プログラミング言語の基礎と実践
本間 雅洋
技術評論社
2017-09-27
¥3608

【Column】 静的型付けの限界

静的型付け言語でも型安全性を保証できない場合もあります。

(例)Javaの場合

Everything is expanded.Everything is shortened.
  1
 
int result = true ? 123 : "ABC";

これは、Javaの型システムが、3項演算子の第3項をこの場合は無視できることを判断できないために、コンパイルエラーが起きます。

Javaの三項演算子

条件演算子 (三項演算子)
条件演算子は 3 つの値を必要とする演算子で三項演算子とも呼ばれます。
条件式の真偽に応じて二つの値を返すことができ、あたかも if 文のような処理を行うことができます。

条件式 ? 式1 : 式2

条件式が true の場合は式1を評価した値を返します。
fales の場合は式2を評価した値を返します。
3 つの式をそれぞれ指定し、式1と式2は評価した結果として何らかの値を返す必要があります。

三項演算子を使っていいのは、単純なもののみに限られるのが自分の中での結論です。

(検証)paizaのオンライン実行環境で確認

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 
 
-
-
|
|
|
!
!
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

静的型付け言語でも、型安全性を保証できない場合もあることを念頭において利用しましょう。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-01-24 (月) 04:10:41 (315d)