Dart에서 Function을 정의하고 사용하는 방법에 대해 알아보았다.


Function

String sayHello(String name) {
	return "Hello $name nice to meet you!";
}

// 위 함수와 같음
// 함수가 한 줄 짜리일 때 사용
String sayHello(String name) => "Hello $name nice to meet you!";

void main() {
	sayHello("JP");
}

Named Parameters

String sayHello(String name, int age, String country) {
	return "Hello $name, you are $age, and you come form $country";
}

// Named Parameter를 사용할 때는 매개변수 받을 때 {} 추가
// default 값 설정 가능
// 실제로 값을 받아야 할 때에는 required 키워드를 타입 앞에 적어준다.
String sayHello2({String name = "Default Value", int age = 20, required String country}) {
	return "Hello $name, you are $age, and you come form $country";
}

void main() {
	// not good
	sayHello("JP", 31, "YongIn");
	
	//using named argument - good
	sayHello(age:12, country: "YongIn", name: "JP");
}

Optional Positional Parameters => 잘 안씀

// Optional 파라미터를 쓰려면 대괄호 안에 '?'로 인자가 있을 수도 없을 수도 있다는 것을 명시하고, Default Value를 설정해준다.
String sayHello(
	String name, 
	int age, 
	[String? country = 'Dongtan']
) => 'Hello $name, you are $age years old from $country';

void main() {
	sayHello("JP", 31);
}

QQ Operator

// 인자로 null이 들어올 경우 Optional('?')로만 해결할 수 없다.
// if문으로 name이 있을 경우에만 uppercase 해주거나 3항연산자로도 처리할 수 있다.
String capitalizeName(String? name) => name != null ? name.toUpperCase() : 'ANNO';

// 위 함수를 더 짧게 하면 아래와 같다.
// ??를 쓸 경우 좌항이 null이면 우항을 설정한다.
// JS에서 || 연산자랑 비슷한듯?
String captializeName(String? name) => name?.toUpperCase() ?? 'ANNO';

// ??= 연산자도 있다.
String captializeName(String? name) {
	name ??= "People";  // name이 null이면 People 값을 설정해준다. ??랑 똑같은듯
}

void main() {
	capitalizeName("jp");
	capitalizeName(null);
}

TypeDef

// TypeDef란 자료형이 헷갈릴 때 alias를 만드는 것
// reverseListOfNumbers 함수는 List<int> 타입을 리턴받으려고 할 때 정의해둔 ListOfInts를 사용할 수 있다.
// 함수 정의시 리턴 타입 뿐만 아니라 매개변수로도 사용할 수 있는 등 활용이 무궁무진하다.
typedef ListOfInts = List<int>;

ListOfInts reverseListOfNumbers(List<int> list) {
	var reversed = list.reversed;
	return reversed.toList();
}

void main() {
	reverseListOfNumbers([1, 2, 3]);
}

'Mobile' 카테고리의 다른 글

[Flutter] Flutter 설치방법  (0) 2023.10.12
[Flutter] Flutter의 동작 방식  (0) 2023.10.10
[Dart] Class 및 다양한 Class 속성에 대해  (0) 2023.10.10
[Dart] Dart의 Data Types  (0) 2023.10.09
[Dart] Dart의 변수 정의  (3) 2023.10.09

이번에는 DataType을 공부해보았다.

Dart에서 지원하는 여러가지 메서드 및 유용한 기능들이 많았다.

생소하지만 자주 쓰일 것 같다.


DataType

void main() { 	
	// 아래는 변수의 자료형을 나타낸다. 	
    String name = 'JP'; 	
    bool alive = true; 	
    int age = 12; 	
    double money = 69.99; 	 	
    // num type은 정수, 실수 전부 가능하다. 	
    num x = 12; 	
    num x = 1.1; 
 }

Lists and Collection if

void main() {
  var giveMeFive = true;
  List<int> numbers = [1, 2, 3, 4];  // 리스트 사용
  numbers.add(5);
  numbers.first;
  numbers.last;

  // collection if
  if(giveMeFive) 5 else 6,
  // 아래와 동일
  if(giveMeFive) {
    numbers.add(5);
  }else {
    numbers.add(6);
  }
}

String Interpolation

void main() {
	var name = 'JP';
	// 작은따옴표, 큰따옴표 상관 없이 가능하다.
	// 1. 변수가 이미 존재할 때 사용하는 방법
	var greeting = 'Hello everyone my name is $name, nice to meet you';

	// 3. 계산이 필요할 때
	// age + 2를 하고 싶다면 ${} 안에 수식을 작성한다.
	var age = 10;
	var greeting = "Hello everyone my name is $name, and I'm ${age + 2} years old";
}

Collection if

void main() {
	var oldFriends = ['a', 'b'];
	
	// 아래와 같이 할 경우 newFriends에 oldFriends를 추가한다.
	// 이모티콘 + oldFriend로 추가된다.
	var newFriends = [
		'c', 
		'd', 
		'e',
		for(var friend in oldFriends) "😀 $friend",
	];
	// 위에 작성한 collection For을 기본 for로 하면 아래와 같다.
	for(var friend in oldFriends) {
		newFriends.add(friend);
	}
}

Maps

void main() {
	// 아래와 같이 작성하면 컴파일러가 자동으로 자료형을 지정함.
	// 아래 player는 Map<string, Objec>라는 자료형을 가짐
	var player = {
		'name':'JP',
		'xp':19.99,
		'superpower':false,
	};
	// 자료형을 직접 지정하여 생성 가능
	Map<int, bool> player = {
		1:true,
		2:false,
		3:false,
	};
}

Sets

void main() {
	var numbers = {1, 2, 3, 4, 5};
	Set<int> numbers = {1, 2, 3, 4, 5};
	numbers.add(1);  // numbers에 1이 있기 때문에 변화가 없다. 즉, 중복이 안된다.
}

 

'Mobile' 카테고리의 다른 글

[Flutter] Flutter 설치방법  (0) 2023.10.12
[Flutter] Flutter의 동작 방식  (0) 2023.10.10
[Dart] Class 및 다양한 Class 속성에 대해  (0) 2023.10.10
[Dart] Dart의 Function 사용법  (0) 2023.10.10
[Dart] Dart의 변수 정의  (3) 2023.10.09

Dart의 변수를 정의하는 방법에 대해 공부한 내용.
변수 정의에 앞서 알아야 할 것은 Dart는 main 함수로부터 시작이 된다는 것이다.
필자는 현재 C#으로 개발을 오래 해왔기 때문에 변수의 타입을 지정하는 것에 익숙하다. (그러나 C#과는 또 다르다.)

이번에 게시할 내용은 NomadCoder에 무료 강의 기반이다.


변수 타입

void main() {
    //1. 변수 타입 or var
    //변수의 타입 혹은 var를 사용하는 경우는 나중에 변경 가능하다.
    //말 그대로 변수이다.
    int i = 12;
    var name = 'la';
    i = 123123123123;
    name = 'lalalala';
}

Final

//2. final - 한번만 변수 값을 할당하고 싶을 때 사용한다.
void main() {
    final name = 'JP';
    name = 'JPP'; //에러 발생
}

dynamic

void main() {
    //3. dynamic - 타입에 상관없이 변수 값을 할당 가능하게 한다.
    //아래 세 가지 변수 할당 전부 가능
    dynamic name;
    name = 'JP';
    name = 1212;
    name = true;

    //dynamic으로 정의된 변수는 아래와 같이 조건문으로 타입을 검사하면
    //해당 타입에 맞는 메서드를 호출해 사용할 수 있다.
    if(name is String) {
        name.length
    }
}

const

void main () {
    //4. const - 알고 있는 값에 대해 상수 값을 정의한다.
    const name = 'JP';
    name = 'JPP'; //상수 값은 변경될 수 없으므로 에러 발생

    //fetchAPI 함수의 값을 알 수 없으므로 에러 발생
    const name2 = fetchAPI(); 
}

null safety

void main() {
    //5. null safety - null 값을 참조하지 못하게 해준다.
    String name = 'JP';
    // 에러 발생
    name = null; 

    String? name2 = 'JP';
    // 정상 동작
    name = null; 
    // name 값이 null이 될 수 있어서 에러 발생
    name.isEmpty; 
    // 정상 동작 - name != null이 아닐 경우에만 isEmpty 동작
    name?.isEmpty;
    // name?.isEmpty와 같은 동작 결과 
    if(name != null) {
        name.isEmpty
    }
}

late

void main() {
    //6. late - 변수의 값을 나중에 초기화한다.
    // late는 API 호출 후 리턴 값을 정의하는데 주로 사용한다.
    late name;
    name = 'JP';

    late final String name;
    name = 'JP';
    name = 'JPJP'; //에러 발생
}

'Mobile' 카테고리의 다른 글

[Flutter] Flutter 설치방법  (0) 2023.10.12
[Flutter] Flutter의 동작 방식  (0) 2023.10.10
[Dart] Class 및 다양한 Class 속성에 대해  (0) 2023.10.10
[Dart] Dart의 Function 사용법  (0) 2023.10.10
[Dart] Dart의 Data Types  (0) 2023.10.09

+ Recent posts