Dart (3) - 메소드 정의, 화살표 함수, 함수 상호 호출, 익명, 자체 실행 메소드 및 클로저

Dart (1) - 변수, 상수, 기본 유형, 연산자, 조건부 판단 및 유형 변환

Dart (2) - 루프 표현식의 공통 속성 및 메소드, List, Set 및 Map

메소드 정의


dart自定义方法的基本格式:

返回类型  方法名称(参数1,参数2,...){
  方法体
  return 返回值 / 或无返回值;
}

메소드 정의의 몇 가지 예:

void printInfo(){
  print('我是一个自定义方法');
}

int getNum(){
  var count = 123;
  return count;
}

String printUserInfo(){

  return 'this is str';
}

List getList(){

  return ['111','2222','333'];
}

다트public 에는  , private등의 키워드 가 없으며 _ 하단 가로가 직접 나타냅니다  private.

메소드 범위

void main(){

void outFun(){
    innerFun(){

        print('aaa');
    }
    innerFun();
}

// innerFun();  错误写法 

    outFun();  //调用方法
}

메소드 매개변수

일반 정의:

String getUserInfo(String username, int age) {
  //形参
  return "姓名:$username -> 年龄:$age";
}

print(printUserInfo('小明', 23)); //实参

Dart에서는 선택적 매개변수로 메소드를 정의할 수 있습니다. 선택적 매개변수는 유형 기본값을 지정해야 합니다.

void main() {
  String printUserInfo(String username, [int age = 0]) { //age格式表示可选
    //形参
    if (age != 0) {
      return "姓名:$username -> 年龄:$age";
    }
    return "姓名:$username -> 年龄不详";
  }

  print(printUserInfo('小明', 28)); //实参
  //可选就可以不传了
  print(printUserInfo('李四'));
}

기본 매개변수를 사용하여 메서드를 정의합니다.

String getUserInfo(String username,[String sex='男',int age=0]){  //形参
  if(age!=0){
    return "姓名:$username -> 性别:$sex -> 年龄:$age";
  }
  return "姓名:$username -> 性别:$sex -> 年龄不详";
}
print(getUserInfo('张三'));
print(getUserInfo('李四','男'));
print(getUserInfo('李梅梅','女',25));

명명된 매개변수의 메서드를 정의하려면 명명된 매개변수를 정의할 때 유형 기본값을 지정해야 합니다.

명명된 매개변수의 장점은 순서대로 할당하지 않고 사용할 수 있다는 것입니다. 다음 코드를 참조하십시오.

String getUserInfo(String username, {int age = 0, String sex = '男'}) {//形参
  if (age != 0) {
    return "姓名:$username -> 性别:$sex -> 年龄:$age";
  }
  return "姓名:$username -> 性别:$sex -> 年龄保密";
}
print(getUserInfo('张三',sex: '男',age: 20));

메서드를 매개변수로 사용하는 메서드를 정의합니다.

실제로 메서드는 Kotlin다음과 같은 매개변수로 사용할 수 있습니다.

//方法1 随便打印一下
fun1() {
  print('fun1');
}

//方法2 参数是一个方法
fun2(fun) {
  fun();
}

//调用fun2这个方法 把fun1这个方法当做参数传入
fun2(fun1());

화살표 함수와 서로에 대한 함수 호출

화살표 기능

이전 연구에서 우리는 forEachtraverse List에 사용할 수 있다는 것을 알고 있습니다. 일반적인 형식은 다음과 같습니다.

List list = ['a', 'b', 'c'];
list.forEach((value) {
  print(value);
});

화살표 함수는 다음 형식으로 줄일 수 있습니다.

list.forEach((value) => print(value));

화살표 뒤에 있는 화살표는 메서드의 반환 값을 가리킵니다.여기서 다음 사항에 유의해야 합니다.

화살표 함수는 하나의 명령문만 쓸 수 있으며 명령문 뒤에 세미콜론(;)이 없습니다.

화살표 방법을 사용 하여 이전 변환 예제 map를 단순화할 수도 있습니다 .

List list = [1, 3, 6, 8, 9];
var newList = list.map((value) {
  if (value > 3) {
    return value * 2;
  }
  return value;
});

내부 데이터 를 수정 List하려면 배열의 3보다 큰 값에 2를 곱합니다. 화살표 함수로 단순화할 수 있으며 다음과 같이 작성할 수 있습니다.

var newList = list.map((value) => value > 3 ? value*2 : value);

코드 완성의 한 문장, 매우 흥미롭습니다.

함수의 상호 호출

  // 定义一个方法来判断一个数是否是偶数  
  bool isEvenNumber(int n) {
    if (n % 2 == 0) {
      return true;
    }
    return false;
  }
  // 定义一个方法打印1-n以内的所有偶数
  prinEvenNumber(int n) {
    for (var i = 1; i <= n; i++) {
      if (isEvenNumber(i)) {
        print(i);
      }
    }
  }
  prinEvenNumber(10);

익명 메서드, 자체 실행 메서드 및 메서드 재귀

익명 방법

var printNum = (){
  print(12);
};
printNum();

여기 Kotlin에서 기능은 기본적으로 에서와 동일하다는 것이 분명합니다. 매개변수가 있는 익명 메소드:

var printNum = (int n) {
  print(n + 2);
};

printNum(3);

자체 실행 방법

이름에서 알 수 있듯이 자체 실행 함수의 정의와 호출이 통합되어 있기 때문에 자체 실행 메서드를 호출할 필요가 없으며 자동으로 실행됩니다. 익명 함수를 생성하고 실행할 때 내부 변수는 외부에서 참조할 수 없기 때문에 실행 직후 해제되며 이 접근 방식은 전역 개체를 오염시키지 않습니다. 다음 코드를 참조하십시오.

((int n) {
    print("这是一个自执行方法 + $n");
  })(666);
}

메서드 재귀

메서드의 재귀는 조건이 충족되는 조건에서 메서드 내에서 계속 자신을 호출하는 것입니다. 다음 코드를 참조하세요.

var sum = 0;
void fn(int n) {
  sum += n;
  if (n == 0) {
    return;
  }
  fn(n - 1);
}
fn(100);
print(sum);

구현은 1에 100을 더하는 것입니다.

폐쇄

클로저는 프론트엔드 개념으로 클라이언트 개발 초기에는 Java클로저를 지원하지 않거나 불완전한 클로저를 지원한다고 할 수 Kotlin있지만 클로저 작업은 지원할 수 있습니다.

폐쇄는 함수가 중첩된 함수이고 내부 함수가 외부 함수의 변수 또는 매개변수를 호출하며 변수 또는 매개변수가 시스템에서 회수되지 않음을 의미합니다(메모리가 해제되지 않음) . 따라서 클로저가 해결하는 두 가지 문제는 다음과 같습니다.

  • 가변 상주 메모리
  • 변수는 전역을 오염시키지 않습니다.

클로저를 작성하는 일반적인 방법은 다음과 같습니다.

  • 함수는 함수를 중첩하고 내부에 함수를 반환하여 클로저를 형성합니다 .

클로저 작성:

Function func() {
  var a = 1; /*不会污染全局   常驻内存*/
  return () {
    a++;
    print(a);
  };
}

여기에 익명 메서드를 반환한 후 의 값은 메모리에 상주할 수 있습니다.

var mFun = func();
mFun();
mFun();
mFun();

인쇄: 2, 3, 4.

рекомендация

отjuejin.im/post/7116205745367941150
рекомендация