Переменная в программировании — поименованная, либо адресуемая иным область памяти. Данные, находящиеся в переменной (то есть по данному адресу памяти), называются значением этой переменной.
В процедурном программировании переменная - именованная область в памяти. Иначе говоря, создавая переменную и присваивая ей имя, мы выделяем в оперативной памяти кусочек места под хранение данных в этой переменной, и обращаться к этому кусочку данных мы можем просто по имени переменной, а не по адресу.
Тем не менее, процедурная парадигма - не истина в последней инстанции. Её свойства таковы, что она заставляет нас мыслить в понятиях железа и архитектуры компьютера. Поэтому определения о именованной области памяти достаточно, и из него вытекают остальные свойства переменных. В частности, исполнение программы, написанной в процедурном подходе, можно рассматривать как переход между начальным и конечным состоянием, через некое количество промежуточных состояний. Состояние в таком случае - совокупность значений всех объявленных в программе переменных. Одно этих свойств позволяем нам сделать вот так
int a = 1, b = 3;while (a < 7) { b = b + a; a = b / 2;}
Переменные изменяются во времени и зависят от предыдущих своих значений. Оператор присваивания.
Почему это важно? Потому что такое поведение не является обязательным, строго регламентированным (как может показаться после похода в гyгл). Помимо процедурного подхода существуют, например, функциональный и логический. Эти парадигмы требуют уйти от мышления в рамках понятий железа компьютера, поэтому и переменные там мыслятся по-другому.
Функциональный подход базируется на понятиях лямбда-исчисление и функции высших порядков. Этот подход мыслит программу как некое математическое описание, исчисляемую запись. Переменные при таком подходе мыслятся именно с математической точки зрения. Они зовутся переменными, так как подразумевают некое многообразие значений, которые могут принять, но по факту во время исполнения, получив конкретное значение, становятся константами. Тут нет оператора присваивания в обычном понимании.
Логический подход же позволяет исчислять программы, записанные как естественные логические описания. Он не требует формировать другой взгляд на проблемы, вместо этого позволяет использовать те же самые конструкции, которыми мы мыслим ежедневно.
Рассмотрим на примере языка Prolog. Например, мы можем сказать "Кот - животное, которое мало, пушистое и мяукает. А собака - это пушистик, который гавкает." (это не обязательно должно быть так, но ведь нам ничего не мешает сказать так?) и записать это как:
Переменные в данном случае нужны не для того, чтобы хранить значения. Они определяют "пути" или "каналы", по которым "текут" данные (при чём течь они могу в любую сторону). Они позволяют разобрать комплексный объект на признаки и рассмотреть их. Операция "=" в данном случае - не присваивание, а унификация.
Переменные бывают либо связанные, либо не связанные. Связанные переменные имеют значения и не изменяют его. Если одна из переменных при унификации связана, а другая - нет, то последняя становится связанной со значением первой, и оператор возвращает true. Если обе переменные связанные, то унификация проверяет значения на равенство и возвращает результат сравнения.
Например, такой вызов
cat(animal(X, Y, Z)).
Приведёт к тому, что X = "small", Y = true, Z = "Nya!", а сам предикат cat вернёт true.
Я могу, вызвать и так:
cat(animal(X, true, Z)).
и получу X = "small", Z = "Nya!", а сам предикат cat вернёт true.
А могу и так
cat(animal(_, _, "Wow!"))
и получу в ответе false.
Так работают переменные в логической парадигме.
Вывод: понятие "переменная" в программировании - комплексное и его конкретное представление зависит от парадигмы программировании, в рамках которой оно рассматривается. В процедурном подходе переменная - именованная область памяти компьютера. В функциональном подходе переменная мыслится как математическая переменная со всеми её свойствами. В логическом подходе переменная задать пути преобразования комплексных объектов и задать пути "течения" данных. Объединяет эти взгляды то, что понятие "переменная" тесно связана с понятием "данные".
Переменная в программировании — поименованная, либо адресуемая иным область памяти. Данные, находящиеся в переменной (то есть по данному адресу памяти), называются значением этой переменной.
Объяснение:
Зависит от парадигмы программирования.
В процедурном программировании переменная - именованная область в памяти. Иначе говоря, создавая переменную и присваивая ей имя, мы выделяем в оперативной памяти кусочек места под хранение данных в этой переменной, и обращаться к этому кусочку данных мы можем просто по имени переменной, а не по адресу.
Тем не менее, процедурная парадигма - не истина в последней инстанции. Её свойства таковы, что она заставляет нас мыслить в понятиях железа и архитектуры компьютера. Поэтому определения о именованной области памяти достаточно, и из него вытекают остальные свойства переменных. В частности, исполнение программы, написанной в процедурном подходе, можно рассматривать как переход между начальным и конечным состоянием, через некое количество промежуточных состояний. Состояние в таком случае - совокупность значений всех объявленных в программе переменных. Одно этих свойств позволяем нам сделать вот так
int a = 1, b = 3;while (a < 7) { b = b + a; a = b / 2;}Переменные изменяются во времени и зависят от предыдущих своих значений. Оператор присваивания.
Почему это важно? Потому что такое поведение не является обязательным, строго регламентированным (как может показаться после похода в гyгл). Помимо процедурного подхода существуют, например, функциональный и логический. Эти парадигмы требуют уйти от мышления в рамках понятий железа компьютера, поэтому и переменные там мыслятся по-другому.
Функциональный подход базируется на понятиях лямбда-исчисление и функции высших порядков. Этот подход мыслит программу как некое математическое описание, исчисляемую запись. Переменные при таком подходе мыслятся именно с математической точки зрения. Они зовутся переменными, так как подразумевают некое многообразие значений, которые могут принять, но по факту во время исполнения, получив конкретное значение, становятся константами. Тут нет оператора присваивания в обычном понимании.
Логический подход же позволяет исчислять программы, записанные как естественные логические описания. Он не требует формировать другой взгляд на проблемы, вместо этого позволяет использовать те же самые конструкции, которыми мы мыслим ежедневно.
Рассмотрим на примере языка Prolog. Например, мы можем сказать "Кот - животное, которое мало, пушистое и мяукает. А собака - это пушистик, который гавкает." (это не обязательно должно быть так, но ведь нам ничего не мешает сказать так?) и записать это как:
cat(animal(Size, Fluffy, Sounds)) :- Size="small", Fluffy=true, Sounds="Nya!".dog(animal(_, Fluffy, Sounds)) :- Fluffy=true, Sounds="Wow!"Переменные в данном случае нужны не для того, чтобы хранить значения. Они определяют "пути" или "каналы", по которым "текут" данные (при чём течь они могу в любую сторону). Они позволяют разобрать комплексный объект на признаки и рассмотреть их. Операция "=" в данном случае - не присваивание, а унификация.
Переменные бывают либо связанные, либо не связанные. Связанные переменные имеют значения и не изменяют его. Если одна из переменных при унификации связана, а другая - нет, то последняя становится связанной со значением первой, и оператор возвращает true. Если обе переменные связанные, то унификация проверяет значения на равенство и возвращает результат сравнения.
Например, такой вызов
cat(animal(X, Y, Z)).Приведёт к тому, что X = "small", Y = true, Z = "Nya!", а сам предикат cat вернёт true.
Я могу, вызвать и так:
cat(animal(X, true, Z)).и получу X = "small", Z = "Nya!", а сам предикат cat вернёт true.
А могу и так
cat(animal(_, _, "Wow!"))и получу в ответе false.
Так работают переменные в логической парадигме.
Вывод: понятие "переменная" в программировании - комплексное и его конкретное представление зависит от парадигмы программировании, в рамках которой оно рассматривается. В процедурном подходе переменная - именованная область памяти компьютера. В функциональном подходе переменная мыслится как математическая переменная со всеми её свойствами. В логическом подходе переменная задать пути преобразования комплексных объектов и задать пути "течения" данных. Объединяет эти взгляды то, что понятие "переменная" тесно связана с понятием "данные".