Dart에서 "new"키워드를 사용해야합니까?


94

내 Dart 기반 응용 프로그램에서 방금 new 키워드를 있고 모든 것이 완벽하게 작동 .

대신 final widget = new Widget();사용할 수도 있습니다.final widget = Widget(); .

이것이 코드에 영향을 미칩니 까?

답변:


119

아니 그렇지 않아. 함께 다트 2 (자세한 내용과 발표에 대한 클릭)new 또한 const키워드 만들었다 선택 .

이것은 그 자체 new Widget()로 똑같은 일을 한다는 것을 의미합니다 Widget().


그러나 const키워드는 const암시 적으로 const.
따라서 const필요할 때 명시 적으로 지정해야 합니다.


6
다트 팀은 지금 조금을 철회했고, 어떤 상황이있다 new거나 const여전히 필요는 (내가 예 또는 규칙을 기억하지 않는다). 그들은 Dart 2 이후 모든 곳에서 선택 사항으로 만들기 위해 또 다른 시도를 할 수 있습니다.
Günter Zöchbauer

1
new필요한 곳이 없습니다 . new올바른 프로그램에서 생략 하면 항상 동일한 방식으로 작동합니다. const작동중인 프로그램에서 제거 하면 프로그램이 유효하기 위해 작성 해야하는 대부분의 경우 const여전히 유효합니다. 이미 const주변에 표현식이 있으면 중첩 된 const를 생략 할 수 있습니다.
lrn

20

Dart 2에서 new또는 const앞에 또는 없이 함수와 같은 생성자를 호출하면를 사용하는 것과 같습니다 new. const 호출을 원하면 const앞에 넣어야 합니다.

const 표현식 에서 const다시 작성할 필요가 없으며 일부 컨텍스트에서는 const 표현식 필요한 (예 : switch case 표현식 및 const 변수의 이니셜 라이저)에서는 외부 const도 필요하지 않습니다.

그래서 당신은 쓸 필요가 없습니다 new.

Dart 언어 팀은 Dart 2의 초기 업데이트에서 대신 삽입하도록 기본적으로 new또는 삽입 할 수있는 표현식 const(즉, 상수 인수가있는 const 생성자)이 올바른 호출 을 허용하려고합니다 . , 객체가 새 인스턴스가 될 필요가 있는 다른 const 생성자 앞에 작성 하는 것이 좋습니다 . 이것은 매우 드문 경우이며 일반적으로 불변 객체의 신원에 대해 신경 쓰지 않습니다 (삽입 이 좋은 생각으로 간주되는 이유 입니다).constnewnewObject()const



5

new키워드는 항상 클래스의 새로운 인스턴스를 반환하는 클래스를 호출, 지금의 다트 2로 선택되었다. 내 권장 사항 에 따라 레이아웃 정의 외부에서 사용할 수 있지만 ( 필수 아님) 레이아웃 내부에서는 생략 할 수 있습니다 .

여러분과 공유하고 싶은 또 하나의 점은 widget 을 선언 할 때 new또는 const키워드를 사용하면 위젯 본문 코드를 축소 및 확장하는 데 사용할 수 있는 + 아이콘도 볼 수 있다는 것 입니다. 이는 동일한 파일에서 다른 위젯 코드를 작업하는 동안 dart 파일 의 나머지 위젯 코드를 축소 / 숨기기를 원할 때 유용 합니다.


그 붕괴에 대한 좋은 캐치
MoGa

2
축소 동작은 IDE에 따라 다릅니다. 적용되는 항목을 명시 적으로 명시해야합니다.
jamesdlin

1
또한 "클래스 호출"( "클래스의 생성자 호출"을 의미한다고 가정)은 항상 클래스의 새 인스턴스를 반환하지 않습니다. 팩토리 생성자 를 호출 하면 기존 인스턴스를 다시 가져올 수 있습니다 . 이것이 new권장되지 않는 이유 입니다. 사용하지 않으면 무조건 새 인스턴스가 생성되는 것처럼 보입니다.
jamesdlin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.