Dart 학습 노트 - 클래스, 열거, 방법

6692 단어 Flutter필기
참조: https://www.dartcn.com/guides/language/language-tour#%E7%B1%BB클래스Dart는 클래스와 mixin 계승 메커니즘을 바탕으로 대상을 대상으로 하는 언어이다.모든 대상은 하나의 클래스의 실례이고 모든 클래스는 Object에 계승된다.
Mixin 상속을 기반으로 하는 것은 각 클래스Object를 제외하고는 하나의 슈퍼클래스만 있고 한 클래스의 코드는 다른 여러 상속 클래스에서 중복 사용될 수 있다는 것을 의미한다.
클래스의 구성원 변수 사용
대상은 함수와 데이터(즉 방법과 실례 변수)로 구성된다.방법의 호출은 대상을 통해 이루어져야 한다. 호출 방법은 대상의 다른 함수와 데이터에 접근할 수 있다.
사용(.)를 사용하여 인스턴스 객체의 변수 및 메서드를 참조합니다.
var p = Point(2, 2);

//        y    。
p.y = 3;

사용하다대신..왼쪽 객체가 null일 수 있으므로 예외를 방지할 수 있습니다.
var p = Point(2, 2);

//    p   non-null,      y     4。
p?.y = 4;

구조 함수 사용
구조 함수를 통해 대상을 만듭니다.구조 함수의 이름은 ClassName 또는 ClassName.identifier일 수 있다.예를 들어, 다음 코드는 PointPoint.fromJson() 구조 함수를 사용하여 Point 객체를 만듭니다.
var p1 = Point(2, 2);
var p2 = Point.fromJson({'x': 1, 'y': 2});

객체 유형 가져오기
대상의 runtimeType 속성을 사용하면 실행할 때 대상의 유형을 얻을 수 있고 runtimeType 속성은 Type 대상을 되돌려줍니다.
print('The type of a is ${a.runtimeType}');

구조 함수
클래스와 같은 이름의 함수를 만들어서 구조 함수를 설명합니다
class Point {
  num x, y;

  Point(num x, num y) {
    this.x = x;
    this.y = y;
  }
}

일반 모드에서는 구조 함수가 전달되는 매개변수의 값을 인스턴스 변수에 지정합니다Dart. 자체 구문 설탕은 이러한 코드를 단순화합니다.
class Point {
  num x, y;

  //          ,
  //            x   y。
  Point(this.x, this.y);
}

구조 함수를 설명하지 않은 경우 Dart 기본 구조 함수를 제공합니다.기본 구조 함수는 파라미터가 없고 부류의 무참구조 함수를 호출합니다.
자류는 부류의 구조 함수를 계승하지 않는다.하위 클래스는 구조 함수를 설명하지 않습니다. 기본 구조 함수 (익명, 인자 없음) 만 있습니다.
구조 함수 리디렉션
때때로 구조 함수의 유일한 목적은 같은 클래스의 다른 구조 함수로 방향을 바꾸는 것이다.구조 함수의 함수체를 공백으로 바꾸고 구조 함수의 호출은 사칭(:) 다음에 한다.Android에서 사용자 정의 View가 여러 개의 구조 함수를 실현해야 할 때 최종 구조 함수를 호출하는 것과 유사)
class Point {
  num x, y;

  //        。
  Point(this.x, this.y);

  //        
  Point.alongXAxis(num x) : this(x, 0);
}

공장 구조 함수
이 클래스의 새로운 실례를 항상 만들지 않을 때 factory 키워드를 사용합니다.예를 들어 공장 구조 함수는 cache의 실례를 되돌려주거나 하위 클래스의 실례를 되돌려줄 수 있다.Android의 단일 모드와 유사)
다음 예제에서는 캐시에서 객체를 반환하는 플랜트 구조 함수를 보여 줍니다.
class Logger {
  final String name;
  bool mute = false;

  //      _    ,
  // _cache      。
  static final Map _cache =
      {};

  factory Logger(String name) {
    if (_cache.containsKey(name)) {
      return _cache[name];
    } else {
      final logger = Logger._internal(name);
      _cache[name] = logger;
      return logger;
    }
  }

  Logger._internal(this.name);

  void log(String msg) {
    if (!mute) print(msg);
  }
}

알림: 공장 구조 함수는this에 접근할 수 없습니다.
공장 구조 편지의 호출 방식은 다른 구조 함수와 같다.
var logger = Logger('UI');
logger.log('Button clicked');

메서드
방법은 대상에게 행위를 제공하는 함수다.
실례 방법
대상의 실례 방법은this와 실례 변수에 접근할 수 있습니다.다음 예제에서 distanceTo() 방법이 인스턴스 방법입니다.
import 'dart:math';

class Point {
  num x, y;

  Point(this.x, this.y);

  num distanceTo(Point other) {
    var dx = x - other.x;
    var dy = y - other.y;
    return sqrt(dx * dx + dy * dy);
  }
}

추상적 방법
인터페이스만 정의하고 실현하지 않고 다른 종류에 남겨서 실현한다.추상적인 방법은 추상류에만 존재한다.함수체 대신 세미콜론(;)을 사용하는 추상 함수를 정의합니다.
abstract class Doer {
  //           ...
  void doSomething(); //         。
}

class EffectiveDoer extends Doer {
	@override
  void doSomething() {
    print("123");
    //       ,               ...
  }
}

void main() {
  var eff = EffectiveDoer();
  eff.doSomething();
}

  :
123

열거 유형
매거 유형도 enumerations enums라고도 하는데 특수한 종류로 수량이 고정된 상량치를 나타내는 데 쓰인다.enum 키워드를 사용하여 열거 유형을 정의합니다.
enum Color { red, green, blue }

매거 중의 모든 값은 index getter 방법이 있는데 이 방법은 값이 매거 유형 정의에 있는 위치를 되돌려줍니다. (0부터)예를 들어 첫 번째 열거 값의 인덱스는 0이고 두 번째 열거 값의 인덱스는 1이다.
assert(Color.red.index == 0);
assert(Color.green.index == 1);
assert(Color.blue.index == 2);

매거진values 상수를 사용하여 모든 매거치 목록list을 얻습니다.
List colors = Color.values;
assert(colors[2] == Color.blue);

클래스에 기능 추가: MixinMixin는 복용 클래스 코드의 한 경로로 복용 클래스는 서로 다른 등급에서 상속 관계가 존재하지 않을 수 있다.Object에서 계승되고 구조 함수가 없는 클래스를 만들어서 Mixin를 실현합니다.Mixin가 일반 클래스로 사용되지 않으려면 키워드mixin로 바꾸기class를 사용하십시오.예를 들면 다음과 같습니다.
mixin Musical {
  bool canPlayPiano = false;
  bool canCompose = false;
  bool canConduct = false;

  void entertainMe() {
    if (canPlayPiano) {
      print('Playing piano');
    } else if (canConduct) {
      print('Waving hands');
    } else {
      print('Humming to self');
    }
  }
}
with 뒤에 하나 이상의 혼입된 이름과 함께 Mixin를 사용하면 다음과 같은 두 가지 사용Mixin 클래스를 보여 줍니다.
class Musician extends Performer with Musical {
  // ···
}

class Maestro extends Person
    with Musical, Aggressive, Demented {
  Maestro(String maestroName) {
    name = maestroName;
    // Musical      
    canConduct = true;
  }
}

특정 유형만 사용할 수 있는 Mixin -을 지정합니다. 예를 들어 MixinMixin 자신이 정의하지 않은 방법을 호출할 수 있습니다. - on를 사용하여 Mixin의 부류 유형을 지정할 수 있습니다.
mixin MusicalPerformer on Musician {
  // ···
}
mixin 자세히 보기Dart의 Mixin 상세 정보
클래스 변수 및 방법
static 키워드를 사용하여 클래스 범위의 변수와 방법을 실현합니다.
정적 변수Dart에서 정적 변수는 사용될 때만 초기화됩니다.Java에서 정적 변수는 클래스의 불러오기에 따라 불러오기 때문에 클래스가 메모리에 불러올 때 정적 변수는 클래스의 불러오기와 함께 메모리에 초기화되고 정적 변수는 클래스가 불러올 때 한 번만 불러오고 방법 구역의 정적 구역에 저장된다.
class Queue {
  static const initialCapacity = 16;
  // ···
}

void main() {
  assert(Queue.initialCapacity == 16);
}

정적 방법
정적 방법 (클래스 방법) 은 실례적으로 사용할 수 없기 때문에this에 접근할 수 없습니다.예를 들면 다음과 같습니다.
import 'dart:math';

class Point {
  num x, y;
  Point(this.x, this.y);

  static num distanceBetween(Point a, Point b) {
    var dx = a.x - b.x;
    var dy = a.y - b.y;
    return sqrt(dx * dx + dy * dy);
  }
}

void main() {
  var a = Point(2, 2);
  var b = Point(4, 4);
  var distance = Point.distanceBetween(a, b);
  assert(2.8 < distance && distance < 2.9);
  print(distance);
}

  :
2.8284271247461903

좋은 웹페이지 즐겨찾기