Номер строки
В вычислениях номер строки — это метод, используемый для указания определенной последовательности символов в текстовом файле . Самый распространенный метод присвоения номеров строкам — присвоение каждой строке уникального номера, начиная с 1 для первой строки и увеличиваясь на 1 для каждой последующей строки.
В C языке программирования номер строки исходного кода на единицу больше, чем количество символов новой строки, прочитанных или введенных до этого момента. [1]
Программисты также могли присваивать номера строк операторам старых языков программирования , таких как Fortran , JOSS и BASIC . В Фортране не каждому оператору требовался номер строки, и номера строк не обязательно должны быть последовательными. Номера строк предназначены для ветвления и ссылки с помощью операторов форматирования.
И JOSS, и BASIC сделали номера строк обязательным элементом синтаксиса . Основная причина этого заключалась в том, что в большинстве операционных систем того времени отсутствовали интерактивные текстовые редакторы ; поскольку интерфейс программиста обычно ограничивался редактором строк , номера строк обеспечивали механизм, с помощью которого можно было ссылаться на определенные строки исходного кода для редактирования и с помощью которого программист мог вставить новую строку в определенную точку. Номера строк также предоставляют удобные средства различия между кодом, который необходимо ввести в программу, и командами прямого режима , которые должны выполняться немедленно при вводе пользователем (которые не имеют номеров строк).
Во многом из-за распространенности интерактивного редактирования текста в современных операционных системах номера строк не являются особенностью большинства языков программирования, даже современных Фортрана и Бейсика. [2]
История
[ редактировать ]ФОРТРАН
[ редактировать ]В Фортране , впервые указанном в 1956 году, номера строк использовались для определения шаблонов ввода/вывода, для указания повторяющихся операторов и для условного ветвления. Например: [3]
DIMENSION ALPHA(25), RHO(25)
1) FORMAT(5F12.4)
2) READ 1, ALPHA, RHO, ARG
SUM = 0.0
DO 3 I=1, 25
IF (ARG-ALPHA(I)) 4,3,3
3) SUM = SUM + ALPHA(I)
4) VALUE = 3.14159*RHO(I-1)
PRINT 1, ARG, SUM, VALUE
GO TO 2
Как и ассемблер до него, Фортран не предполагал, что каждая строка должна иметь метку (в данном случае номер строки). Только операторы, на которые есть ссылки в других местах, требовали номера строки:
- Строка 1 определяет шаблон формата для ввода; тот
READ
команда в строке 2 и позжеPRINT
обе команды ссылаются на эту строку. - The
DO
цикл выполняет строку 3. - Арифметический оператор IF переходит к строке 4 при отрицательном значении, к строке 3 при нуле и снова к строке 3 при положительном значении.
Хотя в этом примере номера строк являются последовательными, в самой первой опубликованной «полной, но простой программе [Фортран]» номера строк расположены в последовательности 1, 5, 30, 10, 20, 2. [4]
Номера строк также могут быть присвоены переменным с фиксированной точкой (например, ASSIGN
я TO
n ) для ссылки в последующих присвоенных операторах GO TO (например, GO TO
n,(n1,n2,...nm) ).
КОБОЛ
[ редактировать ]В языке COBOL номера строк задавались первыми шестью символами ( область порядкового номера ) перфокарт . Первоначально это использовалось для облегчения механической сортировки карт, чтобы обеспечить заданную последовательность программного кода после ручной обработки. Номера строк фактически были проигнорированы компилятором.
НАРКОТИК
[ редактировать ]В 1962 году DOPE (Дартмутский эксперимент по упрощенному программированию) стал одним из первых языков программирования, в котором для каждого оператора требовался номер строки и использовался последовательный порядок номеров строк. Номера строк были указаны в качестве пунктов назначения для двух команд: C (операция сравнения, арифметический IF) и T (операция To, GO TO).
ДЖОСС
[ редактировать ]В 1963 году JOSS независимо сделал нумерацию строк обязательными для каждого оператора программы и упорядочил строки в последовательном порядке. JOSS представил идею единого редактора командной строки , который работал бы как интерактивный язык и как редактор программ. Команды, набранные без номера строки, выполнялись немедленно, в том, что JOSS называет «прямым режимом». Если той же строке предшествовал номер строки, она вместо этого копировалась в область хранения программного кода, которую JOSS называл «косвенным режимом».
В отличие от FORTRAN до него или BASIC после него, JOSS требовал, чтобы номера строк были числами с фиксированной точкой, состоящими из пары двузначных целых чисел, разделенных точкой (например, 1,1). Часть номера строки слева от точки называется «страницей» или «частью», а часть справа — «строкой»; например, номер строки 10.12
относится к странице 10, строке 12. Ветви могут ориентироваться либо на страницу, либо на строку внутри страницы. Когда используется более поздний формат, объединенная страница и строка называются «шагом».
Страницы используются для определения подпрограмм , которые возвращаются, когда следующая строка находится на другой странице. Например, если подпрограмма для вычисления квадратного корня числа находится на странице 3, она может иметь три строки кода 3.1, 3.2 и 3.3, и ее можно будет вызвать с помощью Do part 3.
Код вернется к инструкции после Do, когда достигнет следующей строки на другой странице, например, 4.1. Нет необходимости в эквиваленте RETURN
в конце, хотя если требуется досрочный возврат, Done
это выполняет. Пример:
*Routine to ask the user for a positive value and repeat until it gets one 01.10 Demand X as "Enter a positive value greater than zero". 01.20 Done if X>0. 01.30 To step 1.1
БАЗОВЫЙ
[ редактировать ]Представленный в 1964 году, Dartmouth BASIC принял обязательные номера строк, как в JOSS, но сделал их целыми числами, как в FORTRAN. Как было определено изначально, BASIC использовал только номера строк для GOTO
и GOSUB
(перейти к подпрограмме, затем вернуться). Некоторые реализации Tiny BASIC поддерживали числовые выражения вместо констант, а операторы переключения присутствовали на разных диалектах ( ON
GOTO
; ON
GOSUB
; ON ERROR GOTO
).
Номера строк редко использовались где-либо еще. Единственным исключением было разрешение использовать указатель, используемый READ
(который повторялся через DATA
операторы) для установки определенного номера строки с помощью RESTORE
.
1 REM RESTORE COULD BE USED IF A BASIC LACKED STRING ARRAYS
2 DIM M$(9): REM DEFINE LENGTH OF 9 CHARACTERS
5 INPUT "MONTH #?"; M: IF M<1 OR M>12 THEN 5
7 RESTORE 10*M: READ M$: PRINT M$
10 DATA "JANUARY"
20 DATA "FEBRUARY"
30 DATA "MARCH"
...
В первых выпусках Dartmouth BASIC THEN
за ним может следовать только номер строки (для подразумеваемого GOTO ), а не, как в более поздних реализациях, оператор.
Диапазон допустимых номеров строк широко варьировался от реализации к реализации, в зависимости от представления, используемого для хранения двоичного эквивалента номера строки (один или два байта; со знаком или без знака). В то время как Dartmouth BASIC поддерживал числа от 1 до 99999, типичная реализация микрокомпьютера поддерживала числа от 1 до 32767 (16-битное слово со знаком).
Диапазон | Диалект |
---|---|
от 1 до 254 | МИНОЛ |
от 1 до 255 | Примечание к дизайну Tiny BASIC |
от 2 до 255 | Денвер Тайни БЕЙСИК |
от 0 до 999 | УИУК БАЗОВЫЙ |
от 1 до 2045 | ДЕК БЕЙСИК-8 |
от 0 до 32767 | LLL БЕЙСИК, НИБЛ |
от 1 до 32767 | Apple I BASIC , Уровень I BASIC , Palo Alto Tiny BASIC |
от 0 до 65529 | GW-БЕЙСИК , IBM БЕЙСИК |
от 1 до 65535 | Altair 4K BASIC , MICRO BASIC 1.3, 6800 Tiny BASIC, Tiny BASIC Extended |
от 1 до 99999 | Дартмут БЕЙСИК |
от 1 до 999999 | СКЕЛЬБАЛ |
от 0 до 1*10^40-1 | БАЗОВЫЙ 1) |
1) Хотя QBASIC использует структурное программирование и, следовательно, не требует номеров строк, в QBASIC все же можно запускать код с номерами строк.
Номера строк и стиль
[ редактировать ]В этих языках было вопросом стиля программирования , если не прямой необходимостью оставлять промежутки между последовательными номерами строк, т. е. программист использовал бы последовательность (10, 20, 30,...), а не (1, 2, 3, ...). Это позволило программисту вставить строку кода позже. Например, если строка кода между строками 20 и 30 была пропущена, программист мог бы вставить забытую строку в строку с номером 25. Если бы в нумерации не было пробелов, программисту пришлось бы перенумеровать строку 3 и все последующие строки. строк, чтобы вставить новую строку после строки 2. Конечно, если программисту необходимо вставить более девяти дополнительных строк, потребуется перенумерация даже при более редкой нумерации. Однако такое изменение нумерации будет ограничиваться изменением нумерации только одной строки на каждые десять добавленных строк; когда программист обнаруживает, что ему нужно добавить строку между 29 и 30, нужно будет перенумеровать только строку 30, а строку 40 можно оставить без изменений.
Некоторые Бейсики имели Команда RENUM , которая обычно проходит через программу (или определенную ее часть), переназначая номера строк с равными приращениями. Он также перенумерует все ссылки на эти номера строк, чтобы они продолжали работать правильно.
В большой программе, содержащей подпрограммы , каждая подпрограмма обычно начинается с номера строки, достаточно большого, чтобы оставить место для расширения основной программы (и предыдущих подпрограмм). Например, подпрограммы могут начинаться со строк 10000, 20000, 30000 и т. д.
Номера строк и GOTO
[ редактировать ]В «неструктурированных» языках программирования, таких как BASIC , номера строк использовались для указания целей операторов ветвления . Например:
1 S=0: N=-1
2 INPUT "ENTER A NUMBER TO ADD, OR 0 TO END"; I
3 S=S+I: N=N+1: IF I<>0 THEN GOTO 2
4 PRINT "SUM="; S: PRINT "AVERAGE="; S/N
Ветвление в стиле GOTO может привести к созданию спагетти-кода . (См. «Считается вредным» , «Структурированное программирование ».) Даже в некоторых более поздних версиях BASIC, которые все еще требовали нумерации строк, использование GOTO, управляемого номером строки, было постепенно прекращено, когда это возможно, в пользу более чистых конструкций, таких как цикл for и цикл while .
Многие современные языки (включая C и C++ ) включают версию оператора GOTO; однако в этих языках цель GOTO указывается меткой строки, а не номером строки.
Номера строк и синтаксические ошибки
[ редактировать ]Если программист вводит синтаксическую ошибку в программу , компилятор (или интерпретатор ) сообщит программисту, что попытка компилировать (или выполнить) не удалась на данном номере строки. Это значительно упрощает работу программиста по поиску ошибки.
Использование номеров строк для описания местоположения ошибок остается стандартом в современных инструментах программирования, хотя номера строк никогда не требуется указывать вручную. Программа легко подсчитывает количество новых строк в исходном файле и отображает автоматически сгенерированный номер строки в качестве места ошибки. В таких IDE , как Microsoft Visual Studio , Eclipse или Xcode , в которых компилятор обычно интегрирован с текстовым редактором, программист может даже дважды щелкнуть ошибку и перейти непосредственно к строке, содержащей эту ошибку.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «6.10.4 Управление линией» . 30 января 2008 г. Архивировано из оригинала 8 июля 2011 г. Проверено 3 июля 2008 г.
- ^ «Различия между GW-BASIC и QBasic» . 12 мая 2003 г. Проверено 28 июня 2008 г.
- ^ Отдел исследований в области программирования, International Business Machines Corporation (8 апреля 1957 г.). Система автоматического кодирования FORTRAN для IBM 704 EDPM: предварительное руководство оператора (PDF) . стр. 6–37.
{{cite book}}
:|last1=
имеет общее имя ( справка ) - ^ Бэкус, Джон Уорнер ; Бибер, Р.Дж.; Бест, Шелдон Ф.; Гольдберг, Ричард ; Херрик, Харлан Л.; Хьюз, РА; Митчелл, LB; Нельсон, Роберт А.; Натт, Рой ; Сэйр, Дэвид ; Шеридан, Питер Б.; Стерн, Гарольд; Зиллер, Ирвинг (15 октября 1956 г.). Сэйр, Дэвид (ред.). Система автоматического кодирования FORTRAN для IBM 704 EDPM: Справочное руководство программиста (PDF) . Нью-Йорк, США: Отдел прикладных наук и отдел исследований в области программирования, International Business Machines Corporation . п. 46. Архивировано (PDF) из оригинала 4 июля 2022 г. Проверено 4 июля 2022 г. (2+51+1 стр.)