1. 주석 작성 // 한 줄 주석 /* * 여러 줄 주석 * 중간 줄 시작으로 *를 사용 */ /// 슬래시 세개는 문서 주석
2. 콘솔 출력 print() 문자열 출력
3. 변수 선언 var 변수명 = 값; 자동으로 타입을 추론하는 기능을 제공 타입을 한 번 유추하면 추론된 타입이 고정 -> 고정이 된 변수에 다른 타입의 변수를 저장 시 에러 발생 dynamic 변수 = 값; 사용하면 변수의 타입이 고정되지 않아서 다른 타입도 저장 가능
final, const 키워드는 변수의 값을 처음 선언 후에는 변경 할 수 없음 final -> 런타임(실행을 해봐야 값을 알 수 있음) const -> 빌드타임 실행될 때 확정 : final 코드를 실행하지 않은 상태 값이 확정 : const
4. 변수 타입 모든 변수는 고유의 변수 타입을 가지고 있음. var 키워드를 사용하면 자동으로 변수 타입 유추 가능하지만 직접적으로 변수 타입을 명시해주면 코드가 더욱 직관적으로 되고 유지보수에 편하다 -> 직접 타입을 지정해야 하는게 좋다
다트는 프로그램 시작점(엔트리 함수 기호) : main()
컬렉션 : 여러 값을 하나의 변수에 저장할 수 있는 타입 -> 서로의 타입을 자유롭게 형변환이 가능하다는 장점 ㅇ List : 여러 값을 순서대로 저장 -> 리스트명[인덱스] : 인덱스는 원소의 순번(제일 첫 원소 0, 마지막 원소 -1) -> 리스트 길이 : 리스트명.length -> add() : List에 값을 추가할 때 사용, 추가 시 리스트의 끝에 추가 된다. -> where() : 리스트의 값들을 순서대로 순회하면서 특정 조건에 맞는 값만 필터링하는데 사용 -> map() : 리스트의 값들을 순서대로 순회하면서 값을 변경 가능, 반환하는 값이 현재값을 대체 -> reduce() : 리스트의 값들을 순서대로 순회, 순회할때마다 값을 쌓아감. 실행되는 리스트 요소들의 타입이 같아야함 -> fold() : reduce() 함수와 실행되는 논리는 같음. 어떠한 타입이든 반환 가능(reduce와 다른 점)
ㅇ Map : 특정 키값을 기반으로 빠르게 값을 검색(key : value) -> 원하는 값을 빠르게 찾는데 중점
ㅇ Set : 중복된 데이터를 제거할 때 사용(중복 없는 값들의 집합) -> 중복을 방지하므로 유일한 값들만 존재하는 걸 보장
ㅇ enum : 한 변수의 값을 몇가지 옵션으로 제한, 선택지가 제한적일 때 사용 -> 기본적으로 자동 완성이 지원, 정확히 어떤 선택지가 존재하는지 정의해둘 수 있기에 유용(ex. 시작, 진행 중, 종료)
연산자 ㅇ 기본연산자, 값 비교 연산자, 논리 연산자는 알고 있는 부분이라서 따로 안적음 ㅇ null 관련 연산자 -> 다트 언어에서는 변수 타입이 null값을 가지는지 여부를 직접 지정해줘야 함 -> 타입 키워드를 그대로 사용하면 기본적으로 null값이 저장될 수 없음 -> 타입 뒤에 ? 를 추가해줘야 null값 저장 가능(ex. double? testnum = 1;) -> ?? 를 사용하면 null일 때만 값이 저장 ㅇ 타입 비교 연산자 -> is 키워드를 사용하면 비교 가능
제어문 (크게 다른 것 없음) ㅇ if ㅇ switch -> case 끝에 break 키워드 무조건 사용(빼먹으면 컴파일 중 에러 발생) -> enum과 함께 사용하면 유용 ㅇ for -> 다트에서는 for...in 패턴도 제공
함수와 람다 ㅇ 함수의 일반적 특징 -> 한번만 작성하고 여러 곳에서 재활용 가능 -> 반환할 값이 없는 경우는 void키워드 사용 -> required 키워드 : 매개변수가 null값이 불가능한 타입이면 기본값을 지정해주거나 필수로 입력해야 한다는 의미 -> 포지션널 파라미터 사용시 [] 사용
ㅇ 익명함수, 람다함수 -> 둘 다 함수 이름이 없음 -> 일회성을 사용 -> 익명 함수 {} 람다 함수 => -> 람다 함수는 => 단 하나의 스테이트먼트 -> 간결한 코드 작성 가능, 가독성 높음, 일회성이 높은 로직을 작성할 때 주로 사용(map, reduce, fold)
ㅇ typedef -> 함수의 시그니처를 정의하는 값 -> 함수 선언부를 정의하는 키워드 -> 함수가 무슨 동작을 하는지에 대한 정의는 없음 -> 다트에서 함수는 일급 객체 -> 함수를 값처럼 사용 가능
ㅇ try~catch -> try와 catch 사이의 괄호에 에러가 없을 때 실행할 로직을 작성, catch가 감싸는 괄호는 에러가 났을 때 실행할 로직 작성 -> try로직에서 에러가 나면 이후 로직 실행되지 않고 바로 catch 로직으로 넘어감 -> throw 키워드 사용해서 고의적 에러 발생 가능