In
programming language
A programming language is a system of notation for writing computer programs.
Programming languages are described in terms of their Syntax (programming languages), syntax (form) and semantics (computer science), semantics (meaning), usually def ...
s, name binding is the association of entities (data and/or code) with
identifier
An identifier is a name that identifies (that is, labels the identity of) either a unique object or a unique ''class'' of objects, where the "object" or class may be an idea, person, physical countable object (or class thereof), or physical mass ...
s.
An identifier bound to an
object
Object may refer to:
General meanings
* Object (philosophy), a thing, being, or concept
** Object (abstract), an object which does not exist at any particular time or place
** Physical object, an identifiable collection of matter
* Goal, an a ...
is said to
reference
A reference is a relationship between objects in which one object designates, or acts as a means by which to connect to or link to, another object. The first object in this relation is said to ''refer to'' the second object. It is called a ''nam ...
that object.
Machine language
In computer programming, machine code is computer code consisting of machine language instructions, which are used to control a computer's central processing unit (CPU). For conventional binary computers, machine code is the binaryOn nonb ...
s have no built-in notion of identifiers, but name-object bindings as a service and notation for the programmer is implemented by programming languages. Binding is intimately connected with
scoping
In computer programming, the scope of a name binding (an association of a name to an entity, such as a variable) is the part of a program where the name binding is valid; that is, where the name can be used to refer to the entity. In other parts ...
, as scope determines which names bind to which objects – at which locations in the program code (
lexically) and in which one of the possible execution paths (
temporally).
Use of an identifier in a context that establishes a binding for is called a binding (or defining) occurrence. In all other occurrences (e.g., in
expressions,
assignments, and
subprogram
In computer programming, a function (also procedure, method, subroutine, routine, or subprogram) is a callable unit of software logic that has a well-defined interface and behavior and can be invoked multiple times.
Callable units provide a ...
calls), an identifier stands for what it is bound to; such occurrences are called applied occurrences.
Binding time
* ''Static binding'' (or ''early binding'') is name binding performed before the program is run.
* ''Dynamic binding'' (or ''
late binding
In computing, late binding or dynamic linkage—though not an identical process to dynamically linking imported code libraries—is a computer programming mechanism in which the method being called upon an object, or the function being called ...
'' or ''virtual binding'') is name binding performed as the program is running.
An example of a static binding is a direct
C function call: the function referenced by the identifier cannot change at runtime.
An example of dynamic binding is
dynamic dispatch
In computer science, dynamic dispatch is the process of selecting which implementation of a polymorphic operation (method or function) to call at run time. It is commonly employed in, and considered a prime characteristic of, object-oriented ...
, as in a
C++ virtual method call. Since the specific type of a
polymorphic object is not known before runtime (in general), the executed function is dynamically bound. Take, for example, the following
Java
Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
code:
public void foo(java.util.List list)
List
is an
interface
Interface or interfacing may refer to:
Academic journals
* ''Interface'' (journal), by the Electrochemical Society
* '' Interface, Journal of Applied Linguistics'', now merged with ''ITL International Journal of Applied Linguistics''
* '' Inter ...
, so
list
must refer to a
subtype of it.
list
may reference a
LinkedList
, an
ArrayList
, or some other
subtype of
List
. The method referenced by
add
is not known until runtime. In C, which does not have dynamic binding, a similar goal may be achieved by a call to a function pointed to by a variable or expression of a
function pointer
A function pointer, also called a subroutine pointer or procedure pointer, is a pointer referencing executable code, rather than data. Dereferencing the function pointer yields the referenced function, which can be invoked and passed arguments ...
type, whose value is unknown until it is evaluated at run-time.
Rebinding and mutation
Rebinding should not be confused with mutation or assignment.
* ''Rebinding'' is a change to the ''referencing'' identifier.
* ''Assignment'' is a change to (the referenced) variable.
* ''Mutation'' is a change to an object in memory, possibly referenced by a variable or bound to an identifier.
Consider the following
Java
Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
code:
LinkedList list;
list = new LinkedList();
list.add("foo");
list = null;
The identifier
list
is bound to a variable in the first line; in the second, an object (a linked list of strings) is assigned to the variable. The linked list referenced by the variable is then mutated, adding a string to the list. Next, the variable is assigned the constant
null
. In the last line, the identifier is rebound for the scope of the block. Operations within the block access a new variable and not the variable previously bound to
list
.
Late static
Late static binding is a variant of binding somewhere between static and dynamic binding. Consider the following
PHP
PHP is a general-purpose scripting language geared towards web development. It was originally created by Danish-Canadian programmer Rasmus Lerdorf in 1993 and released in 1995. The PHP reference implementation is now produced by the PHP Group. ...
example:
class A
class B extends A
B::hello();
In this example, the PHP interpreter binds the keyword
self
inside
A::hello()
to class
A
, and so the call to
B::hello()
produces the string "hello". If the semantics of
self::$word
had been based on late static binding, then the result would have been "bye".
Beginning with PHP version 5.3, late static binding is supported.
Specifically, if
self::$word
in the above were changed to
static::$word
as shown in the following block, where the keyword
static
would only be bound at runtime, then the result of the call to
B::hello()
would be "bye":
class A
class B extends A
B::hello();
See also
*
*
References
{{reflist
Programming language concepts
Articles with example Java code
Definition
ja:束縛 (情報工学)
pt:Vinculação de nomes (computação)