Spec-Zone.ru › Julia 1.8

Переменные

Переменная в Julia — это имя, связанное (или привязанное) к значению. Она полезна, когда нужно сохранить значение (например, полученное после каких-то вычислений) для последующего использования. Например:

# Assign the value 10 to the variable x
julia> x = 10
10

# Doing math with x's value
julia> x + 1
11

# Reassign x's value
julia> x = 1 + 1
2

# You can assign values of other types, like strings of text
julia> x = "Hello World!"
"Hello World!"

Julia предоставляет чрезвычайно гибкую систему именования переменных. Имена переменных регистрозависимые и не имеют семантического значения (то есть язык не будет обращаться с переменными по-разному в зависимости от их имён).

julia> x = 1.0
1.0

julia> y = -3
-3

julia> Z = "My string"
"My string"

julia> customary_phrase = "Hello world!"
"Hello world!"

julia> UniversalDeclarationOfHumanRightsStart = "人人生而自由,在尊严和权利上一律平等。"
"人人生而自由,在尊严和权利上一律平等。"

Разрешены имена с использованием Unicode (в кодировке UTF-8):

julia> δ = 0.00001
1.0e-5

julia> 안녕하세요 = "Hello"
"Hello"

В Julia REPL и некоторых других средах редактирования Julia можно вводить многие символы математической нотации Unicode, набирая обратную косую черту, за ней — имя LaTeX-символа, а затем — Tab. Например, имя переменной δ можно ввести, набрав \delta — Tab, или даже α̂⁽²⁾ с помощью \alpha — Tab — \hat — Tab — \^(2) — Tab. (Если вы найдёте символ в чьём-то коде и не знаете, как его набрать, помощь REPL подскажет: просто наберите ? и вставьте символ.)

Julia даже позволяет при необходимости переопределять встроенные константы и функции (хотя это не рекомендуется, чтобы избежать потенциальных путаниц):

julia> pi = 3
3

julia> pi
3

julia> sqrt = 4
4

Однако, если вы попытаетесь переопределить встроенную константу или функцию, уже используемую в программе, Julia выдаст ошибку:

julia> pi
π = 3.1415926535897...

julia> pi = 3
ERROR: cannot assign a value to variable MathConstants.pi from module Main

julia> sqrt(100)
10.0

julia> sqrt = 4
ERROR: cannot assign a value to variable Base.sqrt from module Main

Разрешенные имена переменных

Имена переменных должны начинаться с буквы (A-Z или a-z), нижнего подчеркивания или подмножества кодовых точек Unicode, больших 00A0; в частности, разрешены категории символов Unicode Lu/Ll/Lt/Lm/Lo/Nl (буквы), Sc/So (валюты и другие символы), а также некоторые другие буквенные символы (например, подмножество символов математической нотации Sm). Следующие символы также могут включать ! и цифры (0-9 и другие символы в категориях Nd/No), а также другие кодовые точки Unicode: диакритические знаки и другие знаки изменения (категории Mn/Mc/Me/Sk), некоторые знаки пунктуации-соединители (категория Pc), штрихи и некоторые другие символы.

Операторы, такие как +, также являются допустимыми идентификаторами, но анализируются особым образом. В некоторых контекстах операторы могут использоваться как переменные; например, (+) относится к функции сложения, и (+) = f переназначит её. Большинство инфиксных операторов Unicode (в категории Sm), таких как ⊕, анализируются как инфиксные операторы и доступны для пользовательских методов (например, вы можете использовать const ⊗ = kron для определения ⊗ как инфиксного произведения Кронекера). Операторы также могут иметь знаки изменения, штрихи, нижние и верхние индексы, например, +̂ₐ″ анализируется как инфиксный оператор с тем же приоритетом, что и +. Между оператором, заканчивающимся нижним/верхним индексом буквы, и последующим именем переменной требуется пробел. Например, если +ᵃ — это оператор, то +ᵃx должно быть записано как +ᵃ x, чтобы отличить его от + ᵃx, где ᵃx — имя переменной.

Особый класс имён переменных — это имена, содержащие только символы нижнего подчеркивания. Эти идентификаторы могут только получать значения, но не могут использоваться для присваивания значений другим переменным. Более технически, они могут использоваться только как L-значение, но не как R-значение:

julia> x, ___ = size([2 2; 1 1])
(2, 2)

julia> y = ___
ERROR: syntax: all-underscore identifier used as rvalue

Единственные явно запрещенные имена переменных — это имена встроенных ключевых слов:

julia> else = false
ERROR: syntax: unexpected "else"

julia> try = "No"
ERROR: syntax: unexpected "="

Некоторые символы Unicode считаются эквивалентными в идентификаторах. Различные способы ввода комбинирующих символов Unicode (например, акцентов) рассматриваются как эквивалентные (в частности, идентификаторы Julia нормализуются NFC). Julia также включает в себя несколько нестандартных эквивалентностей для символов, визуально похожих и легко вводимых с помощью некоторых методов ввода. Символы Unicode ɛ (U+025B: маленькая открытая буква е) и µ (U+00B5: знак микро) рассматриваются как эквивалентные соответствующим греческим буквам. Средняя точка · (U+00B7) и греческий интерпункт · (U+0387) оба рассматриваются как математический оператор точки ⋅ (U+22C5). Знак минус − (U+2212) рассматривается как эквивалентный знаку дефиса - (U+002D).

Рекомендации по стилю

Хотя Julia и не накладывает строгих ограничений на допустимые имена, полезно придерживаться следующих соглашений:

  • Имена переменных пишутся строчными буквами.
  • Разделение слов может быть обозначено нижним подчеркиванием ('_'), но использование нижних подчеркиваний не рекомендуется, если это не делает имя сложным для чтения.
  • Имена Type и Module начинаются с заглавной буквы, а разделение слов выполняется с использованием верхнего верблюжьего регистра вместо нижних подчеркиваний.
  • Имена function и macro пишутся строчными буквами без нижних подчеркиваний.
  • Функции, которые записывают данные в свои аргументы, имеют имена, заканчивающиеся на !. Иногда они называются «мутирующими» или «рабочими на месте» функциями, поскольку они предназначены для изменения аргументов после вызова функции, а не просто для возвращения значения.

Дополнительную информацию о рекомендациях по стилю можно найти в Руководстве по стилю.

© 2009–2022 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and other contributors
Licensed under the MIT License.
https://docs.julialang.org/en/v1.8/manual/variables/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API