Content deleted Content added
Closedmouth (talk | contribs) m Reverted edits by 217.23.230.139 (talk) to last version by 63.170.164.6 |
No edit summary Tags: Manual revert Mobile edit Mobile web edit |
||
(572 intermediate revisions by more than 100 users not shown) | |||
Line 1:
{{Short description|Named container for a particular type of data}}
{{distinguish|Variable (mathematics)}}
{{more citations needed|date=November 2009}}
In [[computer programming]], a '''variable''' is an abstract storage ___location paired with an associated [[symbol|symbolic name]], which contains some known or unknown quantity of [[Data (computer science)|data]] or [[Object (computer science)|object]] referred to as a ''[[value (computer science)|value]]''; or in simpler terms, a variable is a named container for a particular set of bits or [[Data type|type of data]] (like [[Integer (computer science)|integer]], [[Floating-point arithmetic|float]], [[String (computer science)|string]], etc...).{{Sfn|Brookshear|2019|ps=, "high-level programming languages allow locations in
main memory to be referenced by descriptive names rather than by numeric
addresses."|loc="Variables and Data Types"|p=249}} A variable can eventually be associated with or identified by a [[memory address]]. The variable name is the usual way to [[Reference (computer science)|reference]] the stored value, in addition to referring to the variable itself, depending on the context. This separation of name and content allows the name to be used independently of the exact information it represents. The identifier in computer [[source code]] can be [[Name binding|bound]] to a [[Value (computer science)|value]] during [[Run time (program lifecycle phase)|run time]], and the value of the variable may thus change during the course of [[Execution (computing)|program execution]].<ref>{{citation | title=[[Compilers: Principles, Techniques, and Tools]] | date=1986| pages=26–28| bibcode=1986cptt.book.....A| last1=Aho| first1=Alfred V.| last2=Sethi| first2=Ravi| last3=Ullman| first3=Jeffrey D.}}</ref><ref>{{cite book |last=Knuth |first=Donald |date=1997 |title=The Art of Computer Programming |volume=1 |edition=3rd |___location=Reading, Massachusetts |publisher=Addison-Wesley |pages=3–4 |isbn=0-201-89683-4 }}</ref><ref>{{cite web |title=Programming with variables |url=https://www.khanacademy.org/computing/ap-computer-science-principles/programming-101/storing-variables/a/assigning-variables |website=Khan Academy |access-date=23 March 2020}}</ref><ref>{{cite web |title=Scratch for Budding Coders |url=https://cs.harvard.edu/malan/scratch/variables.php |publisher=Harvard |access-date=23 March 2020 |archive-date=23 March 2020 |archive-url=https://web.archive.org/web/20200323124927/https://cs.harvard.edu/malan/scratch/variables.php |url-status=dead }}</ref>
Variables in programming may not directly correspond to the concept of [[Variable (mathematics)|variables in mathematics]]. The latter is [[Abstract and concrete|abstract]], having no reference to a physical object such as storage ___location. The value of a computing variable is not necessarily part of an [[equation]] or [[formula]] as in mathematics. Variables in [[computer programming]] are frequently given long names to make them relatively descriptive of their use, whereas variables in mathematics often have terse, one- or two-character names for brevity in transcription and manipulation.
A variable's storage ___location may be referenced by several different identifiers, a situation known as [[Aliasing (computing)|aliasing]]. Assigning a value to the variable using one of the identifiers will change the value that can be accessed through the other identifiers.
[[compiler (computing)|Compilers]] have to replace variables' symbolic names with the actual locations of the data. While a variable's name, type, and ___location often remain fixed, the data stored in the ___location may be changed during program execution.
==Actions on a variable==
In [[imperative programming|imperative]] [[programming language]]s, values can generally be [[dereference|accessed]] or [[assignment (computer science)|changed]] at any time. In [[pure function|pure]] [[functional programming|functional]] and [[logic programming|logic language]]s, variables are [[free variables and bound variables|bound]] to expressions and keep a single value during their entire [[scope (programming)|lifetime]] due to the requirements of [[referential transparency]]. In imperative languages, the same behavior is exhibited by (named) [[constant (programming)|constant]]s (symbolic constants), which are typically contrasted with (normal) variables.
Depending on the [[type system]] of a programming language, variables may only be able to store a specified [[data type]] (e.g. [[integer (computer science)|integer]] or [[string (computer science)|string]]). Alternatively, a datatype may be associated only with the current value, allowing a single variable to store anything supported by the programming language. Variables are the containers for storing the values.
Variables and scope:
* [[Automatic variable]]s: Each local variable in a function comes into existence only when the [[Function (computer programming)|function]] is called, and disappears when the function is exited. Such variables are known as automatic variables.
* External variables: These are variables that are external to a function and can be accessed by name by any function. These variables remain in existence permanently; rather than appearing and disappearing as functions are called and exited, they retain their values even after the functions that set them have returned.
==Identifiers referencing a variable==
An identifier referencing a variable can be used to access the variable in order to read out the value, or alter the value, or edit other [[Attribute (computing)|attributes]] of the variable, such as access permission, [[Lock (computer science)|locks]], [[Semaphore (programming)|semaphores]], etc.
For instance, a variable might be referenced by the identifier "{{code|total_count}}" and the variable can contain the number 1956. If the same variable is referenced by the identifier "{{code|r}}" as well, and if using this identifier "{{code|r}}", the value of the variable is altered to 2009, then reading the value using the identifier "{{code|total_count}}" will yield a result of 2009 and not 1956.
If a variable is only referenced by a single identifier, that identifier can simply be called ''the name of the variable''; otherwise, we can speak of it as ''one of the names of the variable''. For instance, in the previous example the identifier "{{code|total_count}}" is the name of the variable in question, and "{{code|r}}" is another name of the same variable.
== {{Anchor|Scope and extent|SCOPE-AND-EXTENT}}Scope and extent ==
{{See also|Free variables and bound variables}}
The ''[[Scope (computer science)|scope]]'' of a variable describes where in a program's text the variable may be used, while the ''extent'' (also called ''lifetime'') of a variable describes when in a program's execution the variable has a (meaningful) value. The scope of a variable affects its extent. The scope of a variable is actually a property of the name of the variable, and the extent is a property of the storage ___location of the variable. These should not be confused with ''context'' (also called ''environment''), which is a property of the program, and varies by point in the program's text or execution—see [[Scope (computer science)#Overview|scope: an overview]]. Further, [[object lifetime]] may coincide with variable lifetime, but in many cases is not tied to it.
''Scope'' is
''Extent'', on the other hand, is a runtime ([[Dynamic variable scoping#Dynamic scoping|dynamic]]) aspect of a variable. Each [[Name binding
For space efficiency, a memory space needed for a variable may be allocated only when the variable is first used and freed when it is no longer needed. A variable is only needed when it is in scope,
It is considered good programming practice to make the scope of variables as narrow as feasible so that different parts of a program do not accidentally interact with each other by modifying each other's variables. Doing so also prevents [[action at distance (computer science)|action at a distance]].
Many programming languages employ a reserved value (often named ''[[null
==Typing==
{{Main|Type system}}
{{See also|Datatype}}
In [[static typing|statically
In [[dynamic typing|dynamically
Typing of variables also allows [[type polymorphism|polymorphisms]] to be resolved at compile time. However, this is different from the polymorphism used in object-oriented function calls (referred to as ''[[virtual functions]]'' in [[C++]]) which resolves the call based on the value type as opposed to the supertypes the variable is allowed to have.
Variables often store simple data
==Parameters==
The ''formal parameters'' (or ''formal arguments'') of functions are also referred to as variables. For instance, in this [[Python (programming language)|Python]] code segment,
... return x + 2
...
>>> add_two(5)
7
</syntaxhighlight>
==Memory allocation==
The specifics of variable allocation and the representation of their values vary widely, both among programming languages and among implementations of a given language. Many language implementations allocate space for ''[[local variable]]s'', whose extent lasts for a single function call on the ''[[call stack]]'', and whose memory is automatically reclaimed when the function returns.
Bound variables have values. A value, however, is an abstraction, an idea; in implementation, a value is represented by some ''[[Object (computer science)|data object]]'', which is stored somewhere in computer memory. The program, or the [[runtime environment]], must set aside memory for each data object and, since memory is finite, ensure that this memory is yielded for reuse when the object is no longer needed to represent some variable's value.
Objects allocated from the heap must be reclaimed—especially when the objects are no longer needed. In a [[garbage collection (computer science)|garbage-collected]] language (such as [[C Sharp (programming language)|C#]], [[Java (programming language)|Java]], Python, Golang and [[Lisp (programming language)|Lisp]]), the runtime environment automatically reclaims objects when extant variables can no longer refer to them. In non-garbage-collected languages, such as [[C (programming language)|C]], the program (and the programmer) must explicitly [[malloc|allocate]] memory, and then later free it, to reclaim its memory. Failure to do so leads to [[memory leak]]s, in which the heap is depleted as the program runs,
When a variable refers to a [[data structure]] created dynamically, some of its components may be only indirectly accessed through the variable. In such circumstances, garbage collectors (or analogous program features in languages that lack garbage collectors) must deal with a case where only a portion of the memory reachable from the variable needs to be reclaimed.
==Naming conventions==
{{Main|Naming conventions (programming)}}
{{See also|Identifier (computer languages)|Namespace}}
Unlike their mathematical counterparts, programming variables and constants commonly take multiple-character names, e.g. {{code|COST}} or {{code|total}}. Single-character names are most commonly used only for auxiliary variables; for instance, {{code|i}}, {{code|j}}, {{code|k}} for [[array index]] variables.
Some naming conventions are enforced at the language level as part of the language syntax which involves the format of valid identifiers. In almost all languages, variable names cannot start with a digit (0–9) and cannot contain whitespace characters. Whether or not punctuation marks are permitted in variable names varies from language to language; many languages only permit the [[underscore]] ("_") in variable names and forbid all other punctuation. In some programming languages, [[sigil (computer programming)|sigil]]s (symbols or punctuation) are affixed to variable identifiers to indicate the variable's datatype or scope.
[[Case-sensitivity]] of variable names also varies between languages and some languages require the use of a certain case in naming certain entities;<ref group="note">For example, [[Haskell (programming language)|Haskell]] requires that names of types start with a capital letter.</ref> Most modern languages are case-sensitive; some older languages are not. Some languages reserve certain forms of variable names for their own internal use; in many languages, names beginning with two underscores ("__") often fall under this category.
However, beyond the basic restrictions imposed by a language, the naming of variables is largely a matter of style. At the [[machine code]] level, variable names are not used, so the exact names chosen do not matter to the computer. Thus names of variables identify them, for the rest they are just a tool for programmers to make programs easier to write and understand. Using poorly chosen variable names can make code more difficult to review than non-descriptive names, so names that are clear are often encouraged.<ref name="Choosing good variable names">[http://www.dotcadot.ca/articles/how-not-pick-variables How Not To Pick Variables] {{Webarchive|url=https://web.archive.org/web/20161221163819/http://www.dotcadot.ca/articles/how-not-pick-variables |date=2016-12-21 }}, Retrieved July 11, 2012 [DEAD LINK]</ref><ref name="EWD1044">{{citation | author=Edsger Dijkstra | author-link=Edsger Dijkstra | title = To hell with "meaningful identifiers"! | url = http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1044.html}}</ref>
Programmers often create and adhere to code style guidelines that offer guidance on naming variables or impose a precise naming scheme. Shorter names are faster to type but are less descriptive; longer names often make programs easier to read and the purpose of variables easier to understand. However, extreme verbosity in variable names can also lead to less comprehensible code.
==Variable types (based on lifetime)==
We can classify variables based on their lifetime. The different types of variables are static, stack-dynamic, explicit heap-dynamic, and implicit heap-dynamic. A [[static variable]] is also known as global variable, it is bound to a memory cell before execution begins and remains to the same memory cell until termination. A typical example is the static variables in C and C++. A Stack-dynamic variable is known as local variable, which is bound when the declaration statement is executed, and it is deallocated when the procedure returns. The main examples are local variables in C subprograms and Java methods. Explicit Heap-Dynamic variables are nameless (abstract) memory cells that are allocated and deallocated by explicit run-time instructions specified by the programmer. The main examples are dynamic objects in C++ (via new and delete) and all objects in Java. Implicit Heap-Dynamic variables are bound to heap storage only when they are assigned values. Allocation and release occur when values are reassigned to variables. As a result, Implicit heap-dynamic variables have the highest degree of flexibility. The main examples are some variables in JavaScript, PHP and all variables in APL.
==See also==
{{Portal|Computer programming}}
* [[Control variable (programming)]]
* [[Non-local variable]]
* [[Temporary variable]]
* [[Variable interpolation]]
* [[Scalar (mathematics)]]
==Notes==
{{Reflist|group=note}}
==References==
{{Reflist|colwidth=30em}}
=== Works cited ===
* {{Cite web |last= Brookshear |first= J. Glenn |date=2019 |title=Computer Science: An Overview |url=https://www.r-5.org/files/books/computers/overviews/software/Glenn_Brookshear-Computer_Science_An_Overview-EN.pdf|access-date=2024-04-01}}
{{Data types}}
{{DEFAULTSORT:Variable (Programming)}}
[[Category:Variable (computer
[[Category:
[[Category:Data types]]
[[Category:Type theory]]
|