반응형
Basic
void main() 
{
  // study0 : variable 
  var name = 'Yoon Engineer';
  print("Hello ${name}");  
  
  // study1 : Operator
  int number1 = 10;
  int number2 = 20;
  print('${number1} + ${number2} = ${number1+number2}');
  
  // study2 : Boolean and type check
  bool isTrue = true;
  bool isFalse = false;
  
  print(isTrue.runtimeType);
  print(isFalse);
  
  // study3 : String operator
  String name1 = 'Hello';
  String name2 = 'Yoon';
  
  print(name1 + ' ' +name2);
  print('$name1 $name2');
  
  // study4 : Dynamic vs Var
  dynamic dynamic_test = 'Yoon Engineer';
  print(dynamic_test.runtimeType);
  
  dynamic_test = 1;
  print(dynamic_test.runtimeType);
  
  // study5 : Null
  // nullable - null이 될 수 있음.
  // non-nullable - null이 될 수 없음.
  String null_test = 'Yoon';
  print(null_test);
  
  //null_test = null; // 오류
  String? null_test2 = 'Yoon';
  print(null_test.runtimeType);
  null_test2 = null;
  print(null_test.runtimeType);
}

 

Final vs Const
void main()
{
  // final : 값 변경 불가
  final String name = 'Yoon';
  
  print(name);
  
  // const : 값 변경 불가
  const String name2 = 'Yoon';
  print(name2);
  
  // final, const var을 따로 작성하지 않아도 됨.
  final name3 = 'Yoon';
  const name4 = 'Yoon';
  print(name3);
  print(name4);
  
  // final vs const
  // final은 빌드 타임 값을 몰라도 됨.
  // const는 빌드 타임 값을 알아야 함.
  final DateTime now = DateTime.now();
  
  //const DateTime now = DateTime.now(); // error
  
}

 

Null, Operator
void main()
{
  dynamic? number = null;
  
  print(null);
  // ?? 연산자 : 변수가 null이면 Rvalue로 변환함
  number ??= 4;
  print(number);
  
}
void main()
{
  int number = 1;
  
  print(number is int);
  print(number is String);
  print(number is double);
  
  print(number is! int);
  print(number is! String);
  print(number is! double);
  
  // Conditional operator
  bool result1 = 12 > 10 && 1 > 0;
  bool result2 = 12 > 10 || 0 > 1;
  print(result1);
  print(result2);
}

 

List, Map, Set
void main()
{
  // python list와 동일한 역할을 함
  List<String> blackPink = ['제니', '지수', '로제', '리사'];
  List<int> numbers = [1, 2, 3, 4, 5];
  
  // List length
  print(blackPink.length);
  // Python 처럼 -1과 같은 인덱싱은 안됨
  print(blackPink[0]);
  // List value remove
  blackPink.remove('리사');
  print(blackPink);
  // List value add
  blackPink.add('리사');
  print(blackPink);
  // List indexOf
  print(blackPink.indexOf('리사'));
}
void main()
{
  // Map : {key : value}
  // Python dictionary와 똑같은 역할을 함.
  Map<String, String> dictionary = 
  {
    'Harry Potter' : '해리포터',
    'Ron weasley' : '론 위즐리'
  };
  print(dictionary);
  
  // addall
  dictionary.addAll(
    {
      'Hermione Granger' : '헤르미온느 그레인저'
    });
  print(dictionary);
  dictionary['Hello'] = "안녕";
  
  // indexing
  print(dictionary);
  print(dictionary['Harry Potter']);
  
  // remove
  dictionary.remove('Hello');
  print(dictionary);
  
  // keys, values
  print(dictionary.keys);
  print(dictionary.values);
}

 

If, switch
void main()
{
  int number = 3;
  if (number % 3 == 0)
  {
    print("ha");
  }
  else if(number % 3 == 1)
  {
    print("haha");
  }
  else
  {
    print("hahaha");
  }
  switch(number % 3)
  {
    case 0:
      print('ha');
      break;
    case 1:
      print('haha');
      break;
    default:
      print('hahaha');
      break;
  }
}

 

For loop
void main()
{
  int total = 0;
  List<int> numbers = [0, 1, 2, 3, 4, 5, 6];
  
  for(int n in numbers)
  {
    print(n);
  }
  
  print("----------------------");
  
  for(int n in numbers)
  {
    if(n == 3) continue;
    if(n == 5) break;
    print(n);
  }
}

 

Function, Signature
void main()
{
  var result1 = addNumbers(a:1, b:2);
  print(result1);
  
  var result2 = addNumbers(a:1, b:2, c:3);
  print(result2);
}

// named parameter
String addNumbers({
  required int a, 
  required int b, 
  int c =20})
{
  print('${a+b+c}');
  
  return 'success';
}
void main()
{
  int result = calculate(1, 2, 3, add);
  print(result);
}
 
// signature
typedef Operation = int Function(int x, int y, int z);

// 덧셈
int add(int x, int y, int z) => x + y + z;

// 뺄셈
int subract(int x, int y, int z) => x - y - z;

// function
int calculate(int x, int y, int z, Operation operation)
{
  return operation(x, y, z);
}

하루 정도 시간 내어 flutter를 하기 전에 Dart 언어를 쫙 읊어 보는 시간을 가져 본다.

Dart 언어는 공부해 보니 Java와 유사함을 느낌.

1. Var과 Dynamic : var는 한 번 타입이 정해지면, 변경 불가능. Dynamic은 한 번 타입이 정해지더라도 변경 가능.

2. Flutter2.0부터는 Null에 관련된 이슈가 업데이트됐다고 한다. 공부할 필요가 있을 것 같음.

3. final, const의 차이는 빌드 타임이다. final은 빌드 타임을 몰라도 되고, const는 알아야 함.

4. ??연산자는 null이면 Rvalue로 변환함.

5. 조건 연산자, 비트 연산자는 C와 동일함. 하지만 Dart 언어로 펌웨어 코딩할 일이 없으므로 비트 연산자는 사용되지 않을 것 같음.

6. List, Map, Set 모두 java와 일치함.

7. for 문도 java와 일치함. 결국 항상 느끼지만 새로운 언어를 공부할 때, 한 가지라도 제대로 터놓으면 다른 언어는 공부하기 편하다는 것을 뼈저리게 느낌.

아직까지 이상무.

728x90
반응형

'Flutter > Dart' 카테고리의 다른 글

Dart Study #2 클래스, 상속  (0) 2022.08.04
Dart Study #3 futures, async, await  (0) 2022.07.23

+ Recent posts