flutter를 위한 Dart 기본문법 (for 타 언어 경험자)

728x90

이미 다른 프로그래밍 언어를 한개 이상 알고 있다고 가정하고 간단하게 설명한다.

기본적으로 OOP 를 이해한다는 가정하에 , 아래 문법만 익히고 들어가면 flutter 개발에 문제가 없을듯 하다.

다트의 진입점은 void main() 이다.

1. 선언

void main() {
	int num1 = 10;
	double num2 = 3.0;
	String str = 'hello';
	bool isTrue = true;

	// int와 double은 num을 상속받는다
	num num3 = 10;
	num num4 = 10.0;
	// 으로도 사용가능

	//Type Check
	print(num1 is int); // true
	print(num2 is int); // false

	print(num1.runtimeType) // int
}

2. 타입 추론

void main() {
	var i = 10; //int로 추론
	var d = 19.2; //double로 추론
	var str = 'hello' // String로 추론

	dynamic a = 10; // 개인적으로 다이나믹 지양함, 런타임때 타입 확정되는거라 별로임
}

3. 상수

void main() {
	final String name = 'last hello' // 런타임에 결정되는 상수
	const int age = 10; //컴파일 타임에 결정되는 상수 , 성능상 이점
}

4. Null

"타입?" 형식으로 선언해야만 nullable 이다. 아니면 null 대입 안됨.

void main() {
	int age = null; // 불가능함
	int? age2 = null; // 가능
	int? age3; // nullable

	// null을 주려면 타입에 ? 마크를 줘야함 (nullable)

	String? name;
	String name2 = 'hello';

	// String != String? 붙어있다면 애초에 다른 타입이다
}

5. 조건

void main(){
	int i = 10;

	if (i>5) {
	// 어쩌고
	} else if (i > 3 ) {
	// 저쩌고
	} else {
	// 끝
	}

    // && , || , >= , <= , == ,!= 등 조건문은 타 언어와 동일 

}

6. 반복문

void main() {
	for (var i = 0; i <= 10; i++) {
	//break , continue; 어쩌고
	}

	while (true) {
	// 어쩌고	
	}
}

7. 여러가지 오퍼레이터

void main() {
	String? str;

	str ??= 'hello'  // str이 null이면 hello 대입
    // or
	str = str ?? 'hello'  // 이렇게도 씀

	var condition = isGood == true ? 'good' : 'bad'; // 3항연산자
}

8.함수

Optional Parameter 존재 (구글링)

int sum(int a, int b){
	return a+b;
}


void main() {
	sum(1,2);

}

// 외에도 옵셔널 파라미터라고해서 int sum(int a, int b, [int c]) 처럼 c를 옵셔널로 지정 가능

9.리스트와 셋

void main() {
    //List 
    List<String> twice = ['momo', 'sana', 'mina'];
    List<int> numbers = [1,2,3,4];

    //index 모든 숫자는 0 부터 시작
    print(twice[0]) // momo

    // length , add , remove , indexOf 함수

    //Set은 나머지 함수는 거의 비슷하게 있음 (중복 값이 없다)

    // contains 함수 (set에서 포함인지 아닌지 리턴)
}

10.맵

void main() {
    //Key , Value 가 짝을 꼭 이루자

    Map<String, String> dict = {
        'Korea' : '한국',
        'Japan' : '일본',
        'USA' : '미국'
    }

    // addAll,remove,key,values 함수 등 존재

    print(dict['Korea']) // '한국' 이 프린트됨
    dict['China'] = '중국' // 추가
}

11.클래스

기존 클래스와 똑같음. constructor 생긴것만 한번 보기.

void main() {
	Animal 어흥이 = Animal('어흥이','150','어흐흐흥');
	어흥이.bark();
}

class Animal {
	String name;
	int weight;
	String voice;

	Animal(String name, int weight, String voice)
		this.name = name,
		this.weight = weight,
		this.voice = voice;

	void bark() {
		print('나는 ${voice} 하고 울지');
	}
}

12.상속

void main() {
  개발자 hong = 개발자(['Dart', 'Java','JavaScript'],'홍길동','서울');
  
  print(hong.name);
  print(hong.city);
  print(hong.languages);
  
  hong.say();
}

class 노동자 {
  final String? city;
  final String? name;

	void shout() {
		print("I am 나는 누구냐");
	}

  노동자({
    this.city,
    this.name,
  });
}

class 개발자 extends 노동자 {
  List<String>? languages;
  
	@override
	void shout() {
		print("I am 개발 노동자");
	}

  개발자({
    this.languages,
    String? city,
    String? name,
  }) : super(city:city, name:name);
  
  void say(){
    print('나는 ${this.name}. ${super.city} 사람 이다.}');
  }
  
}

13.mixin

// 13. mixin => 다중상속

void main() {
	Human 고수 = new Human(....)
}

mixin Moveable {
	void move() {}
}

mixin Runnable {
	void run() {}
}

class Animal {}

class Human extends Animal with Moveable,Runnable {
	.... 생략
}

14.Future

Promise 비슷하다고 생각하면 될 듯

void main() {
	helloFuture().then((value)=>print(value));
}

Future<String> helloFuture() async {
	await Future.delayed(Duration(seconds :3));
	return 'Hello";
}