Dart 언어 기본기

2022. 10. 2. 16:34프로그래밍 언어/Flutter

느낀점 

  • java와 다르게 Wrapper 클래스가 없네? List<int> 사용
  • 처음 보는 ?? 문법 / enum  
  • final 과 const 차이 처음 알음
  • print는 파이썬 스럽다.
  • typedef + arrow function 유용하다! 

출처: Dart #1.기본기 : [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출! 

https://www.inflearn.com/course/%ED%94%8C%EB%9F%AC%ED%84%B0-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8/unit/102748

 

print 출력 팁 $

String name ='레드벨벳';
String name2 = '슬기';

print(name + name2);
print(name+' ' + name2);
// '${변수명}'
print('${name} ${name2}');
print('$name $name2');

변수 Type

var, dynamic 은 오른쪽의 값으로 type을 유추한다.

 // 값 초기화시 type이 변하는 dynamic
  dynamic name ='코드팩토리';
  // 문제없음.
  dynamic name= 2;
  
  //최초 초기화시 type을 따라가는 var
  var name2 ='블랙핑크';
  // 안됨.
  name2 =5;

Null 로 초기화 가능하게 하는법 : Type 뒤에  ?을 붙혀라.

( !을 붙히면 null 이 아니라는것을 의미 : 표시용 )

 // nullable -null 이 될수 있다.
  // non-nullable - null이 될수없다.
  // null -아무런 값도 있지 않다.
  String name ='코드팩토리';
  
  print(name);
  
  // ?을 붙히면 null 로 초기화 가능
  String? name2 ='블랙핑크';
  name2 =null;
  print(name2);
  name2 ='null 아님';
  print(name2!);

Final 과 const 차이점 

 //final 은 빌드 타입의 값을 몰라도 됨  
  final DateTime now= DateTime.now();
  
  print(now);
  
  //const 는 빌드 타입의 값을 알아야됨  
  // DateTime.now 는 빌드 순간에 값이 정해지기 때문에 값을 알수 없기때문에 에러가 난다. 
  const DateTime now2 =DateTime.now();
  
  print(now2);

만약 변수 값이 null 이라면 값 변경 해라 : '??'

 //null 
 double? number =4.0;
 print(number);
  
  number =2.0;
  print(number);
  
  number =null; // 주석처리
  print(number); // 주석처리 
  
  // number가 null 이면 값을 3으로 바꿔라. 
  number??=3.0;
  print(number);

null이 아닐때(주석처리 시)
null로 바꿀시

not 쓰는법

 int n =1;
 print(n is int);
 print(n is String);  
 print(n is! int);
 print(n is! String);

자료구조 

List<>

 List<String> blackPink =['제니','지수'];
 print(blackPink.length);
 
 blackPink.add('코드팩토리');
 print(blackPink);
 
 blackPink.remove('지수');
 print(blackPink);
 
 print(blackPink.indexOf('코드팩토리'));

Map<String, bool>

 //Map
 // key / Value
 Map<String,String> dictionary ={
   'kim':'김',
   'Ron':'론',
   'Moon':'문',
 };
  
print(dictionary); // {kim: 김, Ron: 론, Moon: 문}

Map<String,bool> isdict ={
   'kim':true,
   'Ron':true,
   'Moon':true,
};

print(isdict); // {kim: true, Ron: true, Moon: true}

// 요소 추가 방법 2가지
isdict.addAll({
  'spider': false,
});

isdict['Hulk']=false;
  
print(isdict); //{kim: true, Ron: true, Moon: true, spider: false, Hulk: false}
print(isdict['spider']);// false
Map<String,bool> isdict ={
   'kim':true,
   'Ron':true,
   'Moon':true,
};

isdict.remove('kim');
print(isdict); // {Ron: true, Moon: true}
print(isdict.keys); // (Ron, Moon)
print(isdict.values); // (true, true)

 

Set<>

 // Set 
 final Set<String> names ={
   'code',
   'dode',
   'fode',
   'code',
 };
 print(names);// {code, dode, fode}
 names.add('jenny');
 print(names); //{code, dode, fode, jenny}
 
 names.remove('jenny');
 print(names); // {code, dode, fode}
 
 print(names.contains('code')); // true

함수 

enum

정확히 몇개의타입만 있을때 사용하면 좋음 

-> Status status =approved; 보다 = Status.approved가 나은점 

1. 오타시 시스템 오류로 인지 가능 , 오타시 else 로 갈수도 있음 

2. enum 에 선언한값만 사용한다는것을 알수있음 

enum Status{
    approved , //승인
    pending, // 대기
    rejected, //거절
}
void main() {
    Status status = Status.pending;
    if(status == Status.approved){
      print('승인');
    }else if(status == Status.pending){
      print('대기');
    }else{
      print('거절');
    }
}

Function 기본 

void main() {
   addNumbers(10,20,30);
   addNumbers(10);
   addNumbers(10,20,40);
}

// 3개의 숫자를 더하고 짝수, 홀수인지 알려주는 함수 
// parameter / argument 매개변수 
// positional parameter =순서가 중요한 파라미터
// optional parameter - 있어도 되고 없어도 되는 파라미터 : [] 안의 초기화를 해주면 안넣어도 됨
addNumbers(int x, [int y =20, int z =30] ){
  int sum = x + y + z;
  
  print('x : $x');
  print('y : $y');
  print('z : $z');
  
  if((sum %2 ==0)){
    print('짝수입니다.');
  }else{
    print('홀수입니다.');
  }
}

named Parameter

void main() {
  addNumbers2(x:10,y:20,z:30);
  addNumbers2(y:20,x:10,z:30);
  addNumbers2(x:10,y:20);
}

// named parameter - 이름있는 파라미터 (순서가 중요하지 않다.)
addNumbers2(
{
  required int x,
  required int y, 
  int z=40,   // optional parameter  
 }
 ){
  int sum = x + y + z;
  
  print('x : $x');
  print('y : $y');
  print('z : $z');
  
  if((sum %2 ==0)){
    print('짝수입니다.');
  }else{
    print('홀수입니다.');
  }
}

// arrow function 
int addNumbers3(int x,int y,int z) => x+y+z;

typedef operation 쓰는법 

calculate 함수 처럼 쓴다. 

void main() {
 Operation operation =add;
 int sum = operation(10,20,30);
 print(sum); //60
  
 operation = substract;
 int sub = operation(10,20,30);
 print(sub); //-40
  
 int result = calculate(10,20,30,add);
 print(result); //60
  
 int result2 = calculate(10,20,30,substract);
 print(result2); // -40
}

// signature 
typedef Operation = int Function(int x, int y, int z);

//더하기
int add(int x,int y,int z) => x + y + z;

//빼기
int substract(int x,int y,int z) => x - y - z;

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

 

'프로그래밍 언어 > Flutter' 카테고리의 다른 글

Dart 4 비동기 프로그래밍  (0) 2022.10.03
Dart 3 함수형 프로그래밍  (0) 2022.10.03
Dart 2 객체지향 프로그래밍  (0) 2022.10.02
flutter 2강  (0) 2022.10.02
flutter 설치  (0) 2022.09.27