🙆‍♀️

Dart で var を極力避ける実装

2022/11/29に公開

var を利用する問題点

スコープ内であれば、値の代入が可能になってしまう。

var text = '';

switch (currentPage) {
	case 0:
		text = 'home';
		break;
	case 1:
		text = 'myPage'
		break;
	}

print(text);

解決法

  1. 関数の定義

    関数でスコープを絞ることで、再代入しづらくなる。

    String getText() {
    	var text = '';
    
    	switch (currentPage) {
    		case 0:
    			text = 'home';
    			break;
    		case 1:
    			text = 'myPage'
    			break;
    		}
    	
    	return text;
    }
    
    print(getText());
    
  2. 即時関数

    関数にする必要がなくなる。

    final text = (() {
    	var value = '';
    
    	switch (currentPage) {
    		case 0:
    			value = 'home';
    			break;
    		case 1:
    			value = 'myPage'
    			break;
    		}
    	
    	return value;
    })();
    
    print(text);
    
  3. final の分岐

    ネストを増やさないので、スッキリ書ける。

    late final では無いので、nullable であろうと代入忘れがあると Syntax エラーが出るので、例外処理も明示的に書ける。

    final String text;
    
    switch (currentPage) {
    	case 0:
    		text = 'home';
    		break;
    	case 1:
    		text = 'myPage'
    		break;
    	default:
    		text = '';
    	}
    
    print(text);
    
    

Discussion