타입과 함께 매개변수를 선언한다. 해당 매개변수는 함수내에서만 사용된다.
void main() {
introduce('Tom', 30); //hello my name is Tom i am 30 years old
}
introduce(String name, int age){
print('hello my name is $name i'm $age years old');
}
함수가 반환하는 값이 없을 때 함수 앞에 void 키워드를 붙인다. 함수가 값을 반환한다면 값의 타입을 함수 앞에 작성하면 된다.
void printStr() {
print('string');
}
int getThree() {
return 3;
}
화살표 함수를 사용하면 화살표 다음이 반환되는 값이된다.
int getThree() {
return 3;
}
// ⬆️ 똑같다.
int getThree() => 3; //화살표 함수
함수 호출 시 인수를 다 넘기지 않으면 에러가 난다. 매개변수를 함수내에서 선택적으로 사용한다면 선택적 매개변수를 사용해야 한다.
대괄호안에 매개변수를 선언하면 된다. 이때 변수값이 없으면 함수내에서 에러가 발생하기에 기본값을 설정해줘야 한다. 함수 호출시 넘어온 인수가 없다면 기본값을 사용한다.
void main() {
addNum(20); //30
addNum(20,20); //40
}
addNum(int num, [int num2 = 10]){
print(num + num2);
}
기본적으로 매개변수는 순서가 중요하다. 하지만 네임드 매개변수는 순서가 중요하지 않다.
매개변수 자리에 중괄호를 넣고 타입 앞에 required 키워드를 작성한다. 만약 선택적 매개변수를 사용하고 싶다면 required를 안쓰면 된다. 함수를 호출할 때 매개변수 : 값
이러한 형태로 인자를 넘기면 된다. 순서가 바뀌어도 아무 상관 없다.
void main() {
addNum(num:20); //30
addNum(num2:30, num:10); //40
}
addNum({
required int num,
int num2 = 10,
}){
print(num + num2);
}
typedef로 body가 없는 함수를 선언하면 해당 함수와 형태가 같은 함수들을 하나의 typedef로 선언할 수 있다
아래처럼 변수 앞에 typedef를 선언하고 Operation타입에 해당하는 함수를 할당하면 앞으로 oper란 변수는 add함수의 역할을 수행한다.
void main() {
Operation oper = add;
print(oper(20,10);) //30
operation = subtract;
print(oper(20,10);) //10
}
typedef Operation = int Function(int num, int num2);
int add(int num, int num2) => num + num2;
int subtract(int num, int num2) => num - num2;
typede를 사용한다면 보통 이런식으로 자주 사용한다고 한다.
void main() {
print(calculate(30, 20, add)); //50
}
typedef Operation = int Function(int num, int num2);
int add(int num, int num2) => num + num2;
int subtract(int num, int num2) => num - num2;
int calculate(int num, int num2, Operation oper) => oper(num, num2);
if문의 조건식에 부합하면 if문 안의 결과를 실행, 아니라면 else if문으로 넘어가고 else if문의 조건식에도 부합하지 않다면 else문의 결과를 실행한다.
void main() {
int num = 5;
if(num >= 20) {
print('20 이상');
}else if(num >= 10) {
print('10이상');
}else {
print('10이하');
}
}
switch 문은 하나 이상의 case문으로 구성되며 default문은 필수가 아니다.
void main(){
String browser = 'safari';
switch(browser){
case 'chrome':
print('크롬 사용중');
break;
case 'safari':
print('사파리 사용중');
break;
default:
print('타 브라우저 사용중');
break;
}
}
for 문의 초기식은 사용할 변수를 선언하고 초기값을 할당한다. 조건식은 언제까지 실행할지를 결정한다. 증감식은 반복문이 한번 종료될 때 어떤 코드를 실행할지 결정한다.
조건식이 참일 경우 중괄호 속 코드가 실행된다. 아래 코드의 경우 0부터 9까지 출력될 것이다.
void main(){
for(int i = 0; i < 10; i++){ //(초기식; 조건식; 증감식)
print(i) //조건식이 참일 때 실행할 코드
}
}
for in 문은 List의 요소를 순회할 수 있는 반복문이다. 아래의 경우 nums List를 하나씩 출력한다. (Map X)
void main(){
List<int> nums = [1,2,3,4,5];
for(int num in nums){
print(num);
}
}
while 문은 조건식이 거짓일 때 까지 코드를 실행한다. 만약 계속 참인 조건식을 넣으면 계속 실행되어 컴퓨터에 문제가 발생한다.
void main(){
int total = 0;
while(total <= 10){
total += 2;
}
}
do while문은 while문과 비슷하지만 do while의 경우 조건에 상관없이 우선적으로 코드를 실행하고 그 다음에 조건이 맞는지 확인한다. (잘 사용하지 않음)
void main(){
int total = 0;
do {
total += 2;
} while(total <= 10);
}
break문을 사용하면 현재 반복문에서 나간다. 따라서 if문을 통해 특정 조건에 반복문을 중단할 수 있다.
while문 뿐 아니라 for문에서도 가능하다.
void main(){
int total = 0;
while(total <= 10){
total += 2;
if(total == 6){
break;
}
}
}
continue문은 break와 달리 조건에 해당하면 현재 식을 종료하고 다음 식으로 넘어간다. 아래의 경우 1,2,4,5가 출력되고 3은 출력되지 않는다.
void main(){
for(int i = 1; i < 5; i++){ //(초기식; 조건식; 증감식)
if(i == 3) continue;
print(i);
}
}
enum은 상수값을 나열한 형태로 타입 사용을 강제하고 싶을 경우 사용한다. enum의 이름은 첫글자를 대문자로 작성한다. (TS의 enum과 비슷하다.)
enum Fruits{
apple,
banana,
kiwi,
}
void main() {
Fruits fruits = Fruits.kiwi;
if(fruits == Fruits.apple) print("사과");
else if(fruits == Fruits.banana) print("바나나");
else print("키위");
}