stringtranslate.com

Магия (программирование)

В контексте компьютерного программирования магия — неформальный термин для абстракции ; он используется для описания кода, который обрабатывает сложные задачи, скрывая эту сложность для представления простого интерфейса. Термин несколько ироничен и часто несет в себе плохие коннотации, подразумевая, что истинное поведение кода не сразу очевидно. Например, полиморфные механизмы типизации и замыкания Perl часто называют «магией».

Термин подразумевает, что скрытая сложность, по крайней мере, в принципе понятна, в отличие от вариантов, которые описывают тайные методы, которые намеренно скрыты или чрезвычайно сложны для понимания. Однако этот термин может также применяться ласково, предполагая «очарование» кода.

Действие таких абстракций описывается как совершаемое « автоматически », что является гибридом слов «автоматически» и «магически».

Ссылочная непрозрачность

«Магия» относится к процедурам , которые выполняют вычисления на основе данных, явно им не предоставленных, путем доступа к другим модулям, позициям памяти или глобальным переменным , которые им не положено делать (другими словами, они не являются ссылочно прозрачными). Согласно самым последним моделям архитектуры программного обеспечения , даже при использовании структурного программирования обычно предпочитают, чтобы каждая функция вела себя одинаково каждый раз, когда ей передаются одни и те же аргументы, тем самым следуя одному из основных принципов функционального программирования . Когда функция нарушает это правило, часто говорят, что она содержит «магию».

Упрощенным примером негативной магии является следующий код на PHP :

функция  magic () {  глобальная  $somevariable ; echo  $somevariable ; }$somevariable  =  true ;магия ();

Хотя код выше понятен, если его увидеть в большом проекте, часто бывает трудно понять, откуда функция magic()берет свое значение. Предпочтительно писать этот код, используя следующую концепцию:

функция  noMagic ( $myvariable ) {  echo  $myvariable ; }$somevariable  =  true ;нетМагии ( $somevariable );

Неортогональность

Любой SV [скалярное значение] может быть магическим, то есть иметь особые свойства, которых нет у обычного SV.

—  Ларри Уолл , страница руководства perlguts , [1] Perl 5

Это определение магии или магического может быть расширено до типа данных , фрагмента кода, ключевого слова или машинного адреса, которые имеют свойства, не разделяемые в остальном идентичными объектами. Магические свойства могут быть или не быть документированы.

Смотрите также

Ссылки

  1. ^ "perlguts – perldoc.perl.org". 5 октября 2014 г. Получено 18 февраля 2015 г.
  2. ^ Банахан, Майк; Брэди, Деклан; Доран, Марк (1991). "9.10.3 Заголовочный файл". Книга C: Знакомство со стандартом ANSI C. Набор инструкций (2-е изд.). Уокингем, Англия: Addison-Wesley Publishers. стр. 234. ISBNstdio.h 0-201-54433-4. Копировать эти объекты внутри программы небезопасно; иногда их адреса могут быть «магическими».
  3. ^ "perlop – perldoc.perl.org". 7 сентября 2010 г. Получено 17 февраля 2011 г.
  4. ^ ab "27. Ключевые слова" (PDF) . Справочное руководство BBC BASIC (1-е изд.). Кембридж, Англия: Acorn Computers. Октябрь 1992 г. стр. 229, 349. ISBN 1-85250-103-0. Получено 9 мая 2007 г.[ мертвая ссылка ]