> 웹 프론트엔드 > JS 튜토리얼 > Dart 기본 지식 포인트 요약

Dart 기본 지식 포인트 요약

王清
풀어 주다: 2020-05-04 13:48:23
원래의
226명이 탐색했습니다.

1. Dart 구문

1. 개발 도구

플러그인 설치: dart, Code Runner

3. Dart 변수

Dart는 그럴 필요가 없는 강력한 스크립트 언어입니다. 사전 정의된 유형, 자동 유형 추론

dart에 정의된 변수는 var 키워드를 통해 선언할 수 있습니다.

dart에는 유형 검사가 있습니다.

예:

main(){
  print('你好,dart');
}
// 表示main方法没有返回值
void main(){
  print('你好,dart');
}
로그인 후 복사

4. Dart 변수

final const는 상수를 정의할 수 있습니다.

final 값을 할당하지 않고 시작할 수 있으며 값은 한 번만 할당할 수 있습니다. final은 const 컴파일 타임 상수의 특성을 가질 뿐만 아니라 가장 중요한 것은 런타임 상수이고 final은 지연 초기화라는 것입니다. , 즉, 런타임 시 처음 사용되기 전에는 초기화되지 않습니다

예:

var str = 'this is var';
String str = 'this is string';
int str = 123;
로그인 후 복사

5. Dart 데이터 유형

숫자(숫자 값): int double

문자열(문자열): String

const NUM = 123;
final Time = new DateTime.now();
로그인 후 복사

불리언(Boolean): bool

如:var str = 'this is a string';
   String str = 'this is a string';
   // 定义多行字符串
   String str = '''
     my name is wq;
     my age is 23;
   ''';
   // 字符串拼接
   String name = 'wq';
   int age = 23;
   String myInfo = '我的名字叫$name,我今年$age岁';
   // 注意:如果使用+实现字符串拼接,那么必须要是同类型的数据
   String firstName = '王';
   String lastName = '清';
   String myInfo = lastName + ':' + firstName;
로그인 후 복사

리스트(list): js Array

  bool flag = true;
로그인 후 복사

에 있습니다. 맵(딕셔너리): 맵은 키-값 쌍에 관련된 객체입니다

// 第一种定义List的方式
  var list1 = [1,2,3];
  print(list1.length);
// 第二种定义List的方式
  var list = new List();
  list.add(1);
  list.add(2);
// 定义List指定元素类型
    var list = new List<String>();
   list.add(&#39;王清&#39;);
로그인 후 복사

6) 타입 변환

1) 사이의 변환. Number 및 String 유형

①Number는 String 유형 toString()

// 第一种定义Map
  var person = {
    "name": "王清",
    "age": 23
  };
  print(person[&#39;name&#39;]);
// 第二种定义Map
  var p = new Map();
  p[&#39;name&#39;] = &#39;王清&#39;;
  print(p);
 问:如何判断类型?(关键字 is)
    var str = &#39;123&#39;;
    if (str is String) {
       print(&#39;字符串类型&#39;);
    } else if (str is int) {
       print(&#39;数值类型&#39;);
    }
   注意:
    取整运算符 
      如:print(12~/5); // 2
    为空赋值  
      如:int b; b??=23; print(b);  // 23
      解释:如果b为空的话就赋值23
      int a;  int b = a??10;  print(b); // 10
로그인 후 복사

으로 변환됩니다. ②String은 Number 유형 parse

int num = 12;
print(num.toString());
로그인 후 복사

로 변환됩니다. 2) 기타 유형은 Boolean 유형

String str = &#39;123&#39;;
print(int.parse(str));
print(double.parse(str));
로그인 후 복사

7.List

으로 변환됩니다. 공통 속성:

length: length

reversed: Flipped

var list = [1,2,3] ;

                      print(list.reversed.toList()) Element

(Addall (): 스티칭 목록 list.adddall ([1, 2,3])

Indexof(): 데이터를 찾고, 반환 요소를 찾고, 반환할 요소를 찾습니다. -1

제거(): 지정된 요소를 삭제합니다.                                              통해   통해   통해   사용 사용 사용 사용         통해 out out out out out out throughmballowallowallowallowallowallow out out out out out off back through out off off through out through off out off through out through through through through throughaboutfromfromfromthroughfrom-from-al-with-list.fillRange(2, 4, 1 ); //아래첨자 2~3 사이의 요소를 1로 수정

                                                                     ~                insert (index,,) Inserts and ): 다른 유형을 목록으로 변환

Join(): 목록을 문자열로 변환 String strList = list.join(' -');

분할(): 문자열은 List

8.Set

로 변환됩니다. 세트는 무질서하고 사용할 수 없는 세트이므로 입찰로 얻을 수 없습니다. 주요 기능은 일반적으로 사용되는 속성을 평가하는 것입니다.

ISEMPTY: 비어 있는지 여부

IsnoteMpty: 비어 있지 않은지 여부

FIRST: 첫 번째 요소 반환

last: 마지막 요소 반환

길이: 길이

일반적인 방법:

addAll: 목록 추가 및 set to Set

포함: 단일 요소가 포함되어 있는지 쿼리 set.contains(1)

containAll : 여러 요소가 포함되어 있는지 쿼리 set.containsAll([1,2])

차이점: 서로 다른 세트의 두 요소를 반환 set1.difference(set2).toList()

Intersection: 동일한 요소를 가진 두 요소를 반환

Union: 두 집합의 모든 요소를 ​​포함

①isEmpty:判断当前字符串是否为空
   String str = &#39;&#39;;
    print(str.isEmpty);
②未赋值 var myNum; print(myNum == null); // true
③为0 var myNum=0; print(myNum ==0);  // true
④为NaN var myNum = 0/0; print(myNum.isNaN); // true
로그인 후 복사

Clear: Clear

firstWhere: 다음에 따라 첫 번째 정규화된 값을 쿼리합니다. 조건 전달

Set set1 = [1,2,3].toSet();
Set set2 = [2,3,4].toSet();
print(set1.union(set2).toList()); // [1,2,3,4]
로그인 후 복사

lastWhere: 조건에 따라 첫 번째 정규화된 값을 역으로 쿼리

Set set1 = [1,2,100,200,300,3].toSet();
var list = set1.firstWhere((value){
     return value > 100;
});
print(list); // 200
로그인 후 복사
W Removewhere: 정규화된 요소 삭제

Set set1 = [1,2,100,200,300,3].toSet();
var list = set1.firstWhere((value){
   return value > 100;
});
print(list); // 300
로그인 후 복사
E

RETAINWHERE: 정규화된 요소 유지

Set set1 = [1,2,100,200,300,3].toSet();
set1.removeWhere((value){
   return value > 100;
});
print(set1);  // {1, 2, 100, 3}
로그인 후 복사
E

RETAINALL: 현재 값만 유지

Set set1 = [1,2,100,200,300,3].toSet();
set1.retainWhere((value){
   return value > 100;
});
print(set1);  // {200,300}
로그인 후 복사
E

Removeall: 삭제 현재 값

Set set1 = [1,2,100,200,300,3].toSet();
set1.retainAll([1,2]);
print(set1); // {1,2}
로그인 후 복사
E

매핑)은 순서가 지정되지 않은 키-값 쌍입니다

공통 속성:

키: 모든 키 값 가져오기 ​​

값: 모든 값 값 가져오기 ​​​​IsEmpty: 비어 있는지 여부

공통 속성 :

            addAll(): 여러 키-값 쌍 추가

ㅋㅋㅋ                                                                  '],

"일":["배달 직원"]

});

제거( key): 키 key

                name');

containValue(value):를 사용하여 키-값 쌍을 삭제합니다. Map에 이 값의 키-값 쌍이 있는지 여부")

10. forEach map where any (List, Set, Map에 공통)

일반 루프:

List list = [100,200,300,400];

for(var i in list){

print(i) ; // 100 200 300 400

} }

forEach 루프:

  목록 목록 = [100,200,300,400];

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

List.forEach((값 ; var newList = list.map((값)){

var newList = list.map((값){

var newList 반환 값 * 2 ;

});

print(newList.toList()); // [200,400,600,800]

where loop:

List list = [100,200,300,400];

var newList = list.where((value ){

                      반환 값 > 200; 조건 요소(있는 경우) 반환 true

        목록 목록 = [100,200,300,400];     var 플래그 = list.any((값)                                            사용 '사용 ' 사용 ' 사용 ' 을 통해 through ‐ ward ‐  ‐  ‐ ‐ 값 > 200 반환;                                                                             인쇄 (플래그);

        의미: 모든 요소가 조건을 충족하는지 확인하고 모든 요소가 조건을 충족하면 true를 반환합니다.

      목록 목록 = [100,200,300,400];

var 플래그 = list.every((값){

                                       .              .

} );

                                     print(flag); Body

RETURN return

} ① 오류를 보고하는 경우 매개변수 유형을 int로 정의합니다. 기타 유형

int Getnum (int N) {

Return n;

}

var n = getnum (60) (60) ; T Print (n) // 60

② 선택적 매개변수

String PRINTUSERINFO (문자열 이름, [int Age, 문자열 성별]) {

if (Age! = NULL && SEX! = NULL) {

                                                                                                               }

R Printuserinfo ('Wang Qing', 20))

③ 기본 매개변수

String Printuserinfo (문자열 이름, [int age = 10]) {

if (Age! = NULL) {

Return '$ name $ age';

                                                                                                                           name $age'; Print(printUserInfo('Wang Qing'));

④이름이 지정된 매개변수

String printUserInfo(String name, {String sex, int age=10}){

                                                                                                                                 '$name 반환 ';

                                                                                                     In}

Printuserinfo('왕칭', 성별: '남성', 나이: 20))

                                                                                                                                                                               작은 지식 포인트:值 값이 짝수인지 멋진 숫자인지 결정합니까?为 ISEVEN인가요?

ISODD인가요? 이상한 숫자인가요? Bao의 특징

전역 변수: 전역 변수가 메모리를 오염시키므로 메모리에 남지 않고 재활용됩니다. 가비지 재활용 메커니즘을 통해 전 세계를 오염시키지 않습니다.

12. 클래스 개체

Dart의 모든 개체는 개체 클래스에서 상속됩니다.

Dart는 개체 지향적입니다. 클래스와 단일 상속을 사용하는 언어이며 모든 객체는 클래스입니다. Person(String name,int age)의 예{

This.name = name;

this.age = age;

}

// 명명된 생성자: 명명된 생성자는 여러 개 작성할 수 있지만 생성자는 하나만 있을 수 있습니다. Person.now(문자열 이름, int age){

                                                                     > {

인쇄("$ {this.name} --- $ {this.age}");

                  p.getInfo();p2.getinfo ()에서

}

:: 다른 파일에서 클래스를 제거하는 방법

1. 위 클래스로 새 person.dart 파일 콘텐츠 만들기

2. 견적

가져오기 'Person.dart';

                       void main(){                 Person p = new Person.now('Wang Qing',23);

프라이빗 속성:

Dart 및 기타 객체 지향 언어가 다릅니다. private, public 및 protected와 같은 한정자는 속성이나 메서드를 private으로 정의하는 데 사용할 수 있습니다. 프라이빗 속성이나 메서드는 인스턴스화를 통해 직접 호출할 수 없지만

을 사용하려면 함수는 다음과 같이 축약될 수 있습니다

              Person(this._name,this.age);

                                               - 생성자 Person.Now (문자열 이름, int age) {

this._name = 이름

this.age = 나이;

}

void getinfo () {

인쇄 ("$ {this. _name}---${this.age}");

                                                                                           Getter 및 Setter 수정자:

Re Class RECT {

num height;

num 너비;

setareawidth(값) {

This.Height = Value; }}}

void main () {

Rect R = New RECT (10, 10);

// get을 호출하기 위해 속성에 액세스하여 get을 호출합니다. 수정 방법

                               ~ | , 생성자가 실행되기 전에 인스턴스 변수를 초기화합니다.

class RECT {

num height;

num width;

Rect (): height = 10, width = 10 {

}

{{

{

                                                                            3 ) 정적 멤버 s ① 정적 키워드를 사용하여 클래스 수준 변수 및 함수 달성

② 정적 메서드는 비정적 멤버에 액세스할 수 없습니다. 비정적 메서드는 정적 멤버에 액세스할 수 있습니다.

클래스 사람 {

정적 문자열 이름 = 'Wang Qing ';ㅋㅋㅋ                                                                                         ​무효 메인(){

  ...

반 사람 {

문자열 이름;

숫자 나이; }

                                                                      무효 메인(){                           ;

                                                              //객체가 클래스의 인스턴스인지 확인

                                                using       using     using     using using 's' using 's 사용하다 ‐       ‐ ‐ ‐ ‐ 1 대 1 ;

                  p1 = '';

                        p1 = new Person('Wang Qing', 20);

               쇼 (); ③하위 클래스는 메소드 getter를 재정의할 수 있으며 상위 클래스의 설정자입니다.            문자열 높이 = '170cm';

                                                                   사용자 (이.이름,이.나이);

                                                                ' s ' s ‐ ‐ ‐ ‐ ​ ​ ​​                   Person.other(this.name, this.age);

        }

                                                                                                    class Web은 Person을 확장합니다.                      ' ' s ' s ' s ' s ' s t ‐ ‐ ‐ ​​ ​ ​ ​ ​ ​ ​ ​ ‐ ​ ​ ​ ​:super(이름,나이){

                          this.sex = sex;​ ​ ​ ​ void run(){

+ ' ~ Print의 아버지 속성(this.height)

}

// 상위 클래스의 메소드 작성 @@Override // 작성 가능 여부 권장

void printinfo () { 'Print (' sub -class printinfo ')

}}}

void main () {

web w = new web (' Zhang San ', 12, ' Man ' );

w.printinfo ();

                            w.work(); A ① ABSTRACT 키워드를 통한 추상 클래스 정의

② DART에는 메소드의 메소드가 없습니다. 추상 클래스를 인터페이스로 구현하려면 추상 클래스에 정의된 모든 메서드와 속성을 구현해야 합니다.

      ⑤ 추상 클래스는 인스턴스화할 수 없으며 이를 상속하는 하위 클래스만 인스턴스화할 수 있습니다.

      확장과 구현의 차이점:

            ① 추상 클래스에서 메소드를 재사용하고, 자체 클래스 그리기를 제한하기 위해 추상 메소드를 사용하려면 확장을 사용하여 추상 클래스를 상속합니다

          ② 추상 클래스만 표준으로 간주한다면 구현을 사용하여 구현합니다. 추상적 클래스

                                 T 추상 클래스 동물 {

void 귀); // 추상 메서드

void drink () {

proprint ('물을 마시고 싶어요')

              ~ ( ) {void run () {void run () void main () {dog d = new dog ();Abstract DB {

String URL;

addl (); ;

}

추상 클래스 b {

propb (); Return null

} @& oVERRIDE

Printb () {

Return null;

믹스인 사용 조건:

① 믹스인 클래스는 Object에서만 상속할 수 있고 다른 클래스에서는 상속할 수 없습니다.

② 믹스인 클래스는 생성자를 가질 수 없습니다.

③ A 클래스 여러 믹스인 클래스를 믹스인할 수 있습니다

④ 믹스인은 결코 인터페이스가 아니지만 새로운 기능입니다

                                                   ~ | ~   클래스 B{ printB(){

                                                                                                  클래스 D(A,B){

}

void main(){

          C c = new C();

            c.printA();

                           .

}

참고: 확장 또는 with, 동일한 메소드가 존재하면 나중에 호출하는 사람이 이를 호출합니다

14. Generics

이해: Generics는 클래스, 인터페이스 및 메소드의 재사용을 해결합니다. ① Generic 메소드

인쇄(getData

} }

② 일반 클래스

                                                                                                                                  ㅋㅋㅋ    }

        void main(){

            MyArray myArray = new MyArray();

            myArray.add('wq');

        }

    ③泛型接口

        추상 클래스 캐시{

           getByKey(문자열 키);

            void setBykey( 문자열 키, T 값);

        }

        class FileCache 확장 캐시{

            @override

            getByKey(String key) {

                return null;

            }

           @override

            void setBykey(문자열 키, T 값) {

                print('$key - -- $value');

            }

        }

        void main(){

            FileCache fc = new FileCache();

           fc.setBykey('wq', '我是文件缓存') >      import 'dart:io';

        import ' dart:convert';

        void main() async{

            var result = wait getDataFromZhihuAPI();

            print(result);

        }

        //api接口: http://news-at.zhihu. com/api/3/stories/latest

        getDataFromZhihuAPI() async{

            //1、创建HttpClient对象

            var httpClient = new HttpClient();  

            //2、创建Uri对象

            var uri = new Uri.http('news-at.zhihu.com','/api/3/stories/latest');

            //3、发起请求, | );

            //5、解码响应的内容

return wait response.transform(utf8.decoder).join();

        }

    ③Pub管理系统中的库

        第一步:从下face网址找到要사용용库

            https://pub.dev/ packages

            https://pub.flutter-io.cn/packages

            https://pub.dartlang.org/flutter/

        第二步 创建一个pubspec.yaml文件,内容如下:

            이름: xxx

            설명: 새로운 Flutter 모듈 프로젝트입니다.

            종속성:  

                http: ^0.12.1

        第四步:재문件所재目录执行 pub get

        第五步:写代码

            import '패키지: http/http.dart'를 http로;

            import 'dart:convert' as 변환;

            void getData() async {

                var url = 'http://www.phonegap100.com/appapi.php?a= getPortalList&catid=20&page=1';

                var response = wait http.get(url);

                if (response.statusCode == 200) {

ㅋㅋㅋ ~                         

작은 지식 포인트: 识 ① 부분 가져오기

Import 'lib/mymath.dart' show getName; // getName 메소드만 도입; Import 'lib/mymath.dart' hide getName; // getname 메소드만 숨기기

载 ②

로 지연되어 앱 시작 시간을 줄이기 위해 필요할 때 로드할 수 있음

:

가져오기 'xxx.dart'는 xxx로 연기되었습니다.

getdata () () async {

                                                           ~                기다리세요

위 내용은 Dart 기본 지식 포인트 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
1
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿