이름 있는 인자와 선택적 인자는 정말 멋지다

2 hours ago 1

Rust에 이름 있는 인자와 선택적 인자를 도입하면, 인자 순서 착오를 줄이고 구조체나 빌더로 이를 우회하는 반복 코드를 줄일 수 있음 HashMap은 선택적 설정 3개의 조합을 지원하기 위해 서로 다른 생성 함수 8개를 제공하며, 기본값을 지원하는 인자로 이런 API 증식을 줄일 수 있음 제안의 핵심은 매개변수에 pub를 붙여 이름 공개를 선택하게 하는 것임. 기존 위치 기반 호출은 유지하면서 이름 지정, 순서 변경, 기본값 생략을 허용함 트레이트 메서드의 기본값은 제외하고, 함수 포인터와 Fn*를 통한 호출에서는 인자 이름과 기본값을 사용할 수 없도록 범위를 제한함 아직 정식 RFC 제출이 확정되지 않은 pre-RFC 수준의 제안이며, 이름 지정의 선택성에 따른 안전성 한계, 문법 선택, 제네릭 추론과 const 호환성 등이 남아 있음 다른 언어의 지원 방식과 Rust의 우회법 Dart는 선택적 매개변수가 많은 GUI에 맞춰 이름 있는 매개변수를 지원함 중괄호로 이름 있는 매개변수를 묶고, fontSize: 24처럼 호출함 기본값 지정, null 기본값, required를 통한 필수 지정이 가능함 대괄호로 묶으면 선택적 위치 매개변수를 만들 수 있으며, 예시의 device는 생략 시 'carrier pigeon'을 사용함 C# 은 모든 매개변수를 이름으로 지정할 수 있고, 필수 매개변수 뒤에 기본값을 가진 매개변수를 선언할 수 있음 별도 선언 문법 없이 bar: "Hello", foo: "world"처럼 이름을 사용해 순서를 바꿀 수 있음 TypeScript는 선택적 위치 매개변수를 지원하며, 기본값을 지정하지 않으면 생략된 값은 undefined가 됨 이름 있는 인자는 전용 문법 대신 익명 객체 타입과 구조 분해를 조합해 흉내 냄 타입 선언과 구조 분해에서 필드 이름을 두 번 써야 하고, 호출에도 객체의 중괄호가 필요함 객체 하나를 인자로 받는 함수 형태의 React 컴포넌트에서 이 패턴이 자주 사용됨 Rust에서는 매개변수용 구조체를 만들고 Default를 구현한 뒤 ..Default::default()로 나머지 값을 채우는 방식이 흔함 익명 타입이 아니므로 별도 구조체가 필요하고, 원하는 기본값이 타입 자체의 기본값과 다르면 기본값을 만드는 함수도 작성해야 함 모든 필드에 기본값을 제공할 수 있어야 하며, 일부 매개변수만 선택적이라면 더 복잡한 우회법이 필요함 이름과 기본값이 필요한 이유 인자 순서 착...

Read Entire Article