공부 일기/TIL

Flutter 창업반 2주차 TIL2 - Dart 심화문법

oosuhada 2024. 11. 1. 09:46

 

10/29 화 - 심화문법

 

  1. Collection : 여러개 변수 묶어서 넣는법.

 

  • List (순서 있는 값) 

List<[타입]> [변수 이름] = [요소]; or  var [변수 이름] = [요소]; 요소에 변동이 없다면 final이나 const로도 선언 가능 

/ length 를 통해 요소의 개수 

/ isEmpty 요소 비었으면 true, 요소 있다면 false

/ indexOf() 를 통해 특정 요소의 index 반환 

/ add() 는 요소 하나만, addAll() 은 여러 요소 추가 가능

/ remove()로 요소 삭제, removeAt() 을 통해 Index삭제

/ clear() 통해 모든 요소 삭제

 

  • Set (중복 허용하지 않는 값 집합, 순서가 없는)

Set<타입> [변수 이름] = {요소};

/요소 없는 set도 { }안을 비워서 만들 수 있음

/요소 변동이 있는 경우 var로 선언 - 타입 추론

/요소 변동 없는 경우 final, const로 선언

/같은 타입이 아닌경우 set대신 var로 -> object로 추론

/순서가 없기에 Index도 없다

/중복 자동으로 제거해줘서 제거하는 기능으로도 사용

/ length 를 통해 요소의 개수 

/ isEmpty 요소 비었으면 true, 요소 있다면 false

/ isNotEmpty 반대

/ add() 는 요소 하나만, addAll() 은 여러 요소 추가 가능

/ remove()로 요소 삭제

/ contains() 을 통해 특정 요소가 있는지 True False

/containsAll() 을 통해 여러개 모두 포함되어 있는지 (and 개념)

 

  • Map; (Key) 와 (Value) 이 묶인 하나의 쌍을 묶어서 값

/var로 선언 - 타입 추론

/요소 변동 없는 경우 final, const로 선언 가능

/키와 값은 다른 타입 가능, 키는 키끼리, 값은 값끼리 같은 타입이어야 함 - 아니면 object로 추론

/키는 중복x Index와 같이 고유함, 값은 중복 가능

/ length 를 통해 요소의 개수, 키:값 이 한 요소

/ isEmpty 요소 비었으면 true, 요소 있다면 false

/[변수 이름][[키 이름]] 으로 값을 검색, 없으면 null

/[변수 이름][[키 이름]] = [값];으로 수정,추가 가능

/remove()로 요소 삭제, removeat은 사용x

/containsKey() 통해 특정요소 확인 true false

/keys로 key만 따로 뽑아낼수 있음

/values로 값만 따로 뽑아낼 수 있음 - 중복된 값 모두 출력됨

 

  1. 열거형 : enum [열거형 이름] {요소} 

/한줄로도 여러줄로도 열거 가능

/열거형 이름.요소 통해서 값에 접근

/switch문으로 각각 값에 접근, 다룰 수 있음

/if문으로도 똑같이 다룰 수 있지만 열거형+switch특히 상성이 잘 맞음

/요소.index 통해 순서 알 수 있음

/열거형이름.values 통해 모든 요소값 알 수 있음

ㄴindex 사용 가능

/***Set과 완전히 다름. 


List set (집합) enum (집합)
추가 제거 가능 가능 add,addAll,remove                                     불가능
중복 가능 불가능 가능 - 자동제거 불가능 오류
순서 있음 없음 있음
Index 있음 없음 있음

[ ] { } { }

 

  1. *함수 : 특정 작업을 수행

/[반환 타입] [함수 이름]([매개변수 타입] [매개변수 이름]) { return [반환값]; }

 

리턴타입 함수명(파라미터) {

명령어들

}

 

/ 한줄로 표현 가능한 경우 return 대신 => 사용 가능

/ 함수 선언 후 함수 이름을 가지고 호출

/void main() { … }에서 main함수는 프로그램 실행을 위한 최상위 함수

/return이 없을때 void를 사용. void를 쓰지 않아도 return이 없다면 void로 타입추론

/cf. main함수의 형제 함수 List<String> - 명령 프롬프트에서 사용

/*함수를 사용하면 패턴 비슷한 코드들 반복 줄이고 코드 효율성이 높아짐

 

  1. *제네릭 : 함수에서 확장, 일반화하여 다양한 타입 지원. 제네릭 함수 와 제네릭 클래스

/[타입 파라미터] [함수 이름]<타입 파라미터>([매개변수]) { … }

/한글자로 보통 T나 E를 많이 사용

/T 전달받은 타입으로 리턴하겠다. - 어떨때는 inst, 어떨때는 String 입력받은 타입으로 리턴해서 제네릭

/getFirstNumber, getFirstWord와 같이 비슷할때 int, String등 타입에 의존하지 않고 타입으로 묶어서 getFirstElement로 사용가능

/List<E> Set<E> Map<E> 각각 제네릭. E에 여러 파라미터 들어올 수 있음

 

T getFirstElement<T>(List<T> list) { return list[0]; } void main() { var numbers = [0, 1, 2, 3]; print(getFirstElement(numbers)); // 0 var words = ['a', 'b', 'c']; print(getFirstElement(words)); // a }

->  T getFirstElement<T> (List<T> list = numbers ) { ... } 로 작동했음

 

Cf. 문자열에서 ‘ ‘까지 출력하고 싶다면 print( " \' a \' " );

Cf. { ... } 안에 있으면 지역변수, 밖에 있으면 전역변수