Каскадтық әдіс - Method cascading

Жылы объектіге бағытталған бағдарламалау, каскадтық әдіс болып табылады синтаксис бұл бірнеше мүмкіндік береді әдістер сол объектіге шақыру керек. Бұл әсіресе қолданылады еркін интерфейстер.

Мысалы, in Дарт, каскад:

а..б() ..c();

жеке қоңырауларға тең:

а.б();а.c();

Каскадтау әдісі әлдеқайда аз кездеседі әдісті тізбектеу - бұл тек бірнеше объектіге бағытталған тілдерде кездеседі, ал тізбектеу өте кең таралған. Каскадтау нысанын тізбекті қолдану арқылы жүзеге асыруға болады, бірақ бұл интерфейсті шектейді; қараңыз әдіс тізбегімен салыстыру, төменде.

Қолдану

Каскадтау болып табылады синтаксистік қант бұл объектіні бірнеше рет тізімдеу қажеттілігін жояды. Бұл әсіресе қолданылады еркін интерфейстер, бір объектіге көптеген әдіс шақыруларының ерекшелігі.

Бұл әсіресе егер объект ұзақ өрнектің мәні болса, өте пайдалы, өйткені ол өрнекті бірнеше рет тізімдеу немесе уақытша айнымалыны қолдану қажеттілігінен арылтады. Мысалы, өрнекті қайталап тізімдеудің орнына:

а.б().c();а.б().г.();

немесе уақытша айнымалыны қолдану:

б = а.б();б.c();б.г.();

каскадтау өрнекті бір рет жазуға және бірнеше рет қолдануға мүмкіндік береді:

а.б()..c()     ..г.();

Әдістер тізбегімен салыстыру

Әдістемелік шақыру берілген a.b (), шақыруды орындағаннан кейін каскадты әдіс осы өрнекті келесіге қарай бағалайды сол объект а (егер оның мутациясы болса, жаңа мәнімен), ал әдісті тізбектеу осы өрнекті дұрыс объект.

Тізбек

Келесі тізбек (C ++ тілінде):

а.б().c();

қарапайым формаға тең:

б = а.б();б.c();
Каскадтау

Келесі каскад (Дартта):

а..б() ..c();

қарапайым формаға тең:

а.б();а.c();

Каскадтау әдісті мақсатты нысанды (қабылдағыш, бұл, өзіндік). Алайда, бұл әдісті осы жолмен жүзеге асыруды немесе түпнұсқа объектіні жасайтын басқа объектіге орауды талап етеді және әдіс басқа, мүмкін болатын пайдалы мәнді қайтармауын талап етеді (немесе егер бұл неғұрлым орынды болса, ешнәрсе, егер орнатқыштар). Еркін интерфейстерде бұл көбінесе сеттерлердің оралуын білдіреді бұл ештеңенің орнына.

Тілдер

Паскаль

With операторының компоненттік операторының ішінде жазба айнымалысының компоненттері (өрістері) бірге сөйлемді тек олардың өріс идентификаторымен белгілеуге болады, яғни бүкіл жазба айнымалысын белгілемей, олардың алдын ала жазбай. With сөйлемі өрістің идентификаторлары айнымалы идентификаторлары ретінде орын алуы үшін көрсетілген жазба айнымалысының өріс идентификаторларын қамтитын аумақты тиімді түрде ашады.

    бірге күн істеу    егер ай = 12 содан кейін        баста ай := 1; жыл := жыл + 1 Соңы    басқа ай := ай + 1{балама}    егер күн.ай = 12 содан кейін        баста күн.ай := 1; күн.жыл := күн.жыл + 1 Соңы    басқа күн.ай := күн.ай + 1

Smalltalk

Методикалық тізбектер мен каскадтар енгізілді Smalltalk; кейінгі объектіге бағытталған тілдердің көпшілігі тізбектерді енгізді, бірақ аздаған каскадты қолданды. Smalltalk-те үтір үтір операторы бір объектіге әр түрлі хабарламалар жіберу үшін қолданыла алады:[1]

өзіндік listPane ата-ана  түсі: Түс қара;  биіктігі: 17;  ені: 11

Нүктемен аяқталған, сонымен қатар аббревиатура үшін айнымалы қолдана отырып, бөлек тұжырымдармен салыстырыңыз:

|ата-ана|ата-ана := өзіндік listPane ата-ана.ата-ана түсі: Түс қара.ата-ана биіктігі: 17.ата-ана ені: 11.

Бір нәзіктік - каскадтағы әдіс шақырудың мәні («хабарлама») хабарламаның қарапайым мәні болып табылады, емес қабылдағыш. Бұл сіз ресивердің мәнін қалаған кезде қиындық тудырады, мысалы, күрделі мән құрғанда. Мұны арнайы қолдану арқылы өңдеуге болады өзің жай ресиверді қайтаратын әдіс:[2]

Нысан>>өзің  ^өзіндік

Мысалы, «нысанды коллекцияға қосу» әдісі (Жинақ >> қосу: anObject) жиын емес, қосылған нысанды қайтарады. Осылайша, оны каскадта тағайындау мәлімдемесінде қолдану үшін каскад аяқталуы керек өзің, әйтпесе мән жиынтықтың өзі емес, тек соңғы қосылған элемент болады:

барлық := Тапсырыс берілген жинақ жаңа  қосу: 5;  қосу: 7;  өзің.

Visual Basic

Visual Basic пайдаланады Бірге мәлімдеме сол объектіде ерікті түрде шақыру әдісін немесе меншіктік қатынасты қосу үшін:

Бірге ExpressionThatReturnsAnObject  .Кейбір функциялар(42)  .Меншік = мәніСоңы Бірге

Бірге..және бірге Visual Basic-тегі блоктарды орналастыруға болады:

Бірге ExpressionThatReturnsAnObject  .Кейбір функциялар(42)  .Меншік = мәні  Бірге .SubObject    .SubProperty = басқаМән    .Басқа әдіс(42)  Соңы БіргеСоңы Бірге

Дарт

Жаңа тілдер арасында Дарт қос нүктені қолдана отырып, каскадтарды жүзеге асырады .. «каскадты әдіспен шақыру жұмысы». Smalltalk-тен айырмашылығы, Dart-та ​​каскадталған әдіс шақырудың мәні қабылдағыш (базалық объект) болып табылады, (шақырылмаған) әдіс шақырудың мәні емес, осылайша қажет емес өзің. Дарт қолданады қасиеттері және, осылайша, гетерлер мен сеттерлер үшін әдіс синтаксисін пайдаланудан гөрі (foo.getBar (); foo.setBar (b);), өріс мәні / тағайындау синтаксисі қолданылады (foo.bar; foo.bar = b;), және каскадтар тапсырмалармен жұмыс істейді:

а..жіп = 'Сәлем Әлем!' ..жасалды = шын;

балама:

а.жіп = 'Сәлем Әлем!';а.жасалды = шын;

Әдебиеттер тізімі

  1. ^ Бек 1997 ж, «Каскад», 183–185 бб.
  2. ^ Бек 1997 ж, «Өзің», 186–188 бб.
  • Бек, Кент (1997). Smalltalk үздік тәжірибе үлгілері. Prentice Hall. ISBN  978-0134769042.

Сыртқы сілтемелер

Дарт