П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 3407 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 5956 раз(а).

Учебник HTML.
Просмотров 3201 раз(а).

Руководство по PHP5.
Просмотров 5418 раз(а).

Хостинг через призму DNS.
Просмотров 4017 раз(а).

Подборка текстов стандартных документов.
Просмотров 55706 раз(а).

Учебник PHP - Самоучитель
Просмотров 2994 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 4567 раз(а).

Внешние атаки...
Просмотров 3731 раз(а).

Учебник PHP.
Просмотров 2766 раз(а).

SSI в примерах.
Просмотров 37384 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Руководство пользователя для GNU Awk

7. Выражения

7.7 Выражения присваивания

Присваивание есть выражение, которое записывает новое значение в переменную. Например, присвоим значение один переменной z:

z = 1 После вычисления этого выражения переменная z получит значение один. Старое значение z будет забыто.

Присваивание может также передавать значение цепочки. Например, присвоим значение "this food is good" переменной message:

thing = "food" 
predicate = "good" 
message = "this " 
thing " is "
predicate

(Это также иллюстрирует конкатенацию строк.) Знак `=' называется оператором присваивания. Это простейшая форма оператора, потому что значение операнда справа сохраняется неизменным.

Большинство операторов (сложение, конкатенация и др.) не производят никаких действий кроме вычисления значения. Если значение игнорируется, оператор можно не использовать. Оператор присваивания не такой; он выдает значение, и даже если вы его игнорируете, все равно переменная изменяется. Мы называем это побочным эффектом.

Левый операнд присваивания не обязан быть только переменной (см. раздел 7.3 [Переменные], стр. 79); он может быть также полем (см. раздел 5.4 [Изменение содержимого поля], стр. 42) или элементом массива (см. главу 11 [Массивы в awk], стр. 123). Все они называются lvalues, что значит, что они могут стоять в левой части оператора присваивания. Правосторонний операнд может быть любым выражением; он выдает новое значение, которое присваивание передает в указанную переменную, поле или элемент массива. (Такие значения называются rvalues).

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


foo = 1 print foo foo = "bar" print foo

Когда второе присваивание дает foo строковое значение, тот факт, что прежнее значение было числом, забывается. Цепочка, которая не начинается с цифры, имеет численное значение нуля. После исполнения следующего кода значением foo будет пять:


foo = "a string" foo = foo + 5

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

Присваивание есть выражение, поэтому оно имеет значение, то же самое, которое присваивается. Так, `z = 1' как выражение имеет значение один. Одно из следствий этого есть то, что можно писать кратные присваивания:

x = y = z = 0 присваивает значение 0 всем трем переменным. Оно делает это, так как значение выражения `z = 0', равное нулю, передается в y и затем значение `y = z = 0', которое есть ноль, передается в x.

Можно использовать присваивание всюду, где появляется выражение. Например, можно написать `x != (y = 1)' чтобы присвоить переменной y единицу, а затем проверить, равен ли х единице. Но такой стиль делает программу трудной для чтения; нигде кроме разовых программ, не следует употреблять таких нагромождений присваиваний.

Кроме `=', имеется несколько других операторов присваивания, которые выполняют арифметические действия с старым значением переменной. Например, оператор `+=' вычисляет новое значение, добавляя правостороннее значение к старому значению переменной. Так, следующее присваивание добавляет пять к значению foo:

foo += 5

Это эквивалентно следующему:

foo = foo + 5

Используйте тот вариант, который делает вашу программу более ясной. Имеются ситуации, когда употребление `+=' (или другого оператора присваивания) есть не то же самое, что повторение левого операнда в выражении справа. например:


# Спасибо  Pat Rankin за этот пример
BEGIN -
foo[rand()] += 5 for (x in foo)
print x, foo[x]
bar[rand()] = bar[rand()] + 5 for (x in bar)
print x, bar[x] ""

Индексы при bar будут гарантированно разными , потому что rand будет возвращать разные значения при каждом вызове. (Массивы и функция rand еще не рассматривались. См. главу 11 [Массивы в awk], стр. 123, и см. раздел 2.2 [Встроенные числовые функции], стр. 136). Этот пример иллюстрирует важный факт в отношении операторов присваивания: только выражение слева вычисляется один раз.

То, в каком порядке вычисляются выражения, левое и правое, зависит от реализации. Рассмотрим пример:

i = 1 a[i += 2] = i + 1

Значение a[3] может быть либо 2 либо 4.

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

lvalue += increment
Добавляет increment к значению  lvalue для изменения  lvalue.

lvalue -= decrement
Вычитает  decrement из значения lvalue.

lvalue *= coefficient
Умножает значение lvalue на  coefficient.

lvalue /= divisor
Делит значение  lvalue на  divisor.

lvalue %= modulus
Присваивает lvalue значение ее остатка по modulus.

lvalue ^= power или  lvalue **= power

Возводит lvalue в степень power. (Только оператор `^=' указан в POSIX.) Для максимальной переносимости не употребляйте оператор `**='.

Назад | Вперед
Содержание (общее) | Содержание раздела



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru