Непейвода Н.Н. Программирование. Раздел 3

Непейвода Н.Н. Программирование. Страница 322

Передача параметра по наименованию (или, что то же — по имени) восходит к самым ранним языкам программирования (FOTRTRAN, Algol 60 и др.). Этот механизм, на первый взгляд, не вполне удовлетворителен с точки зрения надежности программирования, тем не менее полезно сопоставить его, в частности, с подстановкой параметровпеременных.

Пусть в условиях приводимых иллюстраций описана процедура с вызо­вом параметра по имени:

procedure R ( name х : Integer); begin

тех же значениях переменных. В соответствии с определением при вызове К(М[а]) имитируется подмена параметра х на М[а]. Поэтому первый оператор тела процедуры, как и в случае 0(М[а]), присваивает значение 3 переменной а, но далее текстуальная замена х на М[а] в операторе х:=1 приводит к присваиванию значения 1 переменной М[3] (а не М[1], как при 0(М[а])).

Из примеров видно, что достигается при подстановке параметра по на­именованию: системой программирования обеспечивается такой эффект вы­полнения вызова процедуры, как при выполнении тела процедуры, в кото­ром всякое вхождение в текст формального параметра заменено фрагментом текста, представляющего соответствующий фактический параметр.

Приведенное выше определение передачи параметров не совсем коррект­но: понимаемое буквально, оно противоречит отмеченному общему прин­ципу разделения контекстов: формальные параметры относятся к контексту процедуры, а фактические — к контексту ее вызова. Иллюстрацией служит пример на рис. 8.7. При буквальном понимании определения переменная а,

появляющаяся при подстановке фактического параметра вместо х, оказы­вается той переменной, которая описана в первой строке примера, а пере­менная Ь (второй вызов Р) и вовсе недоступна. С любой разумной точки зрения это неверно, и требуется уточнение, которое в декларативной фор­ме выглядит как конкретизация принципа разделения контекстов: имена из фрагментов, вставляемых вместо формальных параметров, идентифициру­ются, исходя из их доступности в контексте вызова, а не описания процеду3 Не все операционные языки мы относим к языкам традиционного типа. В частности, язык Javaявляется операционным, но изза некоторых принципиальных отличий данного языка и языков, перечисленных выше, мы его к традиционным языкам не относим.

Новости

  • 1
  • 2
Prev Next

Ракета "Ангара-А5В" в ближайшее десятилетие не полетит

24.01.2016

Ракета "Ангара-А5В" в ближайшее десятилетие не полетит

Роскосмос не планирует в течение ближайшего десятилетия осуществлять пуск тяжёлой ракеты-носителя А...

Ученые РФ опровергли выводы исследований о вреде ГМО

24.01.2016

Ученые РФ опровергли выводы исследований о вреде ГМО

Исследователи из Института проблем передачи информации (ИППИ РАН) проанализировали несколько самых п...

Летающие "Крокодилы"

24.01.2016

Летающие "Крокодилы"

20 удивительных фактов о боевом вертолете Ми-24.Этот вертолет стал таким же узнаваемым символом сове...

В Аргентине описали новый вид динозавра-гиганта

24.01.2016

О ранее неизвестном виде динозавра, относящемуся к инфраотряду зауроподов, рассказали аргентинские п...

Реклама