Flutter

Dart 문법 정리

cottoncover 2023. 7. 28. 15:40
728x90
반응형
SMALL

1. 변수 선언

// 정수
int variable1 = 10;

// 소수
double variable2 = 2.5;

// 참/거짓
bool variable3 = true, false;

// 문자열
String varibale4 = "문자열";

// 타입 자동 유추
var variable5 = "var";
dynamic variable6 = "dynamic";

 

dynamic과 var의 차이

  • var은 선언 시 지정한 타입으로 고정되어 다른 타입을 할당 할 수 없습니다.
  • dynamic은 선언 시 지정한 타입과 다른 타입으로 할당 할 수 있습니다.
dynamic variable1 = "dynamic";
var variable2 = "var";

variable1 = 10
variable2 = 10 // 오류

 

nullable & non-nullable

타입 뒤에 ? 연산자를 붙여주면 null일 가능성이 있는 nullable 변수라는 뜻입니다.

String? variable1 = "hi hi";
variable = null;

nullable한 변수 뒤에 ! 를 넣어주면 이 nullable 변수가 null이 아니라는 것을 단언해주는 것입니다.

 

 

final & const

final String name1 = "cotton";
const String name2 = "cotton";

두 키워드는 모두 선언된 변수를 변경 할 수 없도록 해줍니다.

두 키워드로 선언된 변수는 다시 변경 할 수 없으므로 타입을 생략해서 선언해주어도 됩니다.

두 키워드의 차이점

  • const 키워드는 빌드 타임 당시 할당 되는 값을 알고 있어야 합니다. (DateTime.now() 와 같이 런타임 당시에 정해지는 값은 지정 할 수 없습니다)
  • final 키워드는 빌드 타임 당시 할당 되는 값을 알고 있지 않아도 됩니다.

 

연산자

int num1 = 1;
int num2 = 2;

// 더하기
print(num1+num2); // 3

// 빼기
print(num1-num2); // -1

// 나누기
print(num1/num2); // 0.5

// 곱하기
print(num1*num2); // 2

num1+=1;
print(num1); //2

num1-=1;
print(num1); // 1

num1*=2;
print(num1); // 2

num/=2;
print(num1); //1

// 단항 연산자
num1++;
print(num1) // 2;

bool bool1 = true;
print(bool1!); // false

// 논리 연산자
bool bool2 = true && true; // true
bool bool3 = false && true; // false
bool bool4 = true || false; // true
bool bool5 = false || false; // false

// null check
int? num3 = 3;
int? num4 = null;
num3 ??= 4; //왼쪽 변수가 null 일 때만 오른쪽의 값을 할당해줍니다.
num4 ??= 4; //왼쪽 변수가 null 일 때만 오른쪽의 값을 할당해줍니다.
print(num3); // 3
print(num4); // 4

// 크기 비교
print(num1<num2); // true
print(num1>num2); // false
print(num1==num2); // false
print(num1!=num2); // false
print(num1<=num2); // true
print(num1>=num2); // false

// 타입 비교
print(num1 is int); // true
print(num1 is! int); // false

 

 

리스트

List<T> generic 타입으로 리스트 원소의 타입을 지정해줍니다.

List<String> stringList = ['s1','s2','s3'];

print(stringList[0]); // s1
print(stringList.length); // 3

stringList.add('s4');
print(stringList[3]); // s4

stringList.remove('s3');
print(stringList); // s1, s2, s4

print(stringList.indexOf('s2'); // 1

 

 

Map<K,V> 키와 밸류 타입을 지정해줄 수 있습니다.

Map<String, String> map1 = {'key1':'value1'};

// 값 추가
map1.addAll({'key2','value2'});
map1['key3'] = 'value3';

// value 반환
print(map1['key2']); // value2

// 값 제거
map1.remove('key2');

print(map1.keys) // key1, key3
print(map1.values) // value1, value2

 

 

Set<T> T타입의 집합입니다. 중복된 값이 없도록 저장해줍니다.

Set<int> set1 = {1,2,3,4,5};

set1.add(6);
set1.add(4);

print(set1) // 1,2,3,4,5,6

print(set1.contains(4)); // true

 

 

if 문 for문 while 문

if(조건1){
    실행문1
    ...
} else if(조건2){
    실행문2
    ...
} else {
    실행문3
    ...
}

switch(변수) {
    case 조건1:
        실행문1
        break
    case 조건2:
        실행문2
        break
    default:
        실행문3
        break
}

for(반복 변수 선언; 반복 조건; 반복 변수 연산){
    실행문
}

// 예시2
for(int i=0;i<10;i++){
    실행문
}

// 예시2
List<int> numberList = [1,2,3,4,5];
for(int number in numberList){
    실행문
}

while(반복 조건){
    실행문
}

// break, continue
for(int i=0; i<10; i++){
    ...
    if(i==5){
        break;
    }
    ...
}
// i가 4까지만 반복됩니다.

int i=0
while(i<10){
    i+=1;

    if(i==4){
        continue;
    }
    print(i);
}
// 4는 출력되지 않습니다.

 

 

함수

<Type> <함수명>(<매개변수 타입> <매개변수 명>){
    실행문
}

void add(int n1, int n2, int n3){
    print(n1+n2+n3);
}

add(1,2,3); // 6

 

 

optional parameter

매개 변수 중 항상 필요한 매개 변수가 아닐 경우 optional parameter로 선언할 수 있습니다.

optional parameter는 미리 값을 할당해 줌으로써 인자를 받지 못해도 실행문 상에서 사용되도록 할 수 있습니다.

optional paramter에 새로운 값을 넣어주면 미리 할당해준 값들은 무시가 되고 새로 들어온 값이 매개변수에 할당됩니다.

void add(int n1, [int n2=2, int n3=3]){
    print(n1+n2+n3);
}

add(1); // 6
add(1,5,10); // 16

 

 

named paramter

이전까지의 매개변수는 모두 순서를 통해 어떤 매개변수인지 구분하는 매개변수였습니다.

named paramter는 이름으로 매개변수들을 구분해줍니다.

매개 변수의 default는 optional parameter이고 꼭 필요한 매개변수인 경우 required 키워드를 지정해주어야만 합니다.

void add({
    required int x,
    required int y,
    int z=10 // z는 optional parameter이므로 꼭 default 값을 넣어주어야 합니다.
}){
    print(x+y+z);
}

add(x: 1, y: 2); // 13
add(x: 1, y: 2, z: 3); // 6

 

 

arrow function

실행문이 한 줄로 짧고 반환되는 값이 있을 경우 사용됩니다.

int add(int num1, int num2) => num1+num2;

print(add(4,5)) // 9

 

 

typedef

함수에 대한 타입을 가질 수 있습니다.

이로 인해 함수를 함수의 매개변수로 가질 수도 있고 반환 타입으로 설정 할 수 있습니다.

typedef Operation = int Function(int x,int y);

int add(int x, int y) => x+y;

int func(int x, int y, Operation f){
    return f(x,y);
}

print(func(1,2,add)) // 3




typedef o1 = int Function(int x1, int x2);

o1 func(int x4, int x5){
  int v1(int x1, int x2){
    return x4+x5+x1+x2;
  }

  return v1;
}

print(func(4,5)(1,2)) // 12
반응형
LIST