Форматированный вывод — это использование специальной функции printf, которая выполняет форматированный вывод информации.
Форматированный вывод: сущность понятия
Под форматированным выводом понимается применение функционального набора или методик общеизвестных библиотек отдельных программных языков, используемых для вывода разных информационных значений, прошедших форматирование по некоторому шаблону.
Такой шаблон задаётся форматной строкой, которая сформирована по определённым законам. Самой известной функцией этого класса, считается функция printf и некоторые её модификации в базовой библиотеке языка Си. Они так же входят в состав основной библиотеки С++ и Objective-C. Различные версии ОС UNIX тоже имеют в своём наборе команду printf, которая также выполняет процедуру форматированного вывода. Аналогом этой функции в старых языках программирования, подобных Фортрану, считается оператор FORMAT. В языках, предках языка Си (это BCPL и B), тоже была функция вывода, которая управлялась строкой. Но только в базовой библиотеке языка Си эта функция приобрела полноценный формат и сопутствующие параметры. Синтаксический набор строки шаблона вывода, которую часто называют строкой форматирования, с течением времени перешёл и в другие программные языки. Обычно, функции вывода этих языков тоже обозначают как printf с различными вариациями и модификациями от этой команды. Отдельные более современные языки программирования, такие как, к примеру, NET, тоже применяют методику вывода, которая управляется строкой форматирования, но используют другой синтаксический набор.
История развития форматированного вывода
Как отмечалось выше, уже Фортран обладал операторами, которые могли выполнить форматированный вывод. В синтаксическом наборе операторов WRITE и PRINT была предусмотрена метка, которая отсылала к оператору FORMAT, который считался неисполняемым и обладал спецификацией формата. Синтаксис спецификации входил в синтаксис оператора, что позволяло компилятору тут же формировать коды, которые фактически выполняют форматирование информации. Это оптимизировало уровень производительности на электронных вычислительных машинах того времени. Но были и заметные недостатки:
- И так достаточно путаный языковый синтаксис ещё более усложнялся.
- Спецификацию формата нельзя было выполнить при работе программы.
- Спецификация формата отделялась, как текст, от выводящего оператора, что вызывало трудности при сопровождении программ.
Изначальный прототип команды printf, которым считается функция WRITEF, возник в программном языке BCPL в шестидесятых годах прошлого века. Эта функция воспринимает форматную строку, где тип данных подаётся отдельно от непосредственно данных в строковой переменной. Главной задачей разработки форматной строки считалась возможность передачи типов аргументов. Функция WRITEF позволяла упростить вывод данных, так как заменяла сразу целый ряд команд, таких как WRCH (позволяет выводить символ), WRITES (выводит строку), и ещё несколько функций, задающих числовой вывод в разных форматах. То есть применялся один вызов, в котором чередовались текстовые данные с выходными параметрами. В 1969-ом году был разработан язык Би, который стал применять символику printf вместе с простой форматной строчкой, где можно было указать один из трёх типов данных и числа в двух допустимых форматах.
Но когда появился язык Си, в начале семидесятых годов прошлого века, набор функций printf становится главным способом форматированного вывода. Потери времени на расшифровку данных строки форматирования во время каждого обращения к функции разработчики сочли допустимыми, и никакие альтернативы для любого отдельного типа не вошли в стандартную библиотеку. В модификацию языка Си, получившую название C++, была включена последняя версия стандартной библиотеки, включая и весь набор printf. Но при этом появились и альтернативы, которые в стандартной библиотеке C++ назывались набором классов потокового вывода, а также ввода. Операторы вывода этого класса безопасны в плане порчи типа и для них не требуется разбор строк форматирования при выполнении каждого вызова. Но некоторые специалисты по-прежнему используют набор функций printf, поскольку они получаются в более компактной записи при последовательном выводе и смысл используемого формата понятнее.
Язык Objective-C считается утончённой модификацией Си, и при написании программ на этом языке возможно прямо использовать всё семейство функций printf. Кроме языка Си и его модификаций, функции форматирования вывода с синтаксическим набором форматной строки, подобным printf, применяют различные другие программные языки. Например:
- Язык Perl с функцией sprintf.
- Язык Python, в котором есть свой оператор форматирования и функция str.format.
- Язык PHP, в котором в чистом виде есть printf.
- Java с функцией java.io.PrintStream.printf.
И многие другие языки программирования применяют этот метод форматированного вывода. Отдельные современные языки программирования тоже применяют методику вывода, который управляется строкой форматирования, но уже с другим синтаксическим набором. К примеру, в главной библиотеке классов (FCL) языка .Net есть набор методикSystem.String.Format, System.Console.Write и System.Console.WriteLine, отдельные функции, перегрузки которых осуществляют вывод информации согласно данным строки форматирования. Поскольку в исполняемой среде .Net есть подробная информация о типе всех объектов, поэтому можно не выполнять передачу такой информации в строке форматирования. Все функции в главной своей части пишутся как printf, но они имеют префиксы перед ней, которые значат следующее:
- v. Этот префикс позволяет передать функции перечень аргументов.
- f. Выводятся итоги, которые помещаются в параметры функции поток.
Так же есть много других префиксов.