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());
화살표 함수와 서로에 대한 함수 호출
화살표 기능
이전 연구에서 우리는 forEach
traverse 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.