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.