Что такое идиома в программировании
Перейти к содержимому

Что такое идиома в программировании

  • автор:

Идиома программирования — Programming idiom

A Идиома программирования или Идиома кода выражает особую особенность повторяющейся конструкции в одном или нескольких языки программирования. Разработчики распознают идиомы программирования, связывая и придавая значение одному или нескольким фрагментам кода. Идиому можно рассматривать как концепцию, лежащую в основе шаблона в коде, который в реализации представлен непрерывными или рассредоточенными фрагментами кода. Эти фрагменты доступны на нескольких языках программирования, фреймворках или даже библиотеках. Вообще говоря, идиома программирования — это выражение на естественном языке простой задачи, алгоритма или структуры данных, которая не является встроенной функцией в программировании. используемый язык или, наоборот, использование необычной или примечательной функции, встроенной в язык программирования. Кроме того, этот термин можно использовать в более широком смысле для обозначения сложных алгоритмов или шаблонов проектирования программирования с точки зрения реализации и исключения обоснования дизайна.

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

Использование этого термина в наречиях или прилагательных часто означает использование языка программирования типичным способом. Например, идиоматическим способом управления динамической памятью в C было бы использование функций malloc и free из стандартной библиотеки C C. Такой код будет хорошо понятен тем, кто знаком с C, и вряд ли вызовет проблемы с переносимостью программного обеспечения на другие вычислительные платформы. С другой стороны, если код откажется от использования этих стандартных функций и вместо этого запросит память, используя системный вызов sbrk для достижения некоторого особого поведения, это можно будет считать неидиоматическим ; потребуется больше усилий, чтобы понять и не переносить на не Unix-подобные системы.

  • 1 Примеры простых идиом
    • 1.1 Печать Hello World
    • 1.2 Вставка элемента в массив

    Примеры простых идиом

    Печать Hello World

    Одна из наиболее распространенных отправных точек для изучения программы или выявления различий в синтаксисе между известным языком и новым.

    Это имеет несколько реализаций, среди них фрагменты кода для C ++ :

    std :: cout 
    
    System.out.println ("Hello World");

    Вставка элемента в массив

    Эта идиома помогает разработчикам понять, как управлять коллекциями на данном языке, в частности, вставляя элемент x в позицию i в списке s и перемещая элементы вправо.

    s.insert (i, x)
    s.splice (i, 0, x);
    splice (@s, $ i, 0, $ x)

    См. Также

    • Алгоритмический скелет
    • Встроенный SQL (своего рода «стандартная идиома» для использовать на любом языке)
    • Идиома

    Ссылки

    Внешние ссылки

    • programming-idioms.org показывает краткие реализации идиом на большинстве основных языков.
    • Идиомы программирования C ++ из Wikibooks.

    Идиома (программирование)

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

    Знание идиом языка и правил их применения является одним из показателей свободного владения языком программирования.

    Примеры простых идиом

    Инкремент

    В языках типа BASIC идиома для единичного приращения значения переменной выглядит так:

     i = i + 1 

    Укороченный вариант в C-подобных языках:

     i += 1; /* i = i + 1; */ ++i; /* тот же результат */ i++; /* тот же результат */ 

    Pascal содержит процедуру аналогичного назначения:

     i := i + 1; Inc(i); (* тот же результат *) 

    Обмен значениями (swap)

    Основная статья: Идиома copy-and-swap

    В большинстве языков обмен значениями между двумя переменными выглядит следующим образом:

     temp = a; a = b; b = temp; 

    В Perl это выглядит элегантнее:

     ($a, $b) = ($b, $a); 

    Бесконечный цикл

     while true do begin do_something(); end; 

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

    Perl поддерживает как C-синтаксис, так и другие варианты:

     do_something() while (1); # Укороченный бесконечный цикл # аналогично while (1) < do_something() >; 
     # Using a "naked block" and the redo operator
     loop do_something; end loop; 
     while True: do_something() 

    Выборка из ассоциативного массива

    Во многих языках имеется реализация ассоциативного массива, т. н. хеш-таблица.

    Реализация ассоциативного массива в Perl:

     my %elements = map < $_ =>1 > @elements; 

    Критика

    Автор книги «Learn Ruby The Hard Way» Зед Шоу отмечает, что отношение к идиомам в сообществах разработчиков говорит о том, что применение идиом следует отнести к категории нравов, так как при письме на естественном языке, требующем чёткости изложения, идиом следует избегать [1] . Им приводится следующий пример из «Ruby Styleguide» [2] :

    arr = [1, 2, 3] # bad for elem in arr do puts elem end # good arr.each  |elem| puts elem > 

    Использование цикла for, согласно официальному стилю Ruby, не приветствуется, а вместо него следует использовать конструкцию .each . Позиция Шоу состоит в том, что изучающие языки программирования должны изучать не только идиомы конкретного языка программирования, но и альтернативные способы кодирования — это позволяет избежать индоктринации облегчает переход на другие языки.

    См. также

    Ссылки

    • C++ programming idioms (англ.) в Wikibooks.
    • Moshe Zadka, Idioms and Anti-Idioms in Python (англ.)

    Примечания

    1. Zed A. Shaw, Programming Languages Have Social Mores Not Idioms
    2. Ruby Styleguide (англ.)
    • Концепции языков программирования

    Идиома (программирование)

    Идиома программирования — устойчивый способ выражения некоторой составной конструкции в одном или нескольких языках программирования. Идиома является шаблоном решения задачи, записи алгоритма или структуры данных путём комбинирования встроенных элементов языка.

    Идиому можно считать самым низкоуровневым шаблоном проектирования, применяемым на стыке проектирования и кодирования на языке программирования. Идиома предписывает конкретный способ реализации определённых деталей и отношений между ними средствами конкретного языка. Набор идиом зависит от языка программирования, и одна и та же идиома может выглядеть в двух разных языках по-разному, либо в ней может не быть надобности в одном из них.

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

    Связанные понятия

    По одной из классификаций, языки программирования неформально делятся на сильно и слабо типизированные (англ. strongly and weakly typed), то есть обладающие сильной или слабой системой типов. Эти термины не являются однозначно трактуемыми, и чаще всего используются для указания на достоинства и недостатки конкретного языка. Существуют более конкретные понятия, которые и приводят к называнию тех или иных систем типов «сильными» или «слабыми».

    Объектами первого класса (англ. first-class object, first-class entity, first-class citizen) в контексте конкретного языка программирования называются элементы, которые могут быть переданы как параметр, возвращены из функции, присвоены переменной.

    Примитивный (встроенный, базовый) тип — тип данных, предоставляемый языком программирования как базовая встроенная единица языка.

    Мона́да — это абстракция линейной цепочки связанных вычислений. Монады позволяют организовывать последовательные вычисления.

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

    Упоминания в литературе

    При рассмотрении языка в качестве одного из маркеров этничности группы не столь существенно действительное положение идиома: язык может служить одним из основных символических маркеров, поддерживающих границы сообщества, однако не представлять собою, с точки зрения внешнего наблюдателя, языка в структурном смысле слова, то есть «не существовать» для лингвиста, иными словами, – не выполнять в сообществе коммуникативной функции. Отмечены сообщества, в которых манифестируемый в качестве символа группы идиом утрачен (как, например, марковский говор [Бахтин, 2001]), однако группа по-прежнему использует его как один из маркеров своих границ. С точки зрения их роли в конструировании идентичности идиомы, подобные марковскому говору, функционально не отличаются от полноценных языков.

    Мы поддерживаем следующие рассуждения Дж. Люгера: "…понимание естественного языка включает куда больше, чем разбор предложений на индивидуальные части речи и поиск значений слов в словаре. Оно базируется на обширном фоновом знании о предмете беседы и идиомах, используемых в этой области, так же, как и на способности применять общее контекстуальное знание для понимания недомолвок и неясностей, присущих человеческой речи. Задача сбора и организации этого фонового знания, чтобы его можно было применить к осмысливанию языка, составляет значительную проблему в автоматизации понимания естественного языка. Разработано множество методов структурирования семантических значений. Но, из-за огромных объемов знаний, требуемых для понимания естественного языка, большая часть работы ведется в хорошо понимаемых специализированных проблемных областях. Методики представления известных специализированных программ слишком просты, чтобы передать семантическую организацию более богатых и сложных предметных областей. Основная часть текущих работ в этой области направлена на поиск формализмов представления, которые должны быть достаточно общими, чтобы применяться в широком круге приложений и уметь адаптироваться к специфичной структуре заданной области. Множество разнообразных методик, большинство из которых являются развитием или модификацией семантических сетей, исследуются с этой целью и используются при разработке программ, способных понимать естественный язык в ограниченных, но достаточно интересных предметных областях. Есть стохастические модели, описывающие совместное использование слов в языке, которые применяются для характеристики как синтаксиса, так и семантики. Далее следует принципиально важный вывод: полное понимание языка на вычислительной основе все же остается далеко за пределами современных возможностей" [264, стр. 47].

    Тезис Ф. де Соссюра «все диахроническое в языке является таковым лишь через речь» [Соссюр 1977:130] за прошедшие сто лет был отвергнут, переосмыслен и снова принят. Множество «обломков прошлого» (по выражению А. А. Потебни) остается в языке в качестве идиом, которые с трудом поддаются описанию в терминах генеративных правил. Эти единицы могут быть рассмотрены как реликты былых состояний или ростки новых явлений, то есть как примеры постоянного языкового развития. Часть таких единиц в результате генерализации формируют то или иное правило, часть – хранится в виде застывших штампов. Представленные ниже исследования синтаксических фразем являются по преимуществу ориентированными на динамические модели в языке, проявляющиеся как на синхронном срезе языка, так и в его развитии. По этой причине целесообразно кратко остановиться на двух подходах, повлиявших на авторов настоящего исследования (обстоятельный обзор теорий языкового изменения можно найти в третьей главе книги [Croft 2000: 42–86]).

    Таким образом, для изучения принципов восприятия и адекватной интерпретации рекламного текста важно иметь представление об образе читателя- потребителя. Адресатами рекламных сообщений являются люди, разные по положению в обществе, образованности, профессии, возрасту, полу, с различной степенью «информированности». «Информированный читатель»1, отвечающий условиям языкового конвенционализма, т.е. он должен быть компетентным носителем языка, на котором составлен текст; в совершенстве владеть семантическим знанием лексических рядов, возможностей словосочетания, идиом, профессионализмов, терминологии и т.п.

    Так, для носителей русского языка очевидным является завершение инициальных частей следующих слого-ритмических комбинаций («под-сол…нух», «под-кач… ка», «под-ли…за»); идиом («домоклов … меч», «ахиллесова … пята», «несолоно … хлебавши»); фразеологических единств и выражений («Ни к селу… ни к городу», «Незваный гость… хуже татарина», «Без труда… не выловишь и рыбку из пруда»). Опыт наших исследований свидетельствует о том, что ребенок с нормальным речевым развитием к трем годам обнаруживает отчетливую способность к прогнозированию окончаний знакомых слов или фраз [Бабина, Сафонкина, 2004]. Подтверждения данному находим, например, в исследованиях С. Н. Цейтлин и М. Б. Елисеевой (1998). В своей работе авторы зафиксировали следующие факты. Мать практикует с сыном (2,5 г.) игру с завершениями стихотворных текстов: «Иго-го – кричит ребенок, значит это – …»; «Вяжет мама длинный шарф, потому что сын ….»; «Он веселая игрушка и зовут его …». Ребенок добавляет: «Аськафонок!» (жеребенок), «Касяф! Зиляф!» (жираф), «Питуська!» (Петрушка) [Цейтлин, Елисеева, 1998, с. 86]. Приведенный пример показывает, что возможность проговаривания слоговых составляющих слова находится у этого ребенка на этапе становления, однако прогнозирование окончаний стихотворных фраз, для которых требуется добавить слова различной слоговой структуры, он реализует без ошибок.

    Для современного научного дискурса в целом характерны две противоречивые тенденции: с одной стороны, повышение значимости работы и авторитета автора за счет корректного изложения анализируемых идей, с другой – стремление обеспечить максимально широкое и комфортное поле обсуждения выдвигаемых идей. Повышение авторитетности работы и в целом осуществляется путем «демонстрации» обезличенности и беспристрастности изложения, использования корректных ссылок, исчерпывающих классификаций, специальной терминологии, включения в работу благодарностей конкретным авторам. Размывание научной терминологии, стремление к перформативности, обращение к специфическому научному юмору и использование модных научных идиом приводит к расширению «поля общения» внутри научного сообщества.

    Помимо фразеологизмов в устной деловой речи используются и профессиональные идиомы: разнести по ведомостям, поднять отчетность, снять с баланса, наработать связи, выйти на потребителя, запустить в работу, расписать сумму и т. д.

    Связанные понятия (продолжение)

    Абстра́ктный тип да́нных (АТД) — это математическая модель для типов данных, где тип данных определяется поведением (семантикой) с точки зрения пользователя данных, а именно в терминах возможных значений, возможных операций над данными этого типа и поведения этих операций.

    Запись — агрегатный тип данных, инкапсулирующий без сокрытия набор значений различных типов.

    Блок (также говорят блок кода, блок команд, блок инструкций) в программировании — это логически сгруппированный набор идущих подряд инструкций в исходном коде программы, является основой парадигмы структурного программирования.

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

    Функции первого класса являются неотъемлемой частью функционального программирования, в котором использование функций высшего порядка является стандартной практикой. Простым примером функции высшего порядка будет функция Map, которая принимает в качестве своих аргументов функцию и список и возвращается список, после применения функции к каждому элементу списка. Чтобы язык программирования поддерживал Map, он должен поддерживать передачу функций как аргумента.

    Вывод типов (англ. type inference) — в программировании возможность компилятора самому логически вывести тип значения у выражения. Впервые механизм вывода типов был представлен в языке ML, где компилятор всегда выводит наиболее общий полиморфный тип для всякого выражения. Это не только сокращает размер исходного кода и повышает его лаконичность, но и нередко повышает повторное использование кода.

    Процеду́рное программи́рование — программирование на императивном языке, при котором последовательно выполняемые операторы можно собрать в подпрограммы, то есть более крупные целостные единицы кода, с помощью механизмов самого языка.

    В информатике типобезопасность (англ. type safety) языка программирования означает безопасность (или надёжность) его системы типов.

    Ленивые вычисления (англ. lazy evaluation, также отложенные вычисления) — применяемая в некоторых языках программирования стратегия вычисления, согласно которой вычисления следует откладывать до тех пор, пока не понадобится их результат. Ленивые вычисления относятся к нестрогим вычислениям. Усовершенствованная модель ленивых вычислений — оптимистичные вычисления — переходит в разряд недетерминированных стратегий вычисления.

    Сопоставление с образцом (англ. Pattern matching) — метод анализа и обработки структур данных в языках программирования, основанный на выполнении определённых инструкций в зависимости от совпадения исследуемого значения с тем или иным образцом, в качестве которого может использоваться константа, предикат, тип данных или иная поддерживаемая языком конструкция.

    Фу́нкция вы́сшего поря́дка — в программировании функция, принимающая в качестве аргументов другие функции или возвращающая другую функцию в качестве результата. Основная идея состоит в том, что функции имеют тот же статус, что и другие объекты данных. Использование функций высшего порядка приводит к абстрактным и компактным программам, принимая во внимание сложность производимых ими вычислений.

    Алгебраи́ческий тип да́нных — в информатике наиболее общий составной тип, представляющий собой тип-сумму из типов-произведений. Алгебраический тип имеет набор конструкторов, каждый из которых принимает на вход значения определённых типов и возвращает значение конструируемого типа. Конструктор представляет собой функцию, которая строит значение своего типа на основе входных значений. Для последующего извлечения этих значений из алгебраического типа используется сопоставление с образцом.

    Пара́метр в программировании — принятый функцией аргумент. Термин «аргумент» подразумевает, что конкретно и какой конкретной функции было передано, а параметр — в каком качестве функция применила это принятое. То есть вызывающий код передает аргумент в параметр, который определен в члене спецификации функции.

    Область видимости (англ. scope) в программировании — часть программы, в пределах которой идентификатор, объявленный как имя некоторой программной сущности (обычно — переменной, типа данных или функции), остаётся связанным с этой сущностью, то есть позволяет посредством себя обратиться к ней. Говорят, что идентификатор объекта «виден» в определённом месте программы, если в данном месте по нему можно обратиться к данному объекту. За пределами области видимости тот же самый идентификатор может быть.

    Синтаксический сахар (англ. syntactic sugar) в языке программирования — это синтаксические возможности, применение которых не влияет на поведение программы, но делает использование языка более удобным для человека.

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

    Динами́ческая типиза́ция — приём, широко используемый в языках программирования и языках спецификации, при котором переменная связывается с типом в момент присваивания значения, а не в момент объявления переменной. Таким образом, в различных участках программы одна и та же переменная может принимать значения разных типов. Примеры языков с динамической типизацией — Smalltalk, Python, Objective-C, Ruby, PHP, Perl, JavaScript, Lisp, xBase, Erlang, Visual Basic.

    Мно́жественное насле́дование — свойство, поддерживаемое частью объектно-ориентированных языков программирования, когда класс может иметь более одного суперкласса (непосредственного класса-родителя), интерфейсы поддерживают множественное наследование во многих языках программирования. Эта концепция является расширением «простого (или одиночного) наследования» (англ. single inheritance), при котором класс может наследоваться только от одного суперкласса.

    Ме́тод в объектно-ориентированном программировании — это функция или процедура, принадлежащая какому-то классу или объекту.

    Императи́вное программи́рование — это парадигма программирования (стиль написания исходного кода компьютерной программы), для которой характерно следующее.

    Тип-сумма (англ. sum type; также Σ-тип, меченое объединение) — конструкция в языках программирования и интуиционистской теории типов, тип данных, построенный как дизъюнктное объединение исходных типов.

    Мо́дульное программи́рование — это организация программы как совокупности небольших независимых блоков, называемых модулями, структура и поведение которых подчиняются определённым правилам. Использование модульного программирования позволяет упростить тестирование программы и обнаружение ошибок. Аппаратно-зависимые подзадачи могут быть строго отделены от других подзадач, что улучшает мобильность создаваемых программ.

    Обобщённое программирование (англ. generic programming) — парадигма программирования, заключающаяся в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание. В том или ином виде поддерживается разными языками программирования. Возможности обобщённого программирования впервые появились в виде дженериков (обобщённых функций) в 1970-х годах в языках Клу и Ада, затем в виде параметрического полиморфизма в ML и его потомках, а затем во многих объектно-ориентированных.

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

    Абстрактное синтаксическое дерево (АСД) — в информатике конечное помеченное ориентированное дерево, в котором внутренние вершины сопоставлены (помечены) с операторами языка программирования, а листья — с соответствующими операндами. Таким образом, листья являются пустыми операторами и представляют только переменные и константы.

    Из-за путаницы с терминологией словом «оператор» в программировании нередко обозначают операцию (англ. operator), см. Операция (программирование).Инстру́кция или опера́тор (англ. statement) — наименьшая автономная часть языка программирования; команда или набор команд. Программа обычно представляет собой последовательность инструкций.

    Декларати́вное программи́рование — это парадигма программирования, в которой задаётся спецификация решения задачи, то есть описывается, что представляет собой проблема и ожидаемый результат. Противоположностью декларативного является императивное программирование, описывающее на том или ином уровне детализации, как решить задачу и представить результат. В общем и целом, декларативное программирование идёт от человека к машине, тогда как императивное — от машины к человеку. Как следствие, декларативные.

    Переменная типа (ти́повая переменная) в языках программирования и теории типов — переменная, которая может принимать значение из множества типов данных.

    Побо́чные эффе́кты (англ. side effects) — любые действия работающей программы, изменяющие среду выполнения (англ. execution environment). Например, к побочным эффектам относятся.

    Интерпретируемый язык программирования — язык программирования, исходный код на котором выполняется методом интерпретации. Классифицируя языки программирования по способу исполнения, к группе интерпретируемых относят языки, в которых операторы программы друг за другом отдельно транслируются и сразу выполняются (интерпретируются) с помощью специальной программы-интерпретатора (что противопоставляется компилируемым языкам, в которых все операторы программы заранее оттранслированы в объектный код.

    Зарезерви́рованное сло́во (или ключево́е сло́во) — в языках программирования слово, имеющее специальное значение. Идентификаторы с такими именами запрещены.

    Полиморфизм в языках программирования и теории типов — способность функции обрабатывать данные разных типов.

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

    При́месь (англ. mix in) — элемент языка программирования (обычно класс или модуль), реализующий какое-либо чётко выделенное поведение. Используется для уточнения поведения других классов, не предназначен для порождения самостоятельно используемых объектов.

    Конста́нта в программировании — способ адресации данных, изменение которых рассматриваемой программой не предполагается или запрещается.

    Низкоуровневый язык программирования (язык программирования низкого уровня) — язык программирования, близкий к программированию непосредственно в машинных кодах используемого реального или виртуального (например, байт-код, Microsoft .NET) процессора. Для обозначения машинных команд обычно применяется мнемоническое обозначение. Это позволяет запоминать команды не в виде последовательности двоичных нулей и единиц, а в виде осмысленных сокращений слов человеческого языка (обычно английских).

    Замыкание (англ. closure) в программировании — функция первого класса, в теле которой присутствуют ссылки на переменные, объявленные вне тела этой функции в окружающем коде и не являющиеся её параметрами. Говоря другим языком, замыкание — функция, которая ссылается на свободные переменные в своей области видимости.

    Паради́гма программи́рования — это совокупность идей и понятий, определяющих стиль написания компьютерных программ (подход к программированию). Это способ концептуализации, определяющий организацию вычислений и структурирование работы, выполняемой компьютером.

    Компилируемый язык программирования — язык программирования, исходный код которого преобразуется компилятором в машинный код и записывается в файл с особым заголовком и/или расширением для последующей идентификации этого файла, как исполняемого операционной системой (в отличие от интерпретируемых языков программирования, чьи программы выполняются программой-интерпретатором).

    В языках программирования объявле́ние (англ. declaration) включает в себя указание идентификатора, типа, а также других аспектов элементов языка, например, переменных и функций. Объявление используется, чтобы уведомить компилятор о существовании элемента; это весьма важно для многих языков (например, таких как Си), требующих объявления переменных перед их использованием.

    Литерал (англ. literal ) — запись в исходном коде компьютерной программы, представляющая собой фиксированное значение. Литералами также называют представление значения некоторого типа данных.

    Контрактное программирование (design by contract (DbC), programming by contract, contract-based programming) — это метод проектирования программного обеспечения. Он предполагает, что проектировщик должен определить формальные, точные и верифицируемые спецификации интерфейсов для компонентов системы. При этом, кроме обычного определения абстрактных типов данных, также используются предусловия, постусловия и инварианты. Данные спецификации называются «контрактами» в соответствии с концептуальной метафорой.

    Абстракция данных — популярная и в общем неверно определяемая техника программирования. Фундаментальная идея состоит в разделении несущественных деталей реализации подпрограммы и характеристик, существенных для корректного её использования. Такое разделение может быть выражено через специальный «интерфейс», сосредотачивающий описание всех возможных применений программы.

    Чистота́ (в отношении языка программирования) — отсутствие побочных эффектов. Язык программирования является чистым в том случае, если все функции в программах этого языка являются чистыми.

    Раскрутка компилятора (англ. bootstrapping — от boot и strap) — метод создания транслятора для некоторого языка программирования, при котором транслятор пишется на том же языке программирования, для трансляции которого создаётся; создание транслятором исполняемых файлов из исходного кода самого транслятора. Используется для переноса трансляторов на новые платформы. Появился в середине 1950-х годов. Позволяет создать транслятор, который генерирует сам себя. Применялся для создания трансляторов многих.

    Что такое идиома в программировании

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

    В случае языка Java к таким идиомам можно отнести создание обработчиков событий элементов пользовательского интерфейса (GUI) в анонимных внутренних классах или форму записи цикла for для итерации по коллекции:

    for (Iterator i = collection.iterator(); i.hasNext(); )

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

    К идиомам относятся и такие практики, как форма сравнения строки с литеральной константой:

    if ("java".equals(languageName))

    Здесь идиома гарантирует нам, что сравнение не приведет к исключению NullPointerException.

    Чтобы приступить к программированию на новом языке программирования, мало изучить его синтаксис, стоит также ознакомиться с принятыми в нем идиомами.

    Подробнее об идиомах в языке Java и о многих других полезных практиках можно прочесть в [11, 12].

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *