HOME

TheInfoList



OR:

In
computer programming Computer programming or coding is the composition of sequences of instructions, called computer program, programs, that computers can follow to perform tasks. It involves designing and implementing algorithms, step-by-step specifications of proc ...
, string interpolation (or variable interpolation, variable substitution, or variable expansion) is the process of evaluating a
string literal string literal or anonymous string is a literal for a string value in the source code of a computer program. Modern programming languages commonly use a quoted sequence of characters, formally "bracketed delimiters", as in x = "foo", where , "foo ...
containing one or more placeholders, yielding a result in which the placeholders are replaced with their corresponding values. It is a form of simple template processing or, in formal terms, a form of quasi-quotation (or logic substitution interpretation). The placeholder may be a variable name, or in some languages an arbitrary expression, in either case evaluated in the current context. String interpolation is an alternative to building string via
concatenation In formal language theory and computer programming, string concatenation is the operation of joining character strings end-to-end. For example, the concatenation of "snow" and "ball" is "snowball". In certain formalizations of concatenati ...
, which requires repeat quoting and unquoting; or substituting into a printf format string, where the variable is far from where it is used. Compare: apples = 4 puts "I have # apples." # string interpolation puts "I have " + String(apples) + " apples." # string concatenation puts "I have %d apples." % apples # format string Two types of literal expression are usually offered: one with interpolation enabled, the other without. Non-interpolated strings may also
escape sequence In computer science, an escape sequence is a combination of characters that has a meaning other than the literal characters contained therein; it is marked by one or more preceding (and possibly terminating) characters. Examples * In C and ma ...
s, in which case they are termed a raw string, though in other cases this is separate, yielding three classes of raw string, non-interpolated (but escaped) string, interpolated (and escaped) string. For example, in Unix shells, single-quoted strings are raw, while double-quoted strings are interpolated. Placeholders are usually represented by a bare or a named sigil (typically $ or %), e.g. $apples or %apples, or with braces, e.g. , sometimes both, e.g. $. In some cases additional formatting specifiers can be used (as in printf), e.g. , and in some cases the formatting specifiers themselves can be interpolated, e.g. . Expansion of the string usually occurs at run time. Language support for string interpolation varies widely. Some languages do not offer string interpolation, instead using concatenation, simple formatting functions, or template libraries. String interpolation is common in many
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 which make heavy use of string representations of data, such as Apache Groovy, Julia, Kotlin,
Perl Perl is a high-level, general-purpose, interpreted, dynamic programming language. Though Perl is not officially an acronym, there are various backronyms in use, including "Practical Extraction and Reporting Language". Perl was developed ...
, PHP, Python,
Ruby Ruby is a pinkish-red-to-blood-red-colored gemstone, a variety of the mineral corundum ( aluminium oxide). Ruby is one of the most popular traditional jewelry gems and is very durable. Other varieties of gem-quality corundum are called sapph ...
, Scala, Swift, Tcl and most
Unix shell A Unix shell is a Command-line_interface#Command-line_interpreter, command-line interpreter or shell (computing), shell that provides a command line user interface for Unix-like operating systems. The shell is both an interactive command languag ...
s.


Algorithms

There are two main types of variable-expanding algorithms for ''variable interpolation'': # ''Replace and expand placeholders'': creating a new string from the original one, by find–replace operations. Find variable reference (placeholder), replace it by its variable value. This algorithm offers no cache strategy. # ''Split and join string'': splitting the string into an array, merging it with the corresponding array of values, then joining items by concatenation. The split string can be cached for reuse.


Security issues

String interpolation, like string concatenation, may lead to security problems. If user input data is improperly escaped or filtered, the system will be exposed to SQL injection, script injection, XML external entity (XXE) injection, and cross-site scripting (XSS) attacks. An SQL injection example: query = " " If ''$id'' is replaced with ''"'; "'', executing this query will wipe out all the data in Table.


Examples


ABAP

DATA(apples) = 4. WRITE , I have apples, . The output will be: I have 4 apples


Bash

apples=4 echo "I have $apples apples" # or echo "I have $ apples" The output will be: I have 4 apples


Boo

apples = 4 print("I have $(apples) apples") # or print("I have apples" % apples) The output will be: I have 4 apples


C#

var apples = 4; var bananas = 3; Console.WriteLine($"I have apples"); Console.WriteLine($"I have fruits"); The output will be: I have 4 apples I have 7 fruits


ColdFusion Markup Language

ColdFusion Markup Language (CFML) script syntax: apples = 4; writeOutput("I have #apples# apples"); Tag syntax: I have #apples# apples The output will be:


CoffeeScript

apples = 4 console.log "I have # apples" The output will be: I have 4 apples


Dart

int apples = 4, bananas = 3; print('I have $apples apples.'); print('I have $ fruits.'); The output will be: I have 4 apples. I have 7 fruits.


Go

, Go does not have string interpolation. There have been some proposals for string interpolation, which have been rejected.


Groovy

In groovy, interpolated strings are known as GStrings: def quality = "superhero" final age = 52 def sentence = "A developer is a $quality if he is $" println sentence The output will be: A developer is a superhero if he is seasoned


Haxe

var apples = 4; var bananas = 3; trace('I have $apples apples.'); trace('I have $ fruits.'); The output will be: I have 4 apples. I have 7 fruits.


Java

Java had interpolated strings as a preview feature in Java 21 and Java 22. You could use the constant STR o
java.lang.StringTemplate
directly. enum Stage record Deploy(UUID image, Stage stage) var deploy=new Deploy(UUID.randomUUID(), Stage.test) STR."Installing \ on Stage \ ..." var deploy=new Deploy(UUID.randomUUID(), Stage.prod) STR."Installing \ on Stage \ ..." They were removed in Java 23 due to design issues.


JavaScript

JavaScript JavaScript (), often abbreviated as JS, is a programming language and core technology of the World Wide Web, alongside HTML and CSS. Ninety-nine percent of websites use JavaScript on the client side for webpage behavior. Web browsers have ...
, as of the
ECMAScript ECMAScript (; ES) is a standard for scripting languages, including JavaScript, JScript, and ActionScript. It is best known as a JavaScript standard intended to ensure the interoperability of web pages across different web browsers. It is stan ...
2015 (ES6) standard, supports string interpolation using backticks ``. This feature is called ''template literals''. Here is an example: const apples = 4; const bananas = 3; console.log(`I have $ apples`); console.log(`I have $ fruits`); The output will be: I have 4 apples I have 7 fruits Template literals can also be used for multi-line strings: console.log(`This is the first line of text. This is the second line of text.`); The output will be: This is the first line of text. This is the second line of text.


Julia

apples = 4 bananas = 3 print("I have $apples apples and $bananas bananas, making $(apples + bananas) pieces of fruit in total.") The output will be: I have 4 apples and 3 bananas, making 7 pieces of fruit in total.


Kotlin

val quality = "superhero" val apples = 4 val bananas = 3 val sentence = "A developer is a $quality. I have $ fruits" println(sentence) The output will be: A developer is a superhero. I have 7 fruits


Nemerle

def apples = 4; def bananas = 3; Console.WriteLine($"I have $apples apples."); Console.WriteLine($"I have $(apples + bananas) fruit."); It also supports advanced formatting features, such as: def fruit = apple", "banana" Console.WriteLine($<#I have ..$(fruit; "\n"; f => f + "s")#>); The output will be: apples bananas


Nim

Nim provides string interpolation via the strutils module. Formatted string literals inspired by Python F-string are provided via the strformat module, the strformat macro verifies that the format string is well-formed and well-typed, and then are expanded into Nim source code at compile-time. import strutils, strformat var apples = 4 var bananas = 3 echo "I have $1 apples".format(apples) echo fmt"I have apples" echo fmt"I have fruits" # Multi-line echo fmt""" I have apples""" # Debug the formatting echo fmt"I have apples" # Custom openChar and closeChar characters echo fmt("I have (apples) ", '(', ')') # Backslash inside the formatted string literal echo fmt"""""" The output will be: I have 4 apples I have 4 apples I have 7 fruits I have 4 apples I have apples=4 apples I have 4 yep ope


Nix

let numberOfApples = "4"; in "I have $ apples" The output will be: I have 4 apples


ParaSail

const Apples := 4 const Bananas := 3 Println ("I have `(Apples) apples.\n") Println ("I have `(Apples+Bananas) fruits.\n") The output will be: I have 4 apples. I have 7 fruits.


Perl

my $apples = 4; my $bananas = 3; print "I have $apples apples.\n"; print "I have @ fruit.\n"; # Uses the Perl array (@) interpolation. The output will be: I have 4 apples. I have 7 fruit.


PHP

The output will be: There are 5 apples and 3 bananas. I have 5 apples and 3 bananas.


Python

Python supports string interpolation as of version 3.6, referred to as "formatted string literals" or "f-strings". Such a literal begins with an f or F before the opening quote, and uses braces for placeholders: num_apples = 4 num_bananas = 3 print(f'I have apples and bananas') The output will be: I have 4 apples and 3 bananas


Ruby / Crystal

apples = 4 puts "I have # apples" # Format string applications for comparison: puts "I have %s apples" % apples puts "I have % apples" % The output will be: I have 4 apples


Rust

Rust does not have general string interpolation, but provides similar functionality via macros, referred to as "Captured identifiers in format strings", introduced in version 1.58.0, released 2022-01-13. Rust provides formatting via th
std::fmt
module, which is interfaced with through various macros such a

an

These macros are converted into Rust source code at compile-time, whereby each argument interacts with

The formatter support
positional parametersnamed parametersargument types
defining variou
formatting traits
and capturing identifiers from the environment. let (apples, bananas) = (4, 3); // println! captures the identifiers when formatting: the string itself isn't interpolated by Rust. println!("There are apples and bananas."); The output will be: There are 4 apples and 3 bananas.


Scala

Scala 2.10+ provides a general facility to allow arbitrary processing of a string literal, and supports string interpolation using the included s and f string interpolators. It is also possible to write custom ones or override the standard ones. The f interpolator is a compiler macro that rewrites a format string with embedded expressions as an invocation of String.format. It verifies that the format string is well-formed and well-typed.


The standard interpolators

Scala 2.10+'s string interpolation allows embedding variable references directly in processed string literals. Here is an example: val apples = 4 val bananas = 3 //before Scala 2.10 printf("I have %d apples\n", apples) println("I have %d apples" format apples) //Scala 2.10+ println(s"I have $apples apples") println(s"I have $ fruits") println(f"I have $apples%d apples") The output will be:I have 4 apples


Sciter (tiscript)

In Sciter any function with name starting from $ is considered as interpolating function and so interpolation is customizable and context sensitive: var apples = 4 var bananas = 3 var domElement = ...; domElement.$content(

I have apples

); domElement.$append(

I have fruits

);
Where domElement.$content(

I have apples

);
gets compiled to this: domElement.html = "

I have " + apples.toHtmlString() + " apples

";


Snobol

apples = 4 ; bananas = 3 Output = "I have " apples " apples." Output = "I have " (apples + bananas) " fruits." The output will be: I have 4 apples. I have 7 fruits.


Swift

In Swift, a new String value can be created from a mix of constants, variables, literals, and expressions by including their values inside a string literal. Each item inserted into the string literal is wrapped in a pair of parentheses, prefixed by a backslash. let apples = 4 print("I have \(apples) apples") The output will be: I have 4 apples


Tcl

The Tool Command Language has always supported string interpolation in all quote-delimited strings. set apples 4 puts "I have $apples apples." The output will be: I have 4 apples. In order to actually format – and not simply replace – the values, there is a formatting function. set apples 4 puts ormat "I have %d apples." $apples


TypeScript

As of version 1.4,
TypeScript TypeScript (abbreviated as TS) is a high-level programming language that adds static typing with optional type annotations to JavaScript. It is designed for developing large applications and transpiles to JavaScript. It is developed by Micr ...
supports string interpolation using backticks ``. Here is an example: var apples: number = 4; console.log(`I have $ apples`); The output will be: I have 4 apples The console.log function can be used as a printf function. The above example can be rewritten, thusly: var apples: number = 4; console.log("I have %d apples", apples); The output remains the same.


Visual Basic .NET

As of Visual Basic 14, string interpolation is supported in Visual Basic. name = "Tom" Console.WriteLine($"Hello, ") The output will be:


See also

*
Concatenation In formal language theory and computer programming, string concatenation is the operation of joining character strings end-to-end. For example, the concatenation of "snow" and "ball" is "snowball". In certain formalizations of concatenati ...
* Improper input validation * printf format string * Quasi-quotation *
String literal string literal or anonymous string is a literal for a string value in the source code of a computer program. Modern programming languages commonly use a quoted sequence of characters, formally "bracketed delimiters", as in x = "foo", where , "foo ...
* Substitution


Notes

{{Reflist Programming constructs
Interpolation In the mathematics, mathematical field of numerical analysis, interpolation is a type of estimation, a method of constructing (finding) new data points based on the range of a discrete set of known data points. In engineering and science, one ...
Variable (computer science)