Процедуралық параметрлер: анықтамасы, қасиеттері және қолданылуы
Procedural parameter
Процедуралық параметрлер – бағдарламалауда процедураны өзгертуге мүмкіндік беретін құрал. Pascal, C сияқты тілдерде тиімді, объектілермен салыстырғанда арзан.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Есептеуде процедуралық параметр – өзі процедура болатын процедураның параметрі. Бұл түсінік өте қуатты және әмбебап бағдарламалау құралы болып табылады, себебі ол бағдарламашыларға кітапхана процедурасының белгілі бір қадамдарын кез келген күрделілікте өзгертуге мүмкіндік береді, осы процедураның кодын түсінуге немесе өзгертуге қажеттілік туындамайды. Бұл құрал, әсіресе, жергілікті функцияларды анықтауды қолдайтын тілдерде, мысалы, Паскаль және қазіргі GNU диалектісі C тілінде тиімді және ыңғайлы. Функциялық жабылулар (function closures) қолжетімді болғанда бұл мүмкіндік одан да артады. Объектіге бағытталған бағдарламалау тілдеріндегі объектілер де осыған ұқсас функционалдықты (және одан да көпті) ұсынады, бірақ бұл айтарлықтай қымбатқа түседі. Процедуралық параметрлер бірінші дәрежелі функция (first-class function) және анонимді функция түсініктерімен байланысты, бірақ олардан ерекшеленеді. Бұл екі түсінік функциялардың қалай анықталуымен, емес, қалай қолданылуымен байланысты.
In computing, a procedural parameter is a parameter of a procedure that is itself a procedure. This concept is an extremely powerful and versatile programming tool, because it allows programmers to modify certain steps of a library procedure in arbitrarily complicated ways, without having to understand or modify the code of that procedure. This tool is particularly effective and convenient in languages that support local function definitions, such as Pascal and the modern GNU dialect of C. It is even more so when function closures are available. The same functionality (and more) is provided by objects in object oriented programming languages, but at a significantly higher cost. Procedural parameters are somewhat related to the concepts of first class function and anonymous function, but is distinct from them. These two concepts have more to do with how functions are defined, rather than how they are used.
Шаралық
Процедуралық параметрлерге рұқсат ететін тілдерде, көбінесе процедуралық параметрлер олардың туған аймағында орындалатындай етіп анықталады. Нақтырақ айтқанда, егер actf функциясы P-ге аргумент ретінде, оның процедуралық параметрі f ретінде жіберілсе; және f P функциясының ішінде шақырылса, actf орындалып жатқанда, ол өзінің анықталған ортасын көреді. Мұндай аймақтарды іске асыру оңай емес. actf толық орындалған кезде, оның орта айнымалылары сақталатын белсенді жазбалар стекте кез келген деңгейде болуы мүмкін. Бұл "төменге қарайғы аргумент" мәселесі деп аталады.
In languages that allow procedural parameters, the scoping rules are usually defined in such a way that procedural parameters are executed in their native scope. More precisely, suppose that the function actf is passed as argument to P, as its procedural parameter f; and f is then called from inside the body of P. While actf is being executed, it sees the environment of its definition. The implementation of these scoping rules is not trivial. By the time that actf is finally executed, the activation records where its environment variables live may be arbitrarily deep in the stack. This is the so called downwards funarg problem.
Тарих
Процедуралық параметрлер электронды компьютерлер пайда болғанға дейін математик Алонзо Черч өзінің лямбда-есептеу моделінің бір бөлігі ретінде ойлап тапқан. Процедуралық параметрлер бағдарламалау тілінің мүмкіндігі ретінде ALGOL 60 тілінде енгізілді. Шындығында, ALGOL 60 тілінде процедуралық параметрлерді қолдануды жеңілдете алатын "атымен шақыру" параметрін беру механизмі болды; Дженсеннің құрылғысына қараңыз. Процедуралық параметрлер LISP бағдарламалау тілінің маңызды ерекшелігі болды, ол функциялық жабу немесе funarg тұжырымын да енгізді. C бағдарламалау тілі функциялық көрсеткіштерді параметрлер ретінде беруге мүмкіндік береді, бұл соған ұқсас мақсатқа жетеді және көбінесе оқиға басқарылатын бағдарламалауда кері шақыру ретінде және қателерді өңдеуге пайдаланылады. Дегенмен, қазіргі заманғы C компиляторларының көпшілігі ішкі функциялардың анықтамаларын қолдауға мүмкіндік бермейді, сондықтан оның басқа қолданылуы салыстырмалы түрде аз. Процедуралық параметрлер Pascal тілінде де ұсынылды, сонымен қатар ішкі процедуралардың анықтамаларымен бірге; алайда, стандартты Pascal жеке компиляцияға рұқсат бермегендіктен, бұл мүмкіндік сол тілде де аз қолданылды.
Procedural parameters were invented before the age of electronic computers, by mathematician Alonzo Church, as part of his lambda calculus model of computation. Procedural parameters as a programming language feature were introduced by ALGOL 60. In fact, ALGOL 60 had a powerful "call by name" parameter passing mechanism that could simplify some uses of procedural parameters; see Jensen's Device. Procedural parameters were an essential feature of the LISP programming language, which also introduced the concept of function closure or funarg. The C programming language allows function pointers to be passed as parameters, which accomplish the same end, and are often used as callbacks in event driven programming and as error handlers. However, only a few modern C compilers allow nested function definitions, so that its other uses are relatively uncommon. Procedural parameters were provided also in Pascal, together with nested procedure definitions; however, since standard Pascal did not allow separate compilation, the feature was little used in that language, too.