Смекни!
smekni.com

книга Основы Perl для БиоИнформатиков (стр. 2 из 8)

4.2.4 Операторы

Следующая строка примера 4-1 сохраняет ДНК в переменной:

$DNA = 'ACGGGAGGACGGGAAAATTACTACGGCATTAGC';

Это очень распространенная и важная вещь, выполняемая в языке программирования, давайте рассмотрим ее не спеша. Вы увидите некоторые базовые особенности Perl и языка программирования в целом. Как раз здесь следует перестать лишь бегло просматривать, а стоит начать действительно читать. Такая строка кода называется оператором. В Perl оператор заканчивается на ; (точка с запятой). Использование ; похоже на использование этого знака для пауз в предложении в английском языке.

Точнее говоря, эта строка кода – оператор присваивания. Его назначение в этой программе - сохранить некоторую ДНК в переменную под названием $DNA. Здесь есть несколько важных моментов, вы сможете узнать о них в следующем разделе.

4.2.4.1 Переменные

Для начала давайте взглянем на переменную $DNA. Это название весьма произвольное. Вы можете подобрать другое название для неё, а программа будет работать также. Например, если вы заменяете две строки :

$DNA = 'ACGGGAGGACGGGAAAATTACTACGGCATTAGC';

print $DNA;

этими строками:

$A_poem_by_Seamus_Heaney =

'ACGGGAGGACGGGAAAATTACTACGGCATTAGC';

print $A_poem_by_Seamus_Heaney;

программа работает точно также – печатает ДНК на экран компьютера. Дело в том, что название для переменных в компьютерной программе дается на ваш собственный выбор. (В рамках обязательных ограничений: в Perl название переменной должно быть составлено из прописных или строчных букв, цифр, и символов подчеркивания. А также первый символ не должен быть цифрой.)

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

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

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

Вы заметили, что переменная $DNA начинается со знака доллара. В Perl такой вид переменой называется скалярной переменной, и эта переменная содержит один элемент данных. Скалярные переменные используются для таких типов данных как строковые или числовые типы (например, строка hello, или числа 25, 6,234, 3,5Е10, -0,8373). Скалярная переменная содержит только один элемент данных в каждый момент.

4.2.4.2. Символьная строка

В примере 4-1 , скалярная переменная $DNA содержит некую ДНК, представленную обычным образом буквами A, C, G, и T. Как говорилось ранее, в компьютерной науке последовательность букв называется символьной строкой. В Perl, чтобы определить символьную строку, нужно заключить её в кавычки. Можно использовать одинарные кавычки, как в примере 4-1, или двойные кавычки. (Вы узнаете их различие немного позже). Таким образом ДНК выглядит так:

'ACGGGAGGACGGGAAAATTACTACGGCATTAGC'

4.2.4.3.Присваивание

В Perl, чтобы присвоить определенное значение переменной используется знак =. Этот знак = называется оператором присваивания. В Примере 4-1, значение 'ACGGGAGGACGGGAAAATTACTACGGCATTAGC'

присваивается переменой $DNA. После присваивания Вы можете использовать название переменной, чтобы получить это значение, например как в операторе print в примере 4-1.

В операторе присваивания важен порядок частей. Значение, присвоенное чему-то, указывается справа от оператора присваивания.

Переменная, которая присваивает значение, всегда слева от оператора присваивания. В справочниках по программированию вы иногда встречаете термины lvalue и rvalue слева или справа от оператора присваивания.

Использование знака = имеет долгую историю в языке программирования. Однако, он может натолкнуть на определенный вывод: например, в математике использование знака = означает равенство двух значений по сторонам от знака. Итак, важно отметить, что в Perl знак = не означает равнозначность. Он присваивает значение переменной (Далее мы увидим, как показать равнозначность).

Итак, чтобы подвести пока итог того, что мы узнали об этом операторе:

$DNA = 'ACGGGAGGACGGGAAAATTACTACGGCATTAGC';

Это оператор присваивания, который присваивает скалярной переменной $DNA значение символьную строку, означающую некую ДНК.

4.2.4.4. Печать

Оператор: print $DNA;

выводит ACGGGAGGACGGGAAAATTACTACGGCATTAGC на экран компьютера. Заметьте, что оператор print работает со скалярными переменными, распечатывая их значение, в этом случае символьную строку, которую содержит переменная $DNA. Позже вы узнаете о печати больше.

4.2.4.5. Выход

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

4.3 Соединение фрагментов ДНК

Сейчас мы сделаем небольшое изменение Примера 4-1, чтобы показать, как связать 2 фрагмента ДНК. Связывание - это присоединение чего-то одного к концу чего-либо другого. Биолог хорошо осознает, что соединение последовательностей ДНК - это обычное задание в биологической лаборатории, например, когда клон вставляется в вектор клетки или при соединении экзона при экспрессии генов. Многие биоинформатические пакеты программ производят такие операции, поэтому выбран следующий пример. Пример 4-2 показывает больше операций, связанных со строками, переменными и операторами печати.

Example 4-2. Соединение фрагментов ДНК

Как вы видите, здесь три переменные $DNA1, $DNA2, $DNA3. Я добавил оператор печати для подстрочного комментария для того, чтобы результаты программы, которые появляются на экране компьютера, были более понятны и не были просто последовательностью фрагментов некоего ДНК.

Вот как выглядит результат примера 4-2:

Here are the original two DNA fragments:

Пример 4-2 очень схож с примером 4-1. Давайте посмотрим на различия. Для начала, оператор печати имеет несколько неясных дополнений:

print $DNA1, "\n";

print $DNA2, "\n\n";

В операторе печати имеются переменные, содержащие, как и ранее, ДНК, но помимо этого ещё запятую и затем "\n" или "\n\n". Это инструкции печатать разделитель строк. Разделитель строк невидим на странице или экране, но указывает компьютеру перейти на начало следующей строки перед последующей печатью.

Один разделитель строки "\n" просто ставит вас на начало следующей строки кода. Две новые строки "\n\n" переходят на следующую строку и потом ставят вас на начало строки, оставляя пустую строку внутри.

Посмотрите на код для Примера 4-2 и убедитесь, что видите действие этих указателей разделителей строк в выходных данных. Пустая строка кода - это строка, где ничего не напечатано. В зависимости от вашей операционной системы это может быть только символ новой строки или перевод страницы и возврат каретки ( в этих случаях, она может быть также названа незаполненной строкой кода), или она может содержать непечатаемый символ пустой строки такие как пробел или символ табуляции. Заметьте, что разделители строк заключены в двойные кавычки, это означает, что они части символьной строки. ( Вот здесь и разница между одинарными и двойными кавычками, о которой упоминалось ранее: "\n" печатает разделитель строки; '\n' печатает \n как есть.)

Обратите внимание на запятую в операторе печати. Запятая разделяет отдельные элементы в списке. Оператор печати печатает все перечисленные элементы. Так вот просто.

Сейчас давайте взглянем на оператор, который соединяет 2 фрагмента ДНК $DNA1, $DNA2 в переменную $DNA3:

$DNA3 = "$DNA1$DNA2";

Присваивание значения $DNA3 – это обычное присваивание значения, как вы видели а Примере 4-1, название переменной, за которой стоит знак = и после него следует значение, которое надо назначить.

Значение справа от оператора присваивания это символьная строка, заключенная в двойные кавычки. Двойные кавычки позволяют переменным в символьной строке заменяться своими значениями. Это называется интерполяцией символьной строки. [2] Таким образом, фактически, символьная строка здесь это всего лишь ДНК переменной $DNA1 за которой следует ДНК переменной "$DNA2. Это конкатенация двух фрагментов ДНК, которая затем присваивается переменной $DNA3.

2 Есть случаи, когда можно добавить фигурные скобки во время интерполяция символьной строки. Дополнительные фигурные скобки, чтобы убедиться, что название переменных не спутаны с какими-то символьными строками в двойных кавычках. Например, если у вас переменная $prefix и вы пытались бы интерполировать его в символьную строку I am $prefixinterested,Perl может не распознать переменную, путая ее с несуществующей переменной $prefixinterested. Но символьная строка I am ${prefix}interested не является двусмысленной для Perl.

После установления значения ДНК переменной $DNA3, вы распечатаете ее, и после следует пустая строка кода.

print "$DNA3\n\n";

Одно из хорошо известных выражений в Perl это «Существует не один способ сделать это!». Таким образом, следующая часть программы показывает другой способ соединения двух символьных строк, используя оператор точку. Оператор точка, когда стоит между двумя символьными строками, создает одну символьную строку, объединяющую 2 исходные символьные строки. Таким образом, следующая кодовая строка показывает использование этого оператора: $DNA3 = $DNA1 . $DNA2;

Оператор на языке программирования содержит какие-либо параметры, в данном случае - символьные строки $DNA1 и $DNA2, и производит действие, возвращая какое-то значение, в данном случае соединенную символьную строку в переменную $DNA3. Самые известные операторы - из арифметики – плюс, минус, умножение, деление – это операторы, которые берут исходные два числа как аргумент и возвращают число как значение.