메서드 계단식
Method cascading객체 지향 프로그래밍에서 메서드 캐스캐이딩은 동일한 객체에서 여러 메서드를 호출할 수 있는 구문이다. 이것은 특히 유창한 인터페이스에 적용된다.
예를 들어, 다트에서는 계단식:
a..b() ..c(); 개별 통화와 동일함:
a.b(); a.c(); 메서드 캐스캐이딩은 메서드 체인보다 훨씬 덜 흔하다. 체인은 매우 흔한 반면 소수의 객체 지향 언어에서만 발견된다. 계단식 배열의 형태는 체인을 사용하여 구현될 수 있지만, 이것은 인터페이스를 제한한다. 아래의 메서드 체인과의 비교를 참조하라.
적용
캐스캐이딩은 물체를 반복해서 나열할 필요가 없는 통사성 설탕이다. 이것은 특히 유창한 인터페이스에서 사용되는데, 단일 객체에서 많은 메서드를 호출하는 것이 특징이다.
이것은 특히 개체가 긴 표현식의 값인 경우, 표현식을 반복적으로 나열하거나 임시 변수를 사용할 필요가 없기 때문에 유용하다. 예를 들어 표현식을 반복적으로 나열하는 대신 다음과 같이 입력하십시오.
a.b().c(); a.b().d(); 또는 임시 변수 사용:
b = a.b(); b.c(); b.d(); 계단식 표현은 한 번 쓰고 반복적으로 사용할 수 있다.
a.b()..c() ..d(); 메서드 체인과 비교
메서드 호출 지정 a.b(), 호출을 실행한 후 메서드 계단식에서는 이 식을 왼쪽 객체로 평가한다. a (변형된 경우 새 값으로), 메서드 체인은 이 식을 올바른 객체에 대해 평가한다.
- 체인
다음 체인(C++ 단위):
a.b().c(); 단순 형식과 동일함:
b = a.b(); b.c(); - 캐스캐이딩
다음 계단식(다트):
a..b() ..c(); 단순 형식과 동일함:
a.b(); a.c(); 캐스캐이딩은 대상 객체(수신기, 수신기)를 반환하는 방법을 통해 체인의 관점에서 구현될 수 있다. this, self그러나, 이 경우 방법은 이미 이러한 방식으로 구현되거나 원래 개체는 이렇게 하는 다른 물체로 포장되어야 하며, 이 방법은 세터처럼 잠재적으로 유용한 일부 다른 값(또는 그것이 더 적절하다면 아무 것도 반환하지 않아야 한다)을 반환하지 않아야 한다. 유창한 인터페이스에서 이것은 종종 세터들이 아무것도 아닌 것을 반환한다는 것을 의미한다.
언어들
파스칼
with 문(with 문)의 구성요소 문장 내에서 with 절에 의해 지정된 기록 변수의 구성요소(필드)는 필드 식별자(즉, 전체 기록 변수의 폄하와 함께 선행하지 않고 그것들의 필드 식별자로만 나타낼 수 있다. with 절은 필드 식별자가 변수 식별자로 발생할 수 있도록 지정된 기록 변수의 필드 식별자를 포함하는 범위를 효과적으로 연다.
와 함께 날짜를 잡다 하다 만일 월 = 12 그때 시작되다 월 := 1; 연도 := 연도 + 1 종지부를 찍다 다른 월 := 월 + 1 {는 }과(와) 동일함 만일 날짜를 잡다.월 = 12 그때 시작되다 날짜를 잡다.월 := 1; 날짜를 잡다.연도 := 날짜를 잡다.연도 + 1 종지부를 찍다 다른 날짜를 잡다.월 := 날짜를 잡다.월 + 1 스몰토크
메서드 체인과 캐스케이드는 모두 스몰토크에서 도입되었다. 대부분의 후속 객체 지향 언어들은 체인을 구현했지만, 거의 캐스케이드를 구현하지 않았다. Smalltalk에서 세미콜론 연산자는 동일한 객체에 다른 메시지를 보내는 데 사용할 수 있다.[1]
자아의 listPane 부모 색상: 색 검게 하다; 높이:. 17; 너비: 11 마침표로 종료된 별도의 문과 비교하며 약어에 변수를 사용하십시오.
부모 부모 := 자아의 listPane 부모. 부모 색상: 색 검게 하다. 부모 높이:. 17. 부모 너비: 11. 한 가지 미묘한 점은 캐스케이드 내의 메서드 콜("메시지")의 가치는 여전히 수신자가 아닌 메시지의 통상적인 값이라는 점이다. 이것은 예를 들어 복잡한 값을 쌓을 때 수신기의 값을 원할 때 문제가 된다. 이것은 특별한 것을 사용하여 작업할 수 있다. yourself 단순히 수신기를 반환하는 방법:[2]
오브젝트>>너 자신 ^자아의 예를 들어, "수집에 객체 추가" 방법(Collection>>add: anObject)는 컬렉션이 아닌 추가된 객체를 반환한다. 따라서 할당 성명에서 이것을 계단식으로 사용하기 위해서는 계단식으로 끝나야 한다. yourself그렇지 않으면 이 값이 마지막 추가된 요소일 뿐 컬렉션 자체는 아니다.
전부 := OrderCollection 새로운 추가: 5; 추가: 7; 너 자신. 비주얼 베이직
Visual Basic은 이 문을 사용하여 동일한 개체에서 임의의 수의 메서드 호출 또는 속성 액세스를 활성화한다.
와 함께 표현ThatReturnsAnobject .일부 기능(42) .속성 = 가치를 매기다 끝 와 함께 With..End With Visual Basic의 블럭은 중첩될 수 있음:
와 함께 표현ThatReturnsAnobject .일부 기능(42) .속성 = 가치를 매기다 와 함께 .하위 오브젝트 .서브프로퍼티 = 기타 가치 .어나더메토드(42) 끝 와 함께 끝 와 함께 다트
새로운 언어 중에서 Dart는 더블 도트를 사용하여 계단식 계단식 언어를 구현한다. .. "파손된 방법 호출 작업". 스몰토크와 달리 다트에서 캐스케이드 방식 호출의 값은 수신기(베이스 객체)이며, (캐스케이드되지 않은) 방식 호출의 값이 아니므로, 그럴 필요가 없다. yourself. 다트는 속성을 사용하기 때문에 getter와 setter에 메서드 구문을 사용하기 보다는 (foo.getBar(); foo.setBar(b);)), 필드 값/변환 구문을 사용한다(foo.bar; foo.bar = b;() 및 계단식 작업 할당:
a..끈을 매다 = '헬로 월드!' ..끝냈다 = 진실의; 다음 항목과 동일하다:
a.끈을 매다 = '헬로 월드!'; a.끝냈다 = 진실의; 참조
- Beck, Kent (1997). Smalltalk Best Practice Patterns. Prentice Hall. ISBN 978-0134769042.
외부 링크
- 다트
- 2012년 2월 17일, 길라드 브라차, "Method Cascades in Dart"
- 마일스톤 1 언어 변경, "캐스케이드", Bob Nystrom, 2012년 7월(2013년 3월 업데이트)