일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- recyclerview
- 소울칼리버6
- 코틀린
- Coroutine
- DART
- Firebase
- 공자명언
- 좋은글필사하기
- androidx
- Flutter
- 이모지메모
- FSM
- 이모지
- ASMR
- Streaming
- Freesound
- 오픈소스
- kotlin
- Linux
- 벤자민플랭클린
- 공부집중
- bash
- jetpack compose
- 명언모음
- 파이썬
- Android
- 1인개발자
- 명심보감
- 장자명언
- 넷플릭스
Archives
- Today
- Total
Vintage appMaker의 Tech Blog
[dart] List를 이용한 Function table 활용 - case & 순차적 함수처리 본문
Source code or Tip/Flutter & Dart
[dart] List를 이용한 Function table 활용 - case & 순차적 함수처리
VintageappMaker 2022. 6. 16. 23:34
dart에서 List에 값을 넣을 때, Closure 형태의 함수들을 사용할 수 있다. 그러므로 case 문이 길어질 경우, case별 함수를 정의한 후, List로 만들어 인자를 넘기면 가져와 실행시킬 수 있는 Function table로 활용할 수 있다. kotlin, python, swift 같은 언어에서도 이러한 방식을 사용하는 경우가 종종 있다.
// 실행테이블
var fnTable = [
"초기값 100", 100,
(int n){return n * 3;}, (int n){return n - 3; },
"초기값 3", 3, (int n){return n - 3; }, "계산완료"];
List의 아이템이 다양한 타입일 경우, 가져온 아이템의 타입을 is로 비교한다. 그리고 비교한 결과가 true일 경우, 타입에 맞게 사용할 수 있다. 이때는 as를 이용하여 타입케스팅을 할 필요 없이 바로 사용가능하다.
void processCommand(List<Object> fnTable) {
int nValue = 0;
print ( "\n\n>>>>>>>>>>>> do action start:" );
for(var item in fnTable){
if (item is int Function(int)){
print ("do => ${nValue}을 입력하여 계산하기.");
// (item as int function(int))(3);
print ("> ${item(nValue)}");
}
if (item is int){
nValue = item;
print ("do => 값설정");
print("> set nValue = ${item}");
}
if (item is String){
print ("do => 메시지 출력");
print ("> $item");
}
}
print ( ">>>>>>>>>>>> do action end:\n\n" );
}
[전체소스]
import 'dart:io';
void main() {
// 실행테이블
var fnTable = [
"초기값 100", 100,
(int n){return n * 3;}, (int n){return n - 3; },
"초기값 3", 3, (int n){return n - 3; }, "계산완료"];
print (fnTable);
checkTable(fnTable);
processCommand(fnTable);
var fnTable2 = [ "처음시작", for(var f in fnTable) f, 1000, (int n){return n * 11;} ];
print (fnTable2);
checkTable(fnTable2);
processCommand(fnTable2);
}
void checkTable(List<Object> fnTable) {
print ( "\n\n>>>>>>>>>>>> 테이블 Item 종류:" );
for( var fn in fnTable){
print (fn.runtimeType);
}
print ( ">>>>>>>>>>>> 테이블 Item 종류:" );
}
void processCommand(List<Object> fnTable) {
int nValue = 0;
print ( "\n\n>>>>>>>>>>>> do action start:" );
for(var item in fnTable){
if (item is int Function(int)){
print ("do => ${nValue}을 입력하여 계산하기.");
// (item as int function(int))(3);
print ("> ${item(nValue)}");
}
if (item is int){
nValue = item;
print ("do => 값설정");
print("> set nValue = ${item}");
}
if (item is String){
print ("do => 메시지 출력");
print ("> $item");
}
}
print ( ">>>>>>>>>>>> do action end:\n\n" );
}
'Source code or Tip > Flutter & Dart' 카테고리의 다른 글
[Flutter] Widget의 overflowed pixcels error 처리 (0) | 2022.06.25 |
---|---|
[Flutter] visibility 설정위젯 (visible, invisible, gone 효과) (0) | 2022.06.24 |
[Flutter] keyboard 위에 TextField 노출시키기 (0) | 2022.06.08 |
[Flutter] Dio, retrofit을 이용한 github API 예제 (0) | 2022.05.23 |
[링크모음] Flutter 3.0 & Dart 2.17 달라진 점 (0) | 2022.05.18 |
Comments