Как задать имя переменной с помощью переменной
Перейти к содержимому

Как задать имя переменной с помощью переменной

  • автор:

Переменные

JavaScript-приложению обычно нужно работать с информацией. Например:

  1. Интернет-магазин – информация может включать продаваемые товары и корзину покупок.
  2. Чат – информация может включать пользователей, сообщения и многое другое.

Переменные используются для хранения этой информации.

Переменная

Переменная – это «именованное хранилище» для данных. Мы можем использовать переменные для хранения товаров, посетителей и других данных.

Для создания переменной в JavaScript используйте ключевое слово let .

Приведённая ниже инструкция создаёт (другими словами, объявляет) переменную с именем «message»:

let message;

Теперь можно поместить в неё данные (другими словами, определить переменную), используя оператор присваивания = :

let message; message = 'Hello'; // сохранить строку 'Hello' в переменной с именем message

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

let message; message = 'Hello!'; alert(message); // показывает содержимое переменной

Для краткости можно совместить объявление переменной и запись данных в одну строку:

let message = 'Hello!'; // определяем переменную и присваиваем ей значение alert(message); // Hello!

Мы также можем объявить несколько переменных в одной строке:

let user = 'John', age = 25, message = 'Hello';

Такой способ может показаться короче, но мы не рекомендуем его. Для лучшей читаемости объявляйте каждую переменную на новой строке.

Многострочный вариант немного длиннее, но легче для чтения:

let user = 'John'; let age = 25; let message = 'Hello';

Некоторые люди также определяют несколько переменных в таком вот многострочном стиле:

let user = 'John', age = 25, message = 'Hello';

…Или даже с запятой в начале строки:

let user = 'John' , age = 25 , message = 'Hello';

В принципе, все эти варианты работают одинаково. Так что это вопрос личного вкуса и эстетики.

var вместо let

В старых скриптах вы также можете найти другое ключевое слово: var вместо let :

var message = 'Hello';

Ключевое слово var – почти то же самое, что и let . Оно объявляет переменную, но немного по-другому, «устаревшим» способом.

Есть тонкие различия между let и var , но они пока не имеют для нас значения. Мы подробно рассмотрим их в главе Устаревшее ключевое слово «var».

Аналогия из жизни

Мы легко поймём концепцию «переменной», если представим её в виде «коробки» для данных с уникальным названием на ней.

Например, переменную message можно представить как коробку с названием «message» и значением «Hello!» внутри:

Мы можем положить любое значение в коробку.

Мы также можем изменить его столько раз, сколько захотим:

let message; message = 'Hello!'; message = 'World!'; // значение изменено alert(message);

При изменении значения старые данные удаляются из переменной:

Мы также можем объявить две переменные и скопировать данные из одной в другую.

let hello = 'Hello world!'; let message; // копируем значение 'Hello world' из переменной hello в переменную message message = hello; // теперь две переменные содержат одинаковые данные alert(hello); // Hello world! alert(message); // Hello world!

Повторное объявление вызывает ошибку

Переменная может быть объявлена только один раз.

Повторное объявление той же переменной является ошибкой:

let message = "Это"; // повторение ключевого слова 'let' приводит к ошибке let message = "Другое"; // SyntaxError: 'message' has already been declared

Поэтому следует объявлять переменную только один раз и затем использовать её уже без let .

Функциональные языки программирования

Примечательно, что существуют функциональные языки программирования, такие как Scala или Erlang, которые запрещают изменять значение переменной.

В таких языках однажды сохранённое «в коробку» значение остаётся там навсегда. Если нам нужно сохранить что-то другое, язык заставляет нас создать новую коробку (объявить новую переменную). Мы не можем использовать старую переменную.

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

Имена переменных

В JavaScript есть два ограничения, касающиеся имён переменных:

  1. Имя переменной должно содержать только буквы, цифры или символы $ и _ .
  2. Первый символ не должен быть цифрой.

Примеры допустимых имён:

let userName; let test123;

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

Самое интересное – знак доллара ‘$’ и подчёркивание ‘_’ также можно использовать в названиях. Это обычные символы, как и буквы, без какого-либо особого значения.

Эти имена являются допустимыми:

let $ = 1; // объявили переменную с именем "$" let _ = 2; // а теперь переменную с именем "_" alert($ + _); // 3

Примеры неправильных имён переменных:

let 1a; // не может начинаться с цифры let my-name; // дефис '-' не разрешён в имени

Регистр имеет значение

Переменные с именами apple и APPLE – это две разные переменные.

Нелатинские буквы разрешены, но не рекомендуются

Можно использовать любой язык, включая кириллицу или даже иероглифы, например:

let имя = '. '; let 我 = '. ';

Технически здесь нет ошибки, такие имена разрешены, но есть международная традиция использовать английский язык в именах переменных. Даже если мы пишем небольшой скрипт, у него может быть долгая жизнь впереди. Людям из других стран, возможно, придётся прочесть его не один раз.

Зарезервированные имена

Существует список зарезервированных слов, которые нельзя использовать в качестве имён переменных, потому что они используются самим языком.

Например: let , class , return и function зарезервированы.

Приведённый ниже код даёт синтаксическую ошибку:

let let = 5; // нельзя назвать переменную "let", ошибка! let return = 5; // также нельзя назвать переменную "return", ошибка!

Создание переменной без использования use strict

Обычно нам нужно определить переменную перед её использованием. Но в старые времена было технически возможно создать переменную простым присвоением значения без использования let . Это все ещё работает, если мы не включаем use strict в наших файлах, чтобы обеспечить совместимость со старыми скриптами.

// заметка: "use strict" в этом примере не используется num = 5; // если переменная "num" раньше не существовала, она создаётся alert(num); // 5

Это плохая практика, которая приводит к ошибке в строгом режиме:

"use strict"; num = 5; // ошибка: num is not defined

Константы

Чтобы объявить константную, то есть, неизменяемую переменную, используйте const вместо let :

const myBirthday = '18.04.1982';

Переменные, объявленные с помощью const , называются «константами». Их нельзя изменить. Попытка сделать это приведёт к ошибке:

const myBirthday = '18.04.1982'; myBirthday = '01.01.2001'; // ошибка, константу нельзя перезаписать!

Если программист уверен, что переменная никогда не будет меняться, он может гарантировать это и наглядно донести до каждого, объявив её через const .

Константы в верхнем регистре

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

Названия таких констант пишутся с использованием заглавных букв и подчёркивания.

Например, сделаем константы для различных цветов в «шестнадцатеричном формате»:

const COLOR_RED = "#F00"; const COLOR_GREEN = "#0F0"; const COLOR_BLUE = "#00F"; const COLOR_ORANGE = "#FF7F00"; // . когда нам нужно выбрать цвет let color = COLOR_ORANGE; alert(color); // #FF7F00
  • COLOR_ORANGE гораздо легче запомнить, чем «#FF7F00» .
  • Гораздо легче допустить ошибку при вводе «#FF7F00» , чем при вводе COLOR_ORANGE .
  • При чтении кода COLOR_ORANGE намного понятнее, чем #FF7F00 .

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

Название «константа» просто означает, что значение переменной никогда не меняется. Но есть константы, которые известны до выполнения (например, шестнадцатеричное значение для красного цвета), а есть константы, которые вычисляются во время выполнения сценария, но не изменяются после их первоначального назначения.

const pageLoadTime = /* время, потраченное на загрузку веб-страницы */;

Значение pageLoadTime неизвестно до загрузки страницы, поэтому её имя записано обычными, а не прописными буквами. Но это всё ещё константа, потому что она не изменяется после назначения.

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

Придумывайте правильные имена

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

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

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

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

Пожалуйста, потратьте время на обдумывание правильного имени переменной перед её объявлением. Делайте так, и будете вознаграждены.

Несколько хороших правил:

  • Используйте легко читаемые имена, такие как userName или shoppingCart .
  • Избегайте использования аббревиатур или коротких имён, таких как a , b , c , за исключением тех случаев, когда вы точно знаете, что так нужно.
  • Делайте имена максимально описательными и лаконичными. Примеры плохих имён: data и value . Такие имена ничего не говорят. Их можно использовать только в том случае, если из контекста кода очевидно, какие данные хранит переменная.
  • Договоритесь с вашей командой об используемых терминах. Если посетитель сайта называется «user», тогда мы должны называть связанные с ним переменные currentUser или newUser , а не, к примеру, currentVisitor или newManInTown .

Звучит просто? Действительно, это так, но на практике для создания описательных и кратких имён переменных зачастую требуется подумать. Действуйте.

Повторно использовать или создавать новую переменную?

И последняя заметка. Есть ленивые программисты, которые вместо объявления новых переменных повторно используют существующие.

В результате их переменные похожи на коробки, в которые люди бросают разные предметы, не меняя на них этикетки. Что сейчас находится внутри коробки? Кто знает? Нам необходимо подойти поближе и проверить.

Такие программисты немного экономят на объявлении переменных, но теряют в десять раз больше при отладке.

Дополнительная переменная – это добро, а не зло.

Современные JavaScript-минификаторы и браузеры оптимизируют код достаточно хорошо, поэтому он не создаёт проблем с производительностью. Использование разных переменных для разных значений может даже помочь движку оптимизировать ваш код.

Итого

Мы можем объявить переменные для хранения данных с помощью ключевых слов var , let или const .

  • let – это современный способ объявления.
  • var – это устаревший способ объявления. Обычно мы вообще не используем его, но мы рассмотрим тонкие отличия от let в главе Устаревшее ключевое слово «var» на случай, если это всё-таки вам понадобится.
  • const – похоже на let , но значение переменной не может изменяться.

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

Задачи

Работа с переменными

важность: 2

  1. Объявите две переменные: admin и name .
  2. Запишите строку «Джон» в переменную name .
  3. Скопируйте значение из переменной name в admin .
  4. Выведите на экран значение admin , используя функцию alert (должна показать «Джон»).

В коде ниже каждая строка решения соответствует одному элементу в списке задач.

let admin, name; // можно объявить две переменные через запятую name = "Джон"; admin = name; alert( admin ); // "Джон"

Переменная в имени переменной Python [дубликат]

такие вещи как exec() , globals() , setattr(mod, name, x) очень редко следует использовать. Практически наверняка, чтобы вы не делали, есть лучше для конкретной задачи решение нежели exec вызов. К примеру, почему вы не хотите points список использовать вместо point1, point2, point3, etc переменных? Старайтесь вопросы самодостаточными делать

22 мар 2018 в 13:13

5 ответов 5

Сортировка: Сброс на вариант по умолчанию

Можно и без eval обойтись:

for i in range(6): globals()['num_%s' % i] = i ** 2 print(num_1) # 1 print(num_2) # 4 print(num_3) # 9 print(num_4) # 16 print(num_5) # 25 

PS.

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

d = dict() for i in range(6): d['num_%s' % i] = i ** 2 print(d['num_5']) 

Тоже самое, но с рефакторингом (python3):

d = ': i ** 2 for i in range(6)> print(d['num_5']) 

Отслеживать
ответ дан 22 мар 2018 в 17:00
77.2k 6 6 золотых знаков 58 58 серебряных знаков 126 126 бронзовых знаков

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

i = 'vars' # магия print(str_vars) 

В качестве магии можно использовать exec:

exec('str_%s = 123' % i) 
i = 'vars' exec('str_%s = 123' % i) print(str_vars) 

Определение переменной обязательно

Отслеживать
ответ дан 22 мар 2018 в 12:59
Roman Pertsev Roman Pertsev
455 2 2 серебряных знака 6 6 бронзовых знаков

Спасибо. exec по сути вызывает(ссылается на) переменную, но не определяет ее. Есть ли что-то на подобии следующего: exec(‘str_%s = 123’ % i) = 25?

22 мар 2018 в 13:14

exec не вызывает переменную и не ссылается. exec строит из аргументов строку, а дальше она обрабатывается как самый обычный код. В данном случае на выходе из exec получается str_vars = 123 . После вашего exec(‘str_%s = 123’ % i) = 25 получится str_vars = 123 = 25 что приведет к «инвалид синтакс».

22 мар 2018 в 13:27

Вам не нужно использовать «переменную в имени переменной». Вместо этого вам нужны просто списки. К примеру:

s = ['a', 'b', 'c'] i = 2 print(s[i]) # c 

Использовать exec и eval без особой необходимости — обычно плохая идея.

В вашем предыдущем вопросе я также дал ответ, как реализовать через списки.

Отслеживать
ответ дан 22 мар 2018 в 16:10
49.3k 17 17 золотых знаков 57 57 серебряных знаков 101 101 бронзовый знак

name = "str_" for n in range (5): exec(name + "%s = %d" % (n,n)) 

На выходе будет пять переменных str_0 до str_4 со значениями от 0 до 4.

Как оно работает: exec строит из аргументов строку (как print ), а дальше эта строка обрабатывается как самый обычный код. В данном случае вместо переменных подставляются их значения и получается в первой итерации

str_0 = 0 
str_1 = 1 

Отслеживать
ответ дан 22 мар 2018 в 13:05
26.7k 7 7 золотых знаков 32 32 серебряных знака 49 49 бронзовых знаков

###Описание проблемы: #Введите целое число (выбран ввод пользователем для примера, #чтобы показать что "x" заранее неизвестно) x = input("Введите число 1, 2 или 3: >> ") #В зависимости от ввода пользователя результатом будет соответствующий список list_1 = ['a1', 'a2', 'a3', 'a4'] list_2 = ['b1', 'b2', 'b3', 'b4'] list_3 = ['c1', 'c2', 'c3', 'c4'] if x == "1": res = list_1 elif x == "2": res = list_2 elif x == "3": res = list_3 print(res) #В ходе более гибкого решения (велосипеда) ТС задал Вам вопрос. #Готов снести если не прав. #Все что нужно было, при условии что заранее известны связки #(переменной x и списком), создать обычный словарь: my_dict = < "1": ['a1', 'a2', 'a3', 'a4'], "2": ['b1', 'b2', 'b3', 'b4'], "3": ['c1', 'c2', 'c3', 'c4'] >print(my_dict.get(x)) 

Отслеживать
ответ дан 24 апр 2018 в 13:54
Dmitry Erohin Dmitry Erohin
996 5 5 серебряных знаков 8 8 бронзовых знаков
Для числовых (по сути) индексов не нужен словарь: ideone.com/QhJ1cc
24 апр 2018 в 16:37

Не важно что использовать в качестве контейнера dict или list, я показал что проблема у ТС на этапе проектирования и решается ранним связыванием

Как задать имя переменной с помощью переменной

Для хранения данных в программе в языке C++ используются переменные . Фактически переменная представляет именнованный участок памяти. Переменная имеет тип, имя и значение. Тип определяет, какие именно данные может хранить переменная.

Перед использованием любую переменную надо определить. Синтаксис определения переменной выглядит следующим образом:

тип_переменной имя_переменной;

Именование переменных

Имя переменной последовательность алфавитных-цифровых символов и знака подчеркивания _. При этом имя переменной должно начинаться с алфавитного символа или подчеркивания.

Кроме того, в качестве имени переменной нельзя использовать ключевые слова языке C++, например, for или if . Но таких слов не так много, и по ходу освоения C++ вы соориентируетесь, какие слова являются ключевыми.

Следует отметить, что при этом не рекомендуются следующие именования:

  • имена, которые начинаются с двух подчеркиваний
  • имена, которые начинаются с подчеркивания, за которым идет заглавный алфавитный символ
  • имена в глобальной области (вне функции main), которые начинаются с подчеркивания

Дело в том, что при подобных именах повышается вероятность, что подобные названия будут конфликтовать с именами (например, именами переменных), которые генерирует компилятор или которые определены в подключаемых стандартных модулях C++. Поэтому некоторые вообще не рекомендуют начинать имя с символа подчеркивания

Определение переменной

В общем случае переменная определяется в следующем виде:

тип_переменной имя_переменной;

Например, простейшее определение переменной:

int age;

Здесь определена переменная age, которая имеет тип int . Поскольку определение переменной представляет собой инструкцию, то после него ставится точка с запятой.

Также стоит учитывать, что C++ — регистрозависимый язык, а это значит, что регистр символов имеет большое значение. То есть в следующем коде будут определяться две разные переменные:

int age; int Age;

Поэтому переменная Age не будет представлять то же самое, что и переменная age.

Также нельзя объявить больше одной переменной с одним и тем же именем, например:

int age; int age;

Подобное определение вызовет ошибку на этапе компиляции.

Инициализация

После определения переменной можно присвоить некоторое значение. Присвоение переменной начального значения называется инициализацией . В C++ есть три вида инициализации:

  • Нотация присваивания (assignment notation)
  • Функциональная нотация (functional notation)
  • Инициализация в фигурных скобках (braced initialization)

Рассмотрим все эти виды инициализаций

Нотация присваивания

Суть нотациия присваивания — с помощью оператора присваивания (знак «равно» или =) переменной передаем некоторое значение:

int age; age = 20;

Здесь в качестве значения переменной присваивается число 20. Постоянные значения любого типа, наподобие чисел, символов, строк, такие как 20, 123.456 (дробное число), «A» или «hello», называются литералами . То есть в данном случае переменной присваивается целочисленный литерал 20.

Например, определим в программе переменную и выведем ее значение на консоль:

#include int main() < int age; age = 28; std::cout можно вывести несколько значений на консоль.

После компиляции и запуска скомпилированной программы на консоль будет выведено число 28.

Age = 28

Можно сразу при определении переменной дать ей некоторое начальное значение:

#include int main() < int age = 28; std::coutint age ; // braced initialization

В данном случае переменная будет иметь значение 38.

Функциональная нотация

При функциональной нотации после названия переменной в круглых скобках указывается ее значение:

int age (38); // functional notation

В данном случае переменная будет иметь значение 38.

Во всех трех случаях присваиваемое переменной значение может представлять сложное вычисляемое выражение. Например:

int age1 ; int age2 (22 + 5); int age3 = 22 + 5;

Можно сразу инициализировать несколько переменных:

int age1 , age2 (23), age3 = 24;

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

#include int main()

Здесь переменным age1 и age2, которые представляют тип int , то есть целое число, присваивается дробное значение - 23.5 и 24.5 соответственно. Но в большинстве компиляторов, по крайней мере на момент написания данной статьи, этот код нормально скомпилируется и выполнится. Мы получим следующий вывод:

Age1 = 23 Age2 = 24

Теперь возьмем пример с инициализацией через фигурные скобки:

#include int main() < int age ; std::cout

Здесь переменной age, которая также представляет целое число, также присваивается дробное значение - 22.5. Однако теперь при компиляции многие компиляторы сообщат нам об ошибке. Например, вывод компилятора g++:

hello.cpp: In function 'int main()': hello.cpp:5:15: error: narrowing conversion of '2.25e+1' from 'double' to 'int' [-Wnarrowing] 5 | int age1 ;

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

Инициализация нулем

При инициализации в фигурных скобках можно опустить значение:

int counter <>;

В этом случае переменная будет инициализироваться нулем и фактически будет аналогично коду:

int counter ;

Инициализация по умолчанию

Если переменную не инициализировать, то происходит ее инициализация по умолчанию. И переменная получает некоторое значение по умолчанию, которое зависит от места, где эта переменная определена.

Если переменная, которая представляет встроенный тип (например, тип int), определена внутри функции, то она получает неопределенное значение. Если переменная встроенного типа определена вне функции, то она получает то значение по умолчанию, которое соответствует ее типу. Для числовых типов это число 0. Например:

#include int x; int main() < int y; std::cout  
X = 0 Y = 0

А в Visual Studio отсутствие значения переменной y вызовет ошибку компиляции.

Но в любом случае перед использованием переменной лучше явным образом назначать ей определенное значение, а не полагаться на значение по умолчанию.

Изменение значения

Ключевой особенностью переменных является то, что мы можем изменять их значения:

#include int main()

Консольный вывод программы:

Age1 = 22 Age2 = 23 Age3 = 38

Как задать имя переменной с помощью переменной

bond007in 26 фев 2019, 14:51

Добрый день. Как превратить string в имя переменной?
Например:

public string ИмяПеременной;

bond007in UNIт Сообщения: 92 Зарегистрирован: 20 фев 2014, 12:49

Re: Как задать имя переменной через string

~AvA~ 26 фев 2019, 14:59

Я ничего не понял, давай чуть-чуть по-нормальному попробуем

Есть скрипт, у него есть переменная типа string, этот скрипт висит на каком-то GameObject
Какой-то другой скрипт, получает эту переменную и чего ты хочешь с ней сделать?

Так же было бы неплохо указать, что сейчас происходит? Не компилируется? Какие-то ошибки? Где нормальный скрипт который ты используешь?
Не волнуйся, никто не украдёт твой скирпт, можешь смело его постить вот прям сюда

~AvA~ UNIверсал Сообщения: 396 Зарегистрирован: 17 фев 2015, 13:09

Re: Как задать имя переменной через string

bond007in 26 фев 2019, 15:19

~AvA~ писал(а): Я ничего не понял, давай чуть-чуть по-нормальному попробуем

Есть скрипт, у него есть переменная типа string, этот скрипт висит на каком-то GameObject
Какой-то другой скрипт, получает эту переменную и чего ты хочешь с ней сделать?

Так же было бы неплохо указать, что сейчас происходит? Не компилируется? Какие-то ошибки? Где нормальный скрипт который ты используешь?
Не волнуйся, никто не украдёт твой скирпт, можешь смело его постить вот прям сюда

Да все верно. Нужно обратиться с одного объекта к другому объекта, на котором добавить +1 к int. А имя этой переменной вписывать в поле string. Просто не охото писать для каждого объекта отдельный скрипт который по сути отличается только названием переменной.

bond007in UNIт Сообщения: 92 Зарегистрирован: 20 фев 2014, 12:49

Re: Как задать имя переменной через string

1max1 26 фев 2019, 15:53

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *