다트에 이중 점 (.)을 사용합니까?


141

때때로 나는 이것을 본다 List list = [];

그때 list..add(color)

1 dot ( .)과 2 dot ( ..) 의 차이점은 무엇입니까?

답변:


242

..라고도 캐스케이드 표기 . 동일한 객체에서 여러 메소드를 호출하려는 경우 동일한 대상을 반복 할 수 없습니다.

List list = [];
list.add(color1);
list.add(color2);
list.add(color3);
list.add(color4);

// with cascade

List list = [];
list
  ..add(color1)
  ..add(color2)
  ..add(color3)
  ..add(color4);

77

다트의 캐스케이드 연산자입니다

var l1 = new List<int>()..add(0)..addAll([1, 2, 3]);

결과 l1리스트 인[0, 1, 2, 3]

var l1 = new List<int>().add(0).addAll([1, 2, 3]);

.add(0)반환 하기 때문에 오류가 발생 합니다void

..( 앞의 예에서)는을 참조 new List()하고 .(나중에)는 식의 이전 부분의 반환 값을 나타냅니다.

..유창한 방식으로 API를 사용할 수있는 this것과 같은 모든 종류의 메소드에서 리턴 할 필요가 없도록하기 위해 도입되었습니다 add().

.. 모든 클래스에 즉시 제공합니다.


참고로 .. (in former example) refers to new List(), List우리가 ..제 의견으로는 NO를 사용할 때 새로운 것을 다시 만들고 있다는 의미 입니까? 나는 당신의 new말에 혼란스러워 했습니다. 정말 새거나 new키워드 에 대해 이야기하고 있습니다.
CopsOnRoad

우선 new은 선택 사항입니다. ..하여 반환 된 목록을 의미 new List<int>()하고 그것에 같은 다양한 방법을 호출 할 수 있도록 add(0) addAll(...)반복없이 l1.그리고 할당 된 작성된리스트 예이며 l1, 하지 체인의 마지막 메소드의 리턴 값 ( addAll(...)). 이것이 귀하의 질문에 대답합니까?
Günter Zöchbauer

1
물론! newDart 2.0부터는 선택 사항이라는 것을 알고 있습니다 new. 위의 상황에 혼란스러워 설명에 감사드립니다.
CopsOnRoad

1
..add(6)같다 l1.add(6), .add(6)같다 l1.add(5).add(6). add(5)돌아와 void전화 add()를 걸 수 없습니다void
Günter Zöchbauer

2
이 문서를 따르십시오 : -dartlang.org/guides/language/language-tour#cascade-notation- 엄밀히 말하면, 캐스케이드에 대한“더블 도트”표기법은 연산자가 아닙니다. Dart 구문의 일부일뿐입니다.
Mr Special

17

캐스케이드 (..)를 사용하면 동일한 객체에서 일련의 작업을 수행 할 수 있습니다. 자세한 내용은 문서를 읽으십시오

querySelector('#confirm') // Get an object.
  ..text = 'Confirm' // Use its members.
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'));

이전 예는 다음과 같습니다.

var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));

1
이 예제에 감사드립니다! 어떤 아이디어가 왜 ..onClick번역하지 button.classes.onClick않습니까?
Bouke Versteegh

1

..다트 에서 계단식 연산자 로 알려져 있습니다.

하나 이상의 서브 시퀀스 조작을 사용할 수 있습니다.

예 :

banerad..load()..show().

List coursename;
coursename..add("java")..add("flutter" )..add("dart");

여기 또 다른 예가 있습니다

여기 또 다른 예가 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.