This article needs additional citations for verification .(February 2009) |
This article compares a large number of programming languages by tabulating their data types, their expression, statement, and declaration syntax, and some common operating-system interfaces.
Generally, var, var, or var is how variable names or other non-literal values to be interpreted by the reader are represented. The rest is literal code. Guillemets («
and »
) enclose optional sections. Tab ↹ indicates a necessary (whitespace) indentation.
The tables are not sorted lexicographically ascending by programming language name by default, and that some languages have entries in some tables but not others.
8 bit (byte) | 16 bit (short integer) | 32 bit | 64 bit (long integer) | Word size | Arbitrarily precise (bignum) | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Signed | Unsigned | Signed | Unsigned | Signed | Unsigned | Signed | Unsigned | Signed | Unsigned | ||
Ada [1] | range -2**7 .. 2**7 - 1 [j] | range 0 .. 2**8 - 1 [j] or mod 2**8 [k] | range -2**15 .. 2**15 - 1 [j] | range 0 .. 2**16 - 1 [j] or mod 2**16 [k] | range -2**31 .. 2**31 - 1 [j] | range 0 .. 2**32 - 1 [j] or mod 2**32 [k] | range -2**63 .. 2**63 - 1 [j] | mod 2**64 [k] | Integer [j] | range 0 .. 2**Integer' [j] or mod Integer' [k] | — |
ALGOL 68 (variable-width) | short short int [c] | — | short int [c] | — | int [c] | — | long int [c] | — | int [c] | — | long long int [a] [g] |
bytes and bits | |||||||||||
C (C99 fixed-width) | int8_t | uint8_t | int16_t | uint16_t | int32_t | uint32_t | int64_t | uint64_t | intptr_t [c] | size_t [c] | — |
C++ (C++11 fixed-width) | |||||||||||
C (C99 variable-width) | signed char | unsigned char | short [c] | unsigned short [c] | long [c] | unsigned long [c] | long long [c] | unsigned long long [c] | int [c] | unsigned int [c] | |
C++ (C++11 variable-width) | |||||||||||
Objective-C (Cocoa) | signed char or int8_t | unsigned char or uint8_t | short or int16_t | unsigned short or uint16_t | int or int32_t | unsigned int or uint32_t | long long or int64_t | unsigned long long or uint64_t | NSInteger or long | NSUInteger or unsigned long | |
C# | sbyte | byte | short | ushort | int | uint | long | ulong | IntPtr | UIntPtr | System.Numerics. (.NET 4.0) |
Java | byte | — | char [b] | — | — | — | — | java.math. | |||
Go | int8 | uint8 or byte | int16 | uint16 | int32 | uint32 | int64 | uint64 | int | uint | big.Int |
Rust | i8 | u8 | i16 | u16 | i32 | u32 | i64 | u64 | isize | usize | — |
Swift | Int8 | UInt8 | Int16 | UInt16 | Int32 | UInt32 | Int64 | UInt64 | Int | UInt | |
D | byte | ubyte | short | ushort | int | uint | long | ulong | — | — | BigInt |
Common Lisp [2] | (signed-byte 8) | (unsigned-byte 8) | (signed-byte 16) | (unsigned-byte 16) | (signed-byte 32) | (unsigned-byte 32) | (signed-byte 64) | (unsigned-byte 64) | bignum | ||
Scheme | |||||||||||
ISLISP [3] | bignum | ||||||||||
Pascal (FPC) | shortint | byte | smallint | word | longint | longword | int64 | qword | integer | cardinal | — |
Visual Basic | — | Byte | Integer | — | Long | — | — | — | — | ||
Visual Basic .NET | SByte | Short | UShort | Integer | UInteger | Long | ULong | System.Numerics (.NET 4.0) | |||
FreeBasic | Byte or Integer<8> | UByte or UInteger<8> | Short or Integer<16> | UShort or UInteger<16> | Long or Integer<32> | ULong or UInteger<32> | LongInt or Integer<64> | ULongInt or UInteger<64> | Integer | UInteger | — |
Python 2.x | — | — | — | — | int | — | long | ||||
Python 3.x | — | — | — | — | — | int | |||||
S-Lang | — | — | — | — | — | — | |||||
Fortran | INTEGER [f] | — | INTEGER [f] | — | INTEGER [f] | — | INTEGER [f] | — | |||
PHP | — | — | int [m] | — | int [m] | — | — | [e] | |||
Perl 5 | — [d] | — [d] | — [d] | — [d] | — [d] | Math::BigInt | |||||
Raku | int8 | uint8 | int16 | uint16 | int32 | uint32 | int64 | uint64 | Int | — | |
Ruby | — | — | — | — | Fixnum | — | Bignum | ||||
Erlang [n] | — | — | — | — | integer() | — | integer() [o] | ||||
Scala | Byte | — | Short | Char [l] | Int | — | Long | — | — | — | scala.math.BigInt |
Seed7 | — | — | — | — | — | — | integer | — | — | — | bigInteger |
Smalltalk | — | — | — | — | SmallInteger [i] | — | LargeInteger [i] | ||||
Windows PowerShell | — | — | — | — | — | — | |||||
OCaml | — | — | int32 | — | int64 | — | int or nativeint | open Big_int;; or big_int | |||
F# | sbyte | byte | int16 | uint16 | int32 or int | uint32 | uint64 | nativeint | unativeint | bigint | |
Standard ML | — | Word8.word | — | Int32.int | Word32.word | Int64.int | Word64.word | int | word | LargeInt.int orIntInf.int | |
Haskell (GHC) | «import Int» or Int8 | «import Word» or Word8 | «import Int» or Int16 | «import Word» or Word16 | «import Int» or Int32 | «import Word» or Word32 | «import Int» or Int64 | «import Word» or Word64 | Int | «import Word» or Word | Integer |
Eiffel | INTEGER_8 | NATURAL_8 | INTEGER_16 | NATURAL_16 | INTEGER_32 | NATURAL_32 | INTEGER_64 | NATURAL_64 | INTEGER | NATURAL | — |
COBOL [h] | BINARY-CHAR «SIGNED» | BINARY-CHAR UNSIGNED | BINARY-SHORT «SIGNED» | BINARY-SHORT UNSIGNED | BINARY-LONG «SIGNED» | BINARY-LONG UNSIGNED | BINARY-DOUBLE «SIGNED» | BINARY-DOUBLE UNSIGNED | — | — | — |
Mathematica | — | — | — | — | — | Integer | |||||
Wolfram Language | — | — | — | — | — | Integer |
int shorts
and int lengths
can be used to determine how many short
s and long
s can be usefully prefixed to short int
and long int
. The actual sizes of short int
, int
, and long int
are available as the constants short max int
, max int
, and long max int
etc.short
, int
, long
, and (C99, C++11) long long
, so they are implementation-dependent. In C and C++ short
, long
, and long long
types are required to be at least 16, 32, and 64 bits wide, respectively, but can be more. The int
type is required to be at least as wide as short
and at most as wide as long
, and is typically the width of the word size on the processor of the machine (i.e. on a 32-bit machine it is often 32 bits wide; on 64-bit machines it is sometimes 64 bits wide). C99 and C++11 [ citation needed ] also define the [u]intN_t
exact-width types in the stdint.h header. See C syntax#Integral types for more information. In addition the types size_t
and ptrdiff_t
are defined in relation to the address size to hold unsigned and signed integers sufficiently large to handle array indices and the difference between pointers.n
is provided by the SELECTED_INT_KIND
[4] intrinsic function.--precision "number"
can set precision for long long int
s to the required "number" significant digits. The standard constants long long int width
and long long max int
can be used to determine actual precision.PIC S9999
", for example, would require a signed variable of four decimal digits precision. If specified as a binary field, this would select a 16-bit signed type on most platforms.range 1 .. Integer'Last
) and Natural (range 0 .. Integer'Last
). Short_Short_Integer
(8 bits), Short_Integer
(16 bits) and Long_Integer
(64 bits) are also commonly predefined, but not required by the Ada standard. Runtime checks can be disabled if performance is more important than integrity checks.int
in PHP has the same width as long
type in C has on that system. [c] Single precision | Double precision | Other precision | Processor dependent | |
---|---|---|---|---|
Ada [1] | Float | Long_Float | — | |
ALGOL 68 | real [a] | long real [a] | short real , long long real , etc. [d] | |
C | float [b] | double | long double [f] | |
C++ (STL) | ||||
Objective-C (Cocoa) | CGFloat | |||
C# | float | — | ||
Java | ||||
Go | float32 | float64 | ||
Rust | f32 | f64 | ||
Swift | Float or Float32 | Double or Float64 | Float80 [g] | CGFloat |
D | float | double | real | |
Common Lisp | single-float | double-float | float, short-float, long-float | |
Scheme | ||||
ISLISP | ||||
Pascal (FPC) | single | double | real | |
Visual Basic | Single | Double | — | |
Visual Basic .NET | ||||
Xojo | ||||
Python | — | float | ||
JavaScript | Number [7] | — | ||
S-Lang | ||||
Fortran | REAL(KIND = n) [c] | |||
PHP | float | |||
Perl | ||||
Raku | num32 | num64 | Num | |
Ruby | — | Float | — | |
Scala | Float | Double | ||
Seed7 | — | float | ||
Smalltalk | Float | Double | ||
Windows PowerShell | ||||
OCaml | — | float | — | |
F# | float32 | |||
Standard ML | — | real | ||
Haskell (GHC) | Float | Double | ||
Eiffel | REAL_32 | REAL_64 | ||
COBOL | FLOAT-BINARY-7 [e] | FLOAT-BINARY-34 [e] | FLOAT-SHORT , FLOAT-LONG , FLOAT-EXTENDED | |
Mathematica | — | — | Real |
real shorts
and real lengths
can be used to determine how many short
s and long
s can be usefully prefixed to short real
and long real
. The actual sizes of short real
, real
, and long real
are available as the constants short max real
, max real
and long max real
etc. With the constants short small real
, small real
and long small real
available for each type's machine epsilon.n
is provided by the SELECTED_REAL_KIND
[8] intrinsic function.--precision "number"
can set precision for long long real
s to the required "number" significant digits. The standard constants long long real width
and long long max real
can be used to determine actual precision.double
on many implementations.long double
in C languages.Integer | Single precision | Double precision | Half and Quadruple precision etc. | |
---|---|---|---|---|
Ada [1] | — | Complex [b] | Complex [b] | Complex [b] |
ALGOL 68 | — | compl | long compl etc. | short compl etc. and long long compl etc. |
C (C99) [9] | — | float complex | double complex | — |
C++ (STL) | — | std::complex<float> | std::complex<double> | |
C# | — | — | System.Numerics.Complex (.NET 4.0) | |
Java | — | — | — | |
Go | — | complex64 | complex128 | |
D | — | cfloat | cdouble | |
Objective-C | — | — | — | |
Common Lisp | (complex integer) | (complex single-float) | (complex double-float) | complex |
Scheme | — | |||
Pascal | — | — | ||
Visual Basic | — | — | ||
Visual Basic .NET | — | — | System.Numerics.Complex (.NET 4.0) | |
Perl | Math::Complex | |||
Raku | complex64 | complex128 | Complex | |
Python | complex | — | ||
JavaScript | — | — | ||
S-Lang | — | — | ||
Fortran | COMPLEX(KIND = n) [a] | |||
Ruby | Complex | — | Complex | |
Scala | — | — | — | |
Seed7 | — | — | complex | |
Smalltalk | Complex | Complex | Complex | |
Windows PowerShell | — | — | ||
OCaml | — | — | Complex.t | |
F# | System.Numerics.Complex (.NET 4.0) | |||
Standard ML | — | — | — | |
Haskell (GHC) | — | Complex.Complex Float | Complex.Complex Double | |
Eiffel | — | — | — | |
COBOL | — | — | — | |
Mathematica | Complex | — | — | Complex |
Text | Boolean | Enumeration | Object/Universal | ||
---|---|---|---|---|---|
Character | String [a] | ||||
Ada [1] | Character | String , Bounded_String , Unbounded_String | Boolean | (item1, item2, ...) | tagged null record |
ALGOL 68 | char | string , bytes | bool , bits | — - User defined | — |
C (C99) | char , wchar_t | — | bool [b] | enum «name» { item1, item2, ... }; | void * |
C++ (STL) | «std::»string | ||||
Objective-C | unichar | NSString * | BOOL | id | |
C# | char | string | bool | enum name { item1« = value», item2« = value», ... } | object |
Java | String | boolean | enum name { item1, item2, ... } | Object | |
Go | byte , rune | string | bool | const ( | interface{} |
Rust | char | String | bool | enum name { item1« = value», item2« = value», ... } | std::any::Any |
Swift | Character | String | Bool | enum name { case item1, item2, ... } | Any |
D | char | string | bool | enum name { item1, item2, ... } | std.variant.Variant |
Common Lisp | character | string | boolean | (member item1item2...) | t |
Scheme | |||||
ISLISP | |||||
Pascal (ISO) | char | — | boolean | ( item1, item2, ... ) | — |
Object Pascal (Delphi) | string | variant | |||
Visual Basic | — | String | Boolean | Enum name | [[Variant type|Variant]] |
Visual Basic .NET | Char | Object | |||
Xojo | — | Object or Variant | |||
Python | — [d] | str | bool | from enum import Enum | object |
JavaScript | — [d] | String | Boolean | Object | |
S-Lang | |||||
Fortran | CHARACTER(LEN = *) | CHARACTER(LEN = :), allocatable | LOGICAL(KIND = n) [f] | CLASS(*) | |
PHP | — [d] | string | bool | (type declaration omitted) | |
Perl | — [d] | UNIVERSAL | |||
Raku | Char | Str | Bool | enum name<item1 item2 ...> enum name <<:item1(value) :item2(value) ..>> | Mu |
Ruby | — [d] | String | Object [c] | Object | |
Scala | Char | String | Boolean | object name extends Enumeration { | Any |
Seed7 | char | string | boolean | const type: name is new enum | |
Windows PowerShell | |||||
OCaml | char | string | bool | — [e] | — |
F# | type name = item1 = value|item2 = value|... | obj | |||
Standard ML | — [e] | — | |||
Haskell (GHC) | Char | String | Bool | — [e] | — |
Eiffel | CHARACTER | STRING | BOOLEAN | — | ANY |
COBOL | PIC X | PIC X(string length) or PIC X«X...» | PIC 1«(number of digits)» or PIC 1«1...» | — | OBJECT REFERENCE |
Mathematica | — [d] | String | — |
TrueClass
evaluates to true and everything in FalseClass
evaluates to false.n
is provided by the SELECTED_INT_KIND
[4] intrinsic function.fixed size array | dynamic size array | |||
---|---|---|---|---|
one-dimensional array | multidimensional array | one-dimensional array | multidimensional array | |
Ada [1] | array (<first> ..<last>) of<type> or array (<discrete_type>) of<type> | array (<first1> ..<last1>,<first2> ..<last2>, ...) of<type> or array (<discrete_type1>,<discrete_type2>, ...) of<type> | array (<discrete_type> range <>) of<type> | array (<discrete_type1> range <>, <discrete_type2> range <>, ...) of<type> |
ALGOL 68 | [first:last] or simply: [size] | [first1:last1, first2:last2] or [first1:last1][first2:last2] etc. | flex[first:last] or simply: flex[size] | flex[first1:last1, first2:last2] or flex[first1:last1] |
C (C99) | type name[size] [a] | type name[size1][size2] [a] | type *name or within a block: int n = ...; type name[n] | |
C++ (STL) | «std::»array<type, size> (C++11) | «std::»vector<type> | ||
C# | type[] | type[,,...] | System or System | |
Java | type[] [b] | type[][]... [b] | ArrayList or ArrayList<type> | |
D | type[size] | type[size1][size2] | type[] | |
Go | [size]type | [size1][size2]...type | []type | [][]type |
Rust | [type; size] | [[type; size1]; size2] | Vec<type> | Vec<Vec<type>> |
Swift | [type] or Array<type> | [[type]] or Array<Array<type>> | ||
Objective-C | NSArray | NSMutableArray | ||
JavaScript | — | — | Array [d] | |
Common Lisp | (simple-array type (dimension)) | (simple-array type (dimension1 dimension2)) | (array type (dimension)) | (array type (dimension1 dimension2)) |
Scheme | ||||
ISLISP | ||||
Pascal | array[first..last] of type [c] | array[first1..last1] of array[first2..last2] ... of type [c] or array[first1..last1, first2..last2, ...] of type [c] | — | — |
Object Pascal (Delphi) | array of type | array of array ... of type | ||
Visual Basic | Dim x(last) As type | Dim x(last1, last2,...) As type | ||
Visual Basic .NET | type() | type(,,...) | System or System | |
Python | list | |||
S-Lang | x = type[size]; | x = type[size1, size2, ...]; | ||
Fortran | type :: name(size) | type :: name(size1, size2,...) | type, ALLOCATABLE :: name(:) | type, ALLOCATABLE :: name(:,:,...) |
PHP | array | |||
Perl | ||||
Raku | Array[type] or Array of type | |||
Ruby | x = Array.new(size1){ Array.new(size2) } | Array | ||
Scala | Array[type] | Array[...[Array[type]]...] | ArrayBuffer[type] | |
Seed7 | array type or array [idxType] type | array array type or array [idxType] array [idxType] type | array type or array [idxType] type | array array type or array [idxType] array [idxType] type |
Smalltalk | Array | OrderedCollection | ||
Windows PowerShell | type[] | type[,,...] | ||
OCaml | type array | type array ... array | ||
F# | type [] or type array | type [,,...] | System or System | |
Standard ML | type vector or type array | |||
Haskell (GHC) | x = Array.array (0, size-1) list_of_association_pairs | x = Array.array ((0, 0,...), (size1-1, size2-1,...)) list_of_association_pairs | ||
COBOL | level-number type OCCURS size «TIMES». | one-dimensional array definition... | level-number type OCCURS min-size TO max-size «TIMES» DEPENDING «ON» size. [e] | — |
sizeof
and &
operators), values of array types in C are automatically converted to a pointer of its first argument. See C syntax#Arrays for further details of syntax and pointer operations.type x[]
works in Java, however type[] x
is the preferred form of array declaration.DEPENDING ON
clause in COBOL does not create a true variable length array and will always allocate the maximum size of the array.Simple composite types | Algebraic data types | Unions | ||
---|---|---|---|---|
Records | Tuple expression | |||
Ada [1] | type name is «abstract» «tagged» «limited» [record | — | Any combination of records, unions, and enumerations (as well as references to those, enabling recursive types). | type name (variation : discrete_type) is record |
ALGOL 68 | struct (modename «fieldname», ...); | Required types and operators can be user-defined | union (modename, ...); | |
C (C99) | struct «name» {type name;...}; | — | — | union {type name;...}; |
Objective-C | ||||
C++ | struct «name» {type name;...}; [b] | «std::»tuple<type1..typen> | ||
C# | struct name {type name;...} | (val1, val2, ... ) | — | |
Java | — [a] | |||
JavaScript | — | |||
D | struct name {type name;...} | std.variant.Algebraic!(type,...) | union {type name;...} | |
Go | struct { | |||
Rust | struct name {name: type, ...} | (val1, val2, ... ) | enum name { Foo(types), ...} | union name {name: type, ...} |
Swift | struct name { | («name1:» val1, «name2:» val2, «name3:» val3, ... ) | enum name { case Foo«(types)» case Bar «(types)» ... } | |
Common Lisp | (defstruct name slot-name (slot-name initial-value) (slot-name initial-value :type type) ...) | (cons val1 val2) [c] | ||
Scheme | — | |||
ISLISP | ||||
Pascal | record | — | — | record |
Visual Basic | ||||
Visual Basic .NET | Structure name | (val1, val2, ... ) | ||
Python | — [a] | «(»val1, val2, val3, ... «)» | — | |
S-Lang | struct {name [=value], ...} | |||
Fortran | TYPE name | |||
PHP | — [a] | |||
Perl | — [d] | — | ||
Raku | — [a] | |||
Ruby | OpenStruct.new({:name=>value}) | |||
Scala | case class name(«var» name: type, ...) | (val1, val2, val3, ... ) | abstract class name or abstract class name or a combination of case classes and case objects | |
Windows PowerShell | ||||
OCaml | type name = {«mutable» name : type;...} | «(»val1, val2, val3, ... «)» | type name = Foo «of type» |Bar «of type» |... | — |
F# | ||||
Standard ML | type name = {name : type,...} | (val1, val2, val3, ... ) | datatype name = Foo «of type» |Bar «of type» |... | |
Haskell | data Name = Constr {name :: type,...} | data Name = Foo «types» |Bar «types» |... | ||
COBOL | level-number name type clauses. | — | — | name REDEFINES variable type. |
struct
s in C++ are actually classes, but have default public visibility and are also POD objects. C++11 extended this further, to make classes act identically to POD objects in many more cases.variable | constant | type synonym | |
---|---|---|---|
Ada [1] | identifier : type« := initial_value» [e] | identifier : constant type := final_value | subtype identifier is type |
ALGOL 68 | modename name« := initial_value»; | modename name = value; | mode synonym = modename; |
C (C99) | type name« = initial_value»; | enum{ name = value }; | typedef type synonym; |
Objective-C | |||
C++ | const type name = value; | ||
C# | type name1« = initial_value», name2« = initial_value», ...; or var name = initial_value; | const type name = value, name = value, ...; or readonly type name = value, name = value, ... ; | using synonym = type; |
D | type name« = initial_value»; or auto name = value; | const type name = value; or immutable type name = value; | alias type synonym; |
Java | type name« = initial_value»; | final type name = value; | — |
JavaScript | var name« = initial_value»; orlet name« = initial_value»; (since ECMAScript 2015) | const name = value; (since ECMAScript 2015) | |
Go | var name type« = initial_value» or name := initial_value | const name «type» = value | type synonym type |
Rust [f] | let mut name«: type»« = initial_value»; static mut NAME: type = value; | let name«: type»« = initial_value»; const NAME: type = value; static NAME: type = value; | type synonym = typename; |
Swift | var name «: type»« = initial_value» | let name «: type» = value | typealias synonym = type |
Common Lisp | (defparameter name initial-value) or (defvar name initial-value) | (defconstant name value) | (deftype synonym () 'type) |
Scheme | (define name initial_value) | ||
ISLISP | (defglobal name initial_value) or (defdynamic name initial_value) | (defconstant name value) | — |
Pascal [a] | name: type« = initial_value» | name = value | synonym = type |
Visual Basic | Dim name «As type» | See notes to left. Constants use the same syntax, and:
| |
Visual Basic .NET [10] | The variable declaration syntax of VB.NET is unusually difficult to precisely describe. Given that there exist the identifier suffixes ("modifiers"):
and that
valid declaration statements are of the form
and for which, for each
If | Imports synonym = type | |
Xojo | Dim name «As type»« = initial_value» | — | |
Python | name«: type» = initial_value | — | synonym = type [b] |
CoffeeScript | name = initial_value | ||
S-Lang | name = initial_value; | typedef struct {...} typename | |
Fortran | type :: name | type, PARAMETER :: name = value | |
PHP | $name = initial_value; | define("name", value); | — |
Perl | «my» $name« = initial_value»; [c] | use constant name => value; | |
Raku | «my «type»» $name« = initial_value»; [c] | «my «type»» constant name = value; | ::synonym ::= type |
Ruby | name = initial_value | Name = value | synonym = type [b] |
Scala | var name«: type» = initial_value | val name«: type» = value | type synonym = type |
Windows PowerShell | «[type]» $name = initial_value | — | — |
Bash shell | name=initial_value | — | — |
OCaml | let name« : type ref» = ref value [d] | let name «: type» = value | type synonym = type |
F# | let mutable name «: type» = value | ||
Standard ML | val name «: type ref» = ref value [d] | val name «: type» = value | |
Haskell | «name::type;» name = value | type Synonym = type | |
Forth | VARIABLE name (in some systems use value VARIABLE name instead) | value CONSTANT name | |
COBOL | level-number name type clauses. | «0»1 name CONSTANT «AS» value. | level-number name type clauses «IS» TYPEDEF. |
Mathematica | name=initial_value | — | — |
!
and :=
operators, respectively.let
or let mut
variable and it is never assigned to later, there is an "unused variable" warning. If no value is provided for a const
or static
or static mut
variable, there is an error. There is a "non-upper-case globals" error for non-uppercase const
variables. After it is defined, a static mut
variable can only be assigned to in an unsafe
block or function.if | else if | select case | conditional expression | |
---|---|---|---|---|
Ada [1] | if condition then | if condition1 then | case expression is | (if condition1 then or (case expression is |
Seed7 | if condition then | if condition1 then | case expression of | |
Modula-2 | if condition then | if condition1 then | case expression of | |
ALGOL 68 | if condition then statements «else statements» fi | if condition then statements elif condition then statements fi | case switch in statements, statements«,... out statements» esac | ( condition | valueIfTrue | valueIfFalse ) |
ALGOL 68 (brief form) | ( condition | statements «| statements» ) | ( condition | statements |: condition | statements ) | ( variable | statements,... «| statements» ) | |
APL | :If condition | :If condition | :Select expression | {condition:valueIfTrue ⋄ valueIfFalse} |
C (C99) | if (condition) instructions instructions can be a single statement or a block in the form of: { statements } | if (condition) instructions or if (condition) instructions | switch (variable) { | condition ? valueIfTrue : valueIfFalse |
Objective-C | ||||
C++ (STL) | ||||
D | ||||
Java | ||||
JavaScript | ||||
PHP | ||||
C# | if (condition) instructions
| if (condition) instructions | switch (variable) All non-empty cases must end with a | condition ? valueIfTrue : valueIfFalse |
Windows PowerShell | if (condition) instruction | if (condition) { instructions } | switch (variable) { case1{instructions «break;» } ... «default { instructions }»} | |
Go | if condition {instructions} | if condition {instructions} or switch { | switch variable { | |
Swift | if condition {instructions} | if condition {instructions} | switch variable { | |
Perl | if (condition) {instructions} or unless (notcondition) {instructions} | if (condition) {instructions} or unless (notcondition) {instructions} | use feature "switch"; | condition ? valueIfTrue : valueIfFalse |
Raku | if condition {instructions} or unless notcondition {instructions} | if condition {instructions} | given variable { | condition ?? valueIfTrue !! valueIfFalse |
Ruby | if condition | if condition | case variable | condition ? valueIfTrue : valueIfFalse |
Scala | if (condition) {instructions} | if (condition) {instructions} | expression match { [b] | if (condition) valueIfTrue else valueIfFalse |
Smalltalk | condition ifTrue: | condition ifTrue: trueBlock ifFalse: falseBlock | ||
Common Lisp | (when condition or (unless condition or (if condition | (cond (condition1 instructions) | (case expression | (if test then else) or (cond (test1 value1) (test2 value2) ...)) |
Scheme | (when condition instructions) or (if condition (begin instructions) «(begin instructions)») | (cond (condition1 instructions) (condition2 instructions) ... «(else instructions)») | (case (variable) ((case1) instructions) ((case2) instructions) ... «(else instructions)») | (if condition valueIfTrue valueIfFalse) |
ISLISP | (if condition | (cond (condition1 instructions) | (case expression | (if condition valueIfTrue valueIfFalse) |
Pascal | if condition then begin [c] | if condition then begin [c] | case variable of [c] | |
Visual Basic | If condition Then Single-line, when instructions are instruction1 : instruction2 : ... :If condition Then instructions «Else instructions» | If condition Then Single-line: See note about C-like languages; the Else clause of a single-line If statement can contain another single-line If statement. | Select« Case» variable | IIf(condition, valueIfTrue, valueIfFalse) |
Visual Basic .NET | If(condition, valueIfTrue, valueIfFalse) | |||
Xojo | ||||
Python [a] | if condition : | if condition : | Python 3.10+:match variable: | Python 2.5+:valueIfTrue if condition else valueIfFalse |
S-Lang | if (condition) { instructions } «else { instructions }» | if (condition) { instructions } else if (condition) { instructions } ... «else { instructions }» | switch (variable) { case case1: instructions } { case case2: instructions } ... | |
Fortran | IF (condition) THEN | IF (condition) THEN | SELECT CASE(variable) | |
Forth | condition IF instructions « ELSE instructions» THEN | condition IF instructions ELSE condition IF instructions THEN THEN | value CASE | condition IF valueIfTrue ELSE valueIfFalse THEN |
OCaml | if condition then begin instructions end «else begin instructions end» | if condition then begin instructions end else if condition then begin instructions end ... «else begin instructions end» | match value with [b] | if condition then valueIfTrue else valueIfFalse |
F# | Lightweight syntax mode: Either on a single line or with indentation as shown below: | Lightweight syntax mode: Either on a single line or with indentation as shown below: if condition then Verbose syntax mode: Same as Standard ML. | ||
Standard ML | if condition then «(»instructions «)» | if condition then «(»instructions «)» | case value of [b] | |
Haskell (GHC) | if condition then expression else expression or when condition (do instructions) or unless notcondition (do instructions) | result|condition = expression | case value of { [b] | |
Bash shell | if condition-command; then | if condition-command; then | case "$variable" in | |
CoffeeScript | if condition then expression «else expression» or if condition or expression if condition or unless condition or expression unless condition | if condition then expression else if condition then expression «else expression» or if condition or unless condition | switch expression or switch expression | All conditions are expressions. |
COBOL | IF condition «THEN» [d] | EVALUATE expression «ALSO expression...» | ||
Rust | if condition { | if condition { | match variable { [b] [e] | All conditions are expressions |
if | else if | select case | conditional expression |
END-IF
may be used instead of the period at the end.,
) at the end of a match arm can be omitted after the last match arm, or after any match arm in which the expression is a block (ends in possibly empty matching brackets {}
).while loop | do while loop | (count-controlled) for loop | foreach | |
---|---|---|---|---|
Ada [1] | while condition loop | loop | for index in «reverse» [first .. last | discrete_type] loop | for item of «reverse» iterator loop or (for [all | some] [in | of] [first .. last | discrete_type | iterator] => predicate) [b] |
ALGOL 68 | «for index» «from first» «by increment» «to last» «while condition» do statements od | for key «to upb list» do «typename val=list[key];» statements od | ||
«while condition» | «while statements; condition» | «for index» «from first» «by increment» «to last» do statements od | ||
APL | :While condition | :Repeat | :For var«s» :In list | :For var«s» :InEach list |
C (C99) | instructions can be a single statement or a block in the form of: { statements } while (condition) instructions | do instructions while (condition); | for («type» i = first; i <= last; i++) instructions | — |
Objective-C | for (type item in set) instructions | |||
C++ (STL) | «std::»for_each(start, end, function) Since C++11: for (type item : set) instructions | |||
C# | foreach (type item in set) instructions | |||
Java | for (type item : set) instructions | |||
JavaScript | for (var i = first; i <= last; i++) instructions | Since EcmaScript 2015: [11]
| ||
PHP | foreach (range(first, last) as $i) instructions or for ($i = first; $i <= last; $i++) instructions | foreach (set as item) instructions or foreach (set as key => item) instructions | ||
Windows PowerShell | for ($i = first; $i -le last; $i++) instructions | foreach (item in set) instructions | ||
D | foreach (i; first ... last) instructions | foreach («type» item; set) instructions | ||
Go | for condition { instructions } | for i := first; i <= last; i++ { instructions } | for key, item := range set { instructions } | |
Swift | while condition { instructions } | 2.x:repeat { instructions } while condition 1.x: do { instructions } while condition | for i = first ... last { instructions } or for i = first ..< last+1 { instructions } or for var i = first; i <= last; i++ { instructions } | for item in set { instructions } |
Perl | while (condition) { instructions } or until (notcondition) { instructions } | do { instructions } while (condition) or do { instructions } until (notcondition) | for«each» «$i» (first .. last) { instructions } or for ($i = first; $i <= last; $i++) { instructions } | for«each» «$item» (set) { instructions } |
Raku | while condition { instructions } or until notcondition { instructions } | repeat { instructions } while condition or repeat { instructions } until notcondition | for first..last -> $i { instructions } or loop ($i = first; $i <=last; $i++) { instructions } | for set« -> $item» { instructions } |
Ruby | while condition or until notcondition | begin or begin | for i in first..last or for i in first...last+1 or first.upto(last) { |i|instructions } | for item in set or set.each { |item|instructions } |
Bash shell | while condition ;do or until notcondition ;do | — | for ((i = first; i <= last; ++i)) ; do | for item in set ;do |
Scala | while (condition) { instructions } | do { instructions } while (condition) | for (i <- first to last «by 1») { instructions } or first to last «by 1» foreach (i => { instructions }) | for (item <- set) { instructions } or set foreach (item => { instructions }) |
Smalltalk | conditionBlock whileTrue: | loopBlock doWhile: | first to: last do: | collection do: |
Common Lisp | (loop or (do () (notcondition) | (loop | (loop or (dotimes (i N) or (do ((i first (1+ i))) ((>=i last)) | (loop or (loop or (dolist (item list) or (mapc function list) or (map type function sequence) |
Scheme | (do () (notcondition) instructions) or (let loop () (if condition (begin instructions (loop)))) | (let loop () (instructions (if condition (loop)))) | (do ((i first (+ i 1))) ((>= i last)) instructions) or (let loop ((i first)) (if (< i last) (begin instructions (loop (+ i 1))))) | (for-each (lambda (item) instructions) list) |
ISLISP | (while condition instructions) | (tagbody loop instructions (if condition (go loop)) | (for ((i first (+ i 1))) ((>= i last)) instructions) | (mapc (lambda (item) instructions) list) |
Pascal | while condition do begin | repeat | for i := first «step 1» to last do begin [a] | for item in set do instructions |
Visual Basic | Do While condition or Do Until notcondition or While condition (Visual Basic .NET uses End While instead) | Do or Do | i must be declared beforehand.
| For Each item In set |
Visual Basic .NET | For i« As type» = first To last« Step 1» [a] | For Each item« As type» In set | ||
Xojo | While condition | Do Until notcondition or Do | ||
Python | while condition : | — | Python 3.x:for i in range(first, last+1): Python 2.x: for i in xrange(first, last+1): | for item in set: |
S-Lang | while (condition) { instructions } «then optional-block» | do { instructions } while (condition) «then optional-block» | for (i = first; i <= last; i++) { instructions } «then optional-block» | foreach item(set) «using (what)» { instructions } «then optional-block» |
Fortran | DO WHILE (condition) | DO | DO I = first,last | — |
Forth | BEGIN «instructions» condition WHILE instructions REPEAT | BEGIN instructions condition UNTIL | limit start DO instructions LOOP | — |
OCaml | while condition do instructions done | — | for i = first to last do instructions done | Array.iter (fun item -> instructions) array or List.iter (fun item -> instructions) list |
F# | while condition do | — | for i = first to last do | foritem in set do or Seq.iter (fun item -> instructions) set |
Standard ML | while condition do ( instructions ) | — | Array.app (fn item => instructions) array or app (fn item => instructions) list | |
Haskell (GHC) | — | Control.Monad.forM_ [first..last] (\i -> do instructions) | Control.Monad.forM_list (\item -> do instructions) | |
Eiffel | from | |||
CoffeeScript | while condition or expression while condition or while condition then expression or until condition or expression until condition or until expression then condition | — | for i in [first..last] or for i in [first..last] then expression or expression for i in [first..last] | for item in set or for item in set then expression or expression for item in set |
COBOL | PERFORM procedure-1 «THROUGH procedure-2» ««WITH» TEST BEFORE» UNTIL condition [c] or PERFORM ««WITH» TEST BEFORE» UNTIL condition | PERFORM procedure-1 «THROUGH procedure-2» «WITH» TEST AFTER UNTIL condition [c] or PERFORM «WITH» TEST AFTER UNTIL condition | PERFORM procedure-1 «THROUGH procedure-2» VARYING i FROM first BY increment UNTIL i > last [d] or PERFORM VARYING i FROM first BY increment UNTIL i > last [d] | — |
Rust | while condition { | loop { | for i in first..last+1 { or for i in first..=last { | for item in set { [e] or set.into_iter().for_each(|item| expression); [e] |
step
n" is used to change the loop interval. If "step
" is omitted, then the loop interval is 1.THRU
may be used instead of THROUGH
.«IS» GREATER «THAN»
may be used instead of >
.std::iter::IntoIterator
.throw | handler | assertion | |
---|---|---|---|
Ada [1] | raise exception_name «with string_expression» | begin [b] | pragma Assert («Check =>» boolean_expression ««Message =>» string_expression») |
APL | «string_expression» ⎕SIGNAL number_expression | :Trap number«s»_expression | «string_expression» ⎕SIGNAL 98/⍨~condition |
C (C99) | longjmp(state, exception); | switch (setjmp(state)) { case 0: instructions break; case exception: instructions ... } | assert(condition); |
C++ | throw exception; | try { instructions } catch «(exception)» { instructions } ... | |
C# | try { instructions } catch «(exception« name»)» { instructions } ... «finally { instructions }» | System.Diagnostics.Debug.Assert(condition); or System.Diagnostics.Trace.Assert(condition); | |
Java | try { instructions } catch (exception) { instructions } ... «finally { instructions }» | assert condition «: description»; | |
JavaScript | try { instructions } catch (exception) { instructions} «finally { instructions }» | ? | |
D | try { instructions } catch (exception) { instructions } ... «finally { instructions }» | assert(condition); | |
PHP | try { instructions } catch (exception) { instructions } ... «finally { instructions }» | assert(condition); | |
S-Lang | try { instructions } catch «exception» { instructions } ... «finally { instructions }» | ? | |
Windows PowerShell | trap «[exception]» { instructions } ... instructions or try { instructions } catch «[exception]» { instructions } ... «finally { instructions }» | [Debug]::Assert(condition) | |
Objective-C | @throw exception; | @try { instructions } @catch (exception) { instructions } ... «@finally { instructions }» | NSAssert(condition, description); |
Swift | throw exception (2.x) | do { try expression ... instructions } catch exception { instructions } ... (2.x) | assert(condition«, description») |
Perl | die exception; | eval { instructions }; if ($@) { instructions } | ? |
Raku | try { instructions CATCH { when exception { instructions } ...}} | ? | |
Ruby | raise exception | begin | |
Smalltalk | exception raise | instructionBlock on: exception do: handlerBlock | assert: conditionBlock |
Common Lisp | (error "exception") or (error or (error (make-condition | (handler-case or (handler-bind [a] | (assert condition) or (assert condition or (check-type var type) |
Scheme (R6RS) | (raise exception) | (guard (con (condition instructions) ...) instructions) | ? |
ISLISP | (error "error-string" objects) or (signal-condition condition continuable) | (with-handler | ? |
Pascal | raise Exception.Create() | try Except on E: exception do begin instructions end; end; | ? |
Visual Basic | Err.Raise ERRORNUMBER | With New Try: On Error Resume Next '*** Try class ***PrivatemstrDescriptionAsStringPrivatemlngNumberAsLongPublicSubCatch()mstrDescription=Err.DescriptionmlngNumber=Err.NumberEndSubPublicPropertyGetNumber()AsLongNumber=mlngNumberEndPropertyPublicPropertyGetDescription()AsStringDescription=mstrDescriptionEndProperty | Debug.Assert condition |
Visual Basic .NET | Throw exception or Error errorcode | Try | System.Diagnostics. Debug.Assert(condition) or System.Diagnostics.Trace.Assert(condition) |
Xojo | Raise exception | Try | — |
Python | raise exception | try: | assert condition |
Fortran | — | ||
Forth | code THROW | xt CATCH ( code or 0 ) | — |
OCaml | raise exception | try expression with pattern -> expression ... | assert condition |
F# | try expression with pattern -> expression ... or try expression finally expression | ||
Standard ML | raise exception «arg» | expression handle pattern => expression ... | |
Haskell (GHC) | throw exception or throwError expression | catch tryExpression catchExpression or catchError tryExpression catchExpression | assert condition expression |
COBOL | RAISE «EXCEPTION» exception | USE «AFTER» EXCEPTION OBJECT class-name. or USE «AFTER» EO class-name. or USE «AFTER» EXCEPTION CONDITION exception-name «FILE file-name». or USE «AFTER» EC exception-name «FILE file-name». | — |
Rust | No [13] | assert!(condition) |
with-simple-restart
, restart-case
and restart-bind
to define restarts for use with invoke-restart
. Unhandled conditions may cause the implementation to show a restarts menu to the user before unwinding the stack.exit block (break) | continue | label | branch (goto) | return value from generator | |
---|---|---|---|---|---|
Ada [1] | exit «loop_name» «when condition» | — | label: | goto label | — |
ALGOL 68 | value exit; ... | do statements; skip exit; label: statements od | label: ... | go to label; ... | yield(value) |
APL | :Leave | :Continue | label: | →label or :GoTo label | — |
C (C99) | break; | continue; | label: | goto label; | — |
Objective-C | |||||
C++ (STL) | |||||
D | |||||
C# | yield return value; | ||||
Java | break «label»; | continue «label»; | — | ||
JavaScript | yield value«;» | ||||
PHP | break «levels»; | continue «levels»; | goto label; | yield «key =>» value; | |
Perl | last «label»; | next «label»; | |||
Raku | |||||
Go | break «label» | continue «label» | goto label | ||
Swift | break «label» | continue «label» | — | ||
Bash shell | break «levels» | continue «levels» | — | — | — |
Common Lisp | (return) or (return-from block) or (loop-finish) | (tagbody tag | (go tag) | ||
Scheme | |||||
ISLISP | (return-from block) | (tagbody tag | (go tag) | ||
Pascal (ISO) | — | label: [a] | goto label; | — | |
Pascal (FPC) | break; | continue; | |||
Visual Basic | Exit block Alternatively, for methods,Return | — | label: | GoTo label | |
Xojo | Continue block | ||||
Visual Basic .NET | Yield value | ||||
Python | break | continue | — | yield value | |
RPG IV | LEAVE; | ITER; | |||
S-Lang | break; | continue; | |||
Fortran | EXIT | CYCLE | label [b] | GOTO label | — |
Ruby | break | next | |||
Windows PowerShell | break «label» | continue | |||
OCaml | — | ||||
F# | |||||
Standard ML | |||||
Haskell (GHC) | |||||
COBOL | EXIT PERFORM or EXIT PARAGRAPH or EXIT SECTION or EXIT. | EXIT PERFORM CYCLE | label «SECTION». | GO TO label | — |
See reflective programming for calling and declaring functions by strings.
calling a function | basic/void function | value-returning function | required main function | |
---|---|---|---|---|
Ada [1] | foo «(parameters)» | procedure foo «(parameters)» is begin statements end foo | function foo «(parameters)» return type is begin statements end foo | — |
ALGOL 68 | foo «(parameters)»; | proc foo = «(parameters)» void: ( instructions ); | proc foo = «(parameters)» rettype: ( instructions ...; retvalue ); | — |
APL | «parameters» foo parameters | foo←{ statements } | foo←{ statements } | — |
C (C99) | foo(«parameters») | void foo(«parameters») { instructions } | typefoo(«parameters») { instructions ... return value; } | «global declarations» |
Objective-C | ||||
C++ (STL) | ||||
Java | public static void main(String[] args) { instructions } or public static void main(String... args) { instructions } | |||
D | int main(«char[][] args») { instructions} or int main(«string[] args») { instructions} or void main(«char[][] args») { instructions} or void main(«string[] args») { instructions} | |||
C# | Same as above; alternatively, if only one statement:
| Same as above; alternatively, if simple enough to be an expression:
| static void Main(«string[] args») method_body May instead return int .(starting with C# 7.1:) May return Task or Task<int> , and if so, may be async . | |
JavaScript | function foo(«parameters») { instructions } or var foo = function («parameters») { instructions } or var foo = new Function ("«parameter»", ..., "«last parameter»" "instructions"); | function foo(«parameters») { instructions ... return value; } | — | |
Go | func foo(«parameters») { instructions } | func foo(«parameters») type { instructions ... return value } | func main() { instructions } | |
Swift | func foo(«parameters») { instructions } | func foo(«parameters») -> type { instructions ... return value } | — | |
Common Lisp | (foo «parameters») | (defun foo («parameters») or (setf (symbol-function 'symbol) | (defun foo («parameters») | — |
Scheme | (define (foo parameters) instructions) or (define foo (lambda (parameters) instructions)) | (define (foo parameters) instructions... return_value) or (define foo (lambda (parameters) instructions... return_value)) | ||
ISLISP | (defun foo («parameters») | (defun foo («parameters») | ||
Pascal | foo«(parameters)» | procedure foo«(parameters)»; «forward;» [a] | function foo«(parameters)»: type; «forward;» [a] | program name; |
Visual Basic | Foo(«parameters») | Sub Foo«(parameters)» | Function Foo«(parameters)»« As type» | Sub Main() |
Visual Basic .NET | Same as above; alternatively:
| Sub Main(««ByVal »args() As String») orFunction Main(««ByVal »args() As String») As Integer | ||
Xojo | ||||
Python | foo(«parameters») | def foo(«parameters»): | def foo(«parameters»): | — |
S-Lang | foo(«parameters» «;qualifiers») | define foo («parameters») { instructions } | define foo («parameters») { instructions ... return value; } | public define slsh_main () { instructions } |
Fortran | foo («arguments») [c] | SUBROUTINE sub_foo («arguments») [c] | type FUNCTION foo («arguments») [c] | PROGRAM main |
Forth | «parameters» FOO | : FOO « stack effect comment: ( before -- ) » | : FOO « stack effect comment: ( before -- after ) » | — |
PHP | foo(«parameters») | function foo(«parameters») { instructions } | function foo(«parameters») { instructions ... return value; } | — |
Perl | foo(«parameters») or &foo«(parameters)» | sub foo { «my (parameters) = @_;» instructions } | sub foo { «my (parameters) = @_;» instructions... «return» value; } | |
Raku | foo(«parameters») or &foo«(parameters)» | «multi »sub foo(parameters) { instructions } | «our «type» »«multi »sub foo(parameters) { instructions ... «return» value; } | |
Ruby | foo«(parameters)» | def foo«(parameters)» | def foo«(parameters)» | |
Rust | foo(«parameters») | fn foo(«parameters») { instructions } | fn foo(«parameters») -> type { instructions } | fn main() { instructions } |
Scala | foo«(parameters)» | def foo«(parameters)»«: Unit =» { instructions } | def foo«(parameters)»«: type» = { instructions ... «return» value } | def main(args: Array[String]) { instructions } |
Windows PowerShell | foo «parameters» | function foo { instructions }; or function foo { «param(parameters)» instructions } | function foo «(parameters)» { instructions ... return value }; or function foo { «param(parameters)» instructions ... return value } | — |
Bash shell | foo «parameters» | function foo { or foo () { | function foo { or foo () { | |
| ||||
OCaml | foo parameters | let «rec» foo parameters = instructions | let «rec» foo parameters = instructions... return_value | |
F# | [<EntryPoint>] let main args = instructions | |||
Standard ML | fun foo parameters = ( instructions ) | fun foo parameters = ( instructions... return_value ) | ||
Haskell | foo parameters = do | foo parameters = return_value or foo parameters = do | «main :: IO ()» | |
Eiffel | foo («parameters») | foo («parameters») | foo («parameters»): type | [b] |
CoffeeScript | foo() | foo = -> | foo = ->value | — |
foo parameters | foo = () -> | foo = ( parameters ) ->value | ||
COBOL | CALL "foo" «USING parameters» [d] | «IDENTIFICATION DIVISION.» | «IDENTIFICATION DIVISION.» | — |
«FUNCTION» foo«(«parameters»)» | — |
forward;
" for forward declarations.PARAMETER
is a language keyword); the CALL
keyword is required for subroutines."foo"
, a string variable may be used instead containing the same value.Where string is a signed decimal number:
string to integer | string to long integer | string to floating point | integer to string | floating point to string | |
---|---|---|---|---|---|
Ada [1] | Integer'Value (string_expression) | Long_Integer'Value (string_expression) | Float'Value (string_expression) | Integer'Image (integer_expression) | Float'Image (float_expression) |
ALGOL 68 with general, and then specific formats | With prior declarations and association of: string buf := "12345678.9012e34 "; file proxy; associate(proxy, buf); | ||||
get(proxy, ivar); | get(proxy, livar); | get(proxy, rvar); | put(proxy, ival); | put(proxy, rval); | |
getf(proxy, ($g$, ivar)); or getf(proxy, ($dddd$, ivar)); | getf(proxy, ($g$, livar)); or getf(proxy, ($8d$, livar)); | getf(proxy, ($g$, rvar)); or getf(proxy, ($8d.4dE2d$, rvar)); | putf(proxy, ($g$, ival)); or putf(proxy, ($4d$, ival)); | putf(proxy, ($g(width, places, exp)$, rval)); or putf(proxy, ($8d.4dE2d$, rval)); | |
APL | ⍎string_expression | ⍎string_expression | ⍎string_expression | ⍕integer_expression | ⍕float_expression |
C (C99) | integer = atoi(string); | long = atol(string); | float = atof(string); | sprintf(string, "%i", integer); | sprintf(string, "%f", float); |
Objective-C | integer = [string intValue]; | long = [string longLongValue]; | float = [string doubleValue]; | string = [NSString stringWithFormat | string = [NSString stringWithFormat |
C++ (STL) | «std::»istringstream(string) >> number; | «std::»ostringstream o; o << number; string = o.str(); | |||
C++11 | integer = «std::»stoi(string); | long = «std::»stol(string); | float = «std::»stof(string); double = «std::»stod(string); | string = «std::»to_string(number); | |
C# | integer = int.Parse | long = long.Parse | float = float.Parse double = double.Parse | string = number | |
D | integer = std.conv.to!int | long = std.conv.to!long | float = std.conv.to!float double = std.conv.to!double | string = std.conv.to!string | |
Java | integer = Integer.parseInt | long = Long.parseLong | float = Float.parseFloat double = Double.parseDouble | string = Integer.toString string = String.valueOf | string = Float.toString string = Double.toString |
JavaScript [a] | integer = parseInt(string); | float = parseFloat(string); float = new Number (string); float = Number (string); float = +string; | string = number.toString (); string = String (number); string = number+""; string = `${number}` | ||
Go | integer, error = strconv.Atoi(string) | long, error = strconv.ParseInt | float, error = strconv.ParseFloat | string = strconv.Itoa(integer) string = strconv.FormatInt string = fmt.Sprint(integer) | string = strconv.FormatFloat string = fmt.Sprint |
Rust [d] | string.parse::<i32>() i32::from_str(string) | string.parse::<i64>() i64::from_str(string) | string.parse::<f64>() f64::from_str(string) | integer.to_string() | float.to_string() |
Common Lisp | (setf integer (parse-integer string)) | (setf float (read-from-string string)) | (setf string (princ-to-string number)) | ||
Scheme | (define number (string->number string)) | (define string (number->string number)) | |||
ISLISP | (setf integer (convert string<integer>)) | (setf float (convert string<float>)) | (setf string (convert number<string>)) | ||
Pascal | integer := StrToInt(string); | float := StrToFloat(string); | string := IntToStr(integer); | string := FloatToStr(float); | |
Visual Basic | integer = CInt(string) | long = CLng(string) | float = CSng(string) | string = CStr(number) | |
Visual Basic .NET (can use both VB syntax above and .NET methods shown right) | integer = Integer.Parse | long = Long.Parse | float = Single.Parse double = Double.Parse | string = number | |
Xojo | integer = Val(string) | long = Val(string) | double = Val(string) double = CDbl(string) | string = CStr(number) or string = Str(number) | |
Python | integer = int(string) | long = long(string) | float = float(string) | string = str(number) | |
S-Lang | integer = atoi(string); | long = atol(string); | float = atof(string); | string = string(number); | |
Fortran | READ(string,format) number | WRITE(string,format) number | |||
PHP | integer = intval(string); or integer = (int)string; | float = floatval(string); float = (float)string; | string = "$number"; or string = strval(number); or string = (string)number; | ||
Perl [b] | number = 0 + string; | string = "number"; | |||
Raku | number = +string; | string = ~number; | |||
Ruby | integer = string.to_i or integer = Integer(string) | float = string.to_f float = Float(string) | string = number.to_s | ||
Scala | integer = string.toInt | long = string.toLong | float = string.toFloat double = string.toDouble | string = number.toString | |
Smalltalk | integer := Integer readFrom: string | float := Float readFrom: string | string := number asString | ||
Windows PowerShell | integer = [int]string | long = [long]string | float = [float]string | string = [string]number; or string = "number"; or string = (number).ToString() | |
OCaml | let integer = int_ | let float = float_ | let string = string_ | let string = string_ | |
F# | let integer = int string | let integer = int64 string | let float = float string | let string = string number | |
Standard ML | val integer = Int | val float = Real | val string = Int | val string = Real | |
Haskell (GHC) | number = read string | string = show number | |||
COBOL | MOVE «FUNCTION» NUMVAL(string) [c] TO number | MOVE number TO numeric-edited | |||
NUMVAL-C
or NUMVAL-F
may be used instead of NUMVAL
.str::parse
is available to convert any type that has an implementation of the std::str::FromStr
trait. Both str::parse
and FromStr::from_str
return a Result
that contains the specified type if there is no error. The turbofish (::<_>
) on str::parse
can be omitted if the type can be inferred from context.read from | write to | ||
---|---|---|---|
stdin | stdout | stderr | |
Ada [1] | Get (x) | Put (x) | Put (Standard_Error, x) |
ALGOL 68 | readf(($format$, x)); or getf(stand in, ($format$, x)); | printf(($format$, x)); or putf(stand out, ($format$, x)); | putf(stand error, ($format$, x)); [a] |
APL | x←⎕ | ⎕←x | ⍞←x |
C (C99) | scanf(format, &x); or fscanf(stdin, format, &x); [b] | printf(format, x); or fprintf(stdout, format, x); [c] | fprintf(stderr, format, x); [d] |
Objective-C | data=[[NSFileHandlefileHandleWithStandardInput]readDataToEndOfFile]; | [[NSFileHandlefileHandleWithStandardOutput]writeData:data]; | [[NSFileHandlefileHandleWithStandardError]writeData:data]; |
C++ | «std::»cin >> x; or «std::»getline(«std::»cin, str); | «std::»cout << x; | «std::»cerr << x; or «std::»clog << x; |
C# | x = Console.Read(); or x = Console.ReadLine(); | Console.Write(«format, »x); or Console.WriteLine(«format, »x); | Console.Error or Console.Error |
D | x = std.stdio.readln() | std.stdio.write(x) or std.stdio.writeln(x) or std.stdio.writef(format, x) or std.stdio.writefln(format, x) | stderr.write(x) or stderr.writeln(x) or std.stdio or std.stdio |
Java | x = System.in.read(); or x = new Scanner(System.in).nextInt(); or x = new Scanner(System.in).nextLine(); | System.out.print(x); or System.out.printf(format, x); or System.out.println(x); | System.err.print(x); or System.err.printf(format, x); or System.err.println(x); |
Go | fmt.Scan(&x) or fmt.Scanf(format, &x) or x = bufio.NewReader(os.Stdin).ReadString('\n') | fmt.Println(x) or fmt.Printf(format, x) | fmt.Fprintln(os.Stderr, x) or fmt.Fprintf(os.Stderr, format, x) |
Swift | x = readLine() (2.x) | print(x) (2.x)println(x) (1.x) | |
JavaScript Web Browser implementation | document.write(x) | ||
JavaScript Active Server Pages | Response.Write(x) | ||
JavaScript Windows Script Host | x = WScript.StdIn.Read(chars) or x = WScript.StdIn.ReadLine() | WScript.Echo(x) or WScript.StdOut.Write(x) or WScript.StdOut.WriteLine(x) | WScript.StdErr.Write(x) or WScript.StdErr.WriteLine(x) |
Common Lisp | (setf x (read-line)) | (princ x) or (format t format x) | (princ x *error-output*) or
|
Scheme (R6RS) | (define x (read-line)) | (display x) or
| (display x (current-error-port)) or
|
ISLISP | (setf x (read-line)) |
|
|
Pascal | read(x); or readln(x); | write(x); or writeln(x); | write(stderr, x); or writeln(stderr, x); |
Visual Basic | Input« prompt,» x | Print x or ? x | — |
Visual Basic .NET | x = Console.Read() or x = Console.ReadLine() | Console.Write(«format,»x) or Console.WriteLine(«format, »x) | Console.Error or Console.Error |
Xojo | x = StandardInputStream.Read() or x = StandardInputStreame.ReadLine() | StandardOutputStream.Write(x) or StandardOutputStream.WriteLine(x) | StdErr.Write(x) or StdErr.WriteLine(x) |
Python 2.x | x = raw_input(«prompt») | print x or sys.stdout.write(x) |
or sys.stderr.write(x) |
Python 3.x | x = input(«prompt») | print(x«, end=""») | print(x«, end=""», file=sys.stderr) |
S-Lang | fgets (&x, stdin) | fputs (x, stdout) | fputs (x, stderr) |
Fortran | READ(*,format) variable names or READ(INPUT_UNIT,format) variable names [e] | WRITE(*,format) expressions or WRITE(OUTPUT_UNIT,format) expressions [e] | WRITE(ERROR_UNIT,format) expressions [e] |
Forth | buffer length ACCEPT ( # chars read ) | buffer length TYPE | — |
PHP | $x = fgets(STDIN); or $x = fscanf(STDIN, format); | print x; or echo x; or printf(format, x); | fprintf(STDERR, format, x); |
Perl | $x = <>; or $x = <STDIN>; | print x; or printf format, x; | print STDERR x; or printf STDERR format, x; |
Raku | $x = $*IN.get; | x.print or x.say | x.note or $*ERR.print(x) or $*ERR.say(x) |
Ruby | x = gets | puts x or printf(format, x) | $stderr.puts(x) or $stderr.printf(format, x) |
Windows PowerShell | $x = Read-Host«« -Prompt» text»; or $x = [Console]::Read(); or $x = [Console]::ReadLine() | x; or Write-Output x; or echo x | Write-Error x |
OCaml | let x = read_int () or let str = read_line () or Scanf.scanf format (fun x ...->...) | print_int x or print_endline str or Printf.printf format x ... | prerr_int x or prerr_endline str or Printf.eprintf format x ... |
F# | let x = System.Console.ReadLine() | printf format x ... or printfn format x ... | eprintf format x ... or eprintfn format x ... |
Standard ML | val str = TextIO.inputLIne TextIO.stdIn | print str |
|
Haskell (GHC) | x <- readLn or str<- getLine | print x or putStrLn str | hPrint stderr x or hPutStrLn stderr str |
COBOL | ACCEPT x | DISPLAY x | |
read
, write
, get
, and put
. gets(x)
and fgets(x, length, stdin)
read unformatted text from stdin. Use of gets is not recommended. puts(x)
and fputs(x, stdout)
write unformatted text to stdout.fputs(x, stderr)
writes unformatted text to stderrArgument values | Argument counts | Program name / Script name | |
---|---|---|---|
Ada [1] | Argument (n) | Argument_Count | Command_Name |
C (C99) | argv[n] | argc | first argument |
Objective-C | |||
C++ | |||
C# | args[n] | args.Length | Assembly.GetEntryAssembly() |
Java | args.length | ||
D | first argument | ||
JavaScript Windows Script Host implementation | WScript.Arguments(n) | WScript.Arguments.length | WScript.ScriptName or WScript.ScriptFullName |
Go | os.Args[n] | len(os.Args) | first argument |
Rust [a] | std::env::args().nth(n) std::env::args_os().nth(n) | std::env::args().count() std::env::args_os().count() | std::env::args().next() std::env::args_os().next() |
Swift | Process.arguments[n] orProcess.unsafeArgv[n] | Process.arguments.count orProcess.argc | first argument |
Common Lisp | ? | ? | ? |
Scheme (R6RS) | (list-ref (command-line) n) | (length (command-line)) | first argument |
ISLISP | — | — | — |
Pascal | ParamStr(n) | ParamCount | first argument |
Visual Basic | Command [b] | — | App.Path |
Visual Basic .NET | CmdArgs(n) | CmdArgs.Length | [Assembly].GetEntryAssembly().Location |
Xojo | System.CommandLine | (string parsing) | Application.ExecutableFile.Name |
Python | sys.argv[n] | len(sys.argv) | first argument |
S-Lang | __argv[n] | __argc | first argument |
Fortran | DO i = 1,argc | argc = COMMAND_ARGUMENT_COUNT () | CALL GET_COMMAND_ARGUMENT (0,progname) |
PHP | $argv[n] | $argc | first argument |
Bash shell | $n ($1, $2, $3, ...) $@ (all arguments) | $# | $0 |
Perl | $ARGV[n] | scalar(@ARGV) | $0 |
Raku | @*ARGS[n] | @*ARGS.elems | $PROGRAM_NAME |
Ruby | ARGV[n] | ARGV.size | $0 |
Windows PowerShell | $args[n] | $args.Length | $MyInvocation.MyCommand |
OCaml | Sys.argv.(n) | Array.length Sys.argv | first argument |
F# | args.[n] | args.Length | Assembly.GetEntryAssembly() |
Standard ML | List.nth(CommandLine.arguments(),n) | length(CommandLine.arguments()) | CommandLine.name() |
Haskell (GHC) | do{args<-System.getArgs;returnlengthargs!!n } | do{args<-System.getArgs;returnlengthargs } | System.getProgName |
COBOL | [c] | — |
std::env::args
and std::env::args_os
return iterators, std::env::Args
and std::env::ArgsOs
respectively. Args
converts each argument to a String
and it panics if it reaches an argument that cannot be converted to UTF-8. ArgsOs
returns a non-lossy representation of the raw strings from the operating system (std::ffi::OsString
), which can be invalid UTF-8.Split(string)
.ACCEPT
statements.Shell command | Execute program | Replace current program with new executed program | |
---|---|---|---|
Ada [1] | Not part of the language standard. Commonly done by compiler provided packages or by interfacing to C or POSIX. [16] | ||
C | system("command"); | execl(path, args); or execv(path, arglist); | |
C++ | |||
Objective-C | [NSTask launchedTaskWithLaunchPath:(NSString *)path arguments:(NSArray *)arguments]; | ||
C# | System.Diagnostics | ||
F# | |||
Go | exec.Run(path, argv, envv, dir, exec.DevNull, exec.DevNull, exec.DevNull) | os.Exec(path, argv, envv) | |
Visual Basic | Interaction.Shell(command «, WindowStyle» «, isWaitOnReturn») | ||
Visual Basic .NET | Microsoft.VisualBasic | System.Diagnostics | |
Xojo | Shell.Execute(command «, Parameters») | FolderItem.Launch(parameters, activate) | — |
D | std.process.system("command"); | std.process.execv(path, arglist); | |
Java | Runtime.exec(command); or new ProcessBuilder(command).start(); | ||
JavaScript Windows Script Host implementation |
| WshShell.Exec(command) | |
Common Lisp | (uiop:run-program command) | ||
Scheme | (system command) | ||
ISLISP | — | — | — |
Pascal | system(command); | ||
OCaml | Sys.command command, Unix.open_process_full command env (stdout, stdin, stderr),... | Unix.create_process prog args new_stdin new_stdout new_stderr, ... | Unix.execv prog args or Unix.execve prog args env |
Standard ML | OS.Process.system command | Unix.execute (path, args) | Posix.Process.exec (path, args) |
Haskell (GHC) | System.system command | System.Process | Posix.Process |
Perl | system(command) or $output = `command` or $output = qx(command) | exec(path, args) | |
Ruby | system(command) or output = `command` | exec(path, args) | |
PHP | system(command) or $output = `command` or exec(command) or passthru(command) | ||
Python | os.system(command) or subprocess.Popen(command) | subprocess.call(["program", "arg1", "arg2", ...]) | os.execv(path, args) |
S-Lang | system(command) | ||
Fortran | CALL EXECUTE_COMMAND_LINE (COMMAND «, WAIT» «, EXITSTAT» «, CMDSTAT» «, CMDMSG») [a] | ||
Windows PowerShell | [Diagnostics.Process]::Start(command) | «Invoke-Item »program arg1 arg2 ... | |
Bash shell | output=`command` or output=$(command) | program arg1 arg2 ... |
In computer science and computer programming, a data type is a collection or grouping of data values, usually specified by a set of possible values, a set of allowed operations on these values, and/or a representation of these values as machine types. A data type specification in a program constrains the possible values that an expression, such as a variable or a function call, might take. On literal data, it tells the compiler or interpreter how the programmer intends to use the data. Most programming languages support basic data types of integer numbers, floating-point numbers, characters and Booleans.
In object-oriented (OO) and functional programming, an immutable object is an object whose state cannot be modified after it is created. This is in contrast to a mutable object, which can be modified after it is created. In some cases, an object is considered immutable even if some internally used attributes change, but the object's state appears unchanging from an external point of view. For example, an object that uses memoization to cache the results of expensive computations could still be considered an immutable object.
In mathematics and computer science, a higher-order function (HOF) is a function that does at least one of the following:
In computer science, a type signature or type annotation defines the inputs and outputs of a function, subroutine or method. A type signature includes the number, types, and order of the function's arguments. One important use of a type signature is for function overload resolution, where one particular definition of a function to be called is selected among many overloaded forms.
In computer science, primitive data types are a set of basic data types from which all other data types are constructed. Specifically it often refers to the limited set of data representations in use by a particular processor, which all compiled programs must use. Most processors support a similar set of primitive data types, although the specific representations vary. More generally, "primitive data types" may refer to the standard data types built into a programming language. Data types which are not primitive are referred to as derived or composite.
The syntax of the C programming language is the set of rules governing writing of software in C. It is designed to allow for programs that are extremely terse, have a close relationship with the resulting object code, and yet provide relatively high-level data abstraction. C was the first widely successful high-level language for portable operating-system development.
In computer science, a pointer is an object in many programming languages that stores a memory address. This can be that of another value located in computer memory, or in some cases, that of memory-mapped computer hardware. A pointer references a location in memory, and obtaining the value stored at that location is known as dereferencing the pointer. As an analogy, a page number in a book's index could be considered a pointer to the corresponding page; dereferencing such a pointer would be done by flipping to the page with the given page number and reading the text found on that page. The actual format and content of a pointer variable is dependent on the underlying computer architecture.
In computer science, a union is a value that may have any of several representations or formats within the same position in memory; that consists of a variable that may hold such a data structure. Some programming languages support special data types, called union types, to describe such values and variables. In other words, a union type definition will specify which of a number of permitted primitive types may be stored in its instances, e.g., "float or long integer". In contrast with a record, which could be defined to contain both a float and an integer; in a union, there is only one value at any given time.
In computer programming, a function object is a construct allowing an object to be invoked or called as if it were an ordinary function, usually with the same syntax. In some languages, particularly C++, function objects are often called functors.
In computer programming, the ternary conditional operator is a ternary operator that is part of the syntax for basic conditional expressions in several programming languages. It is commonly referred to as the conditional operator, ternary if, or inline if. An expression a ? b : c
evaluates to b
if the value of a
is true, and otherwise to c
. One can read it aloud as "if a then b otherwise c". The form a ? b : c
is by far and large the most common, but alternative syntaxes do exist; for example, Raku uses the syntax a ?? b !! c
to avoid confusion with the infix operators ?
and !
, whereas in Visual Basic .NET, it instead takes the form If(a, b, c)
.
In mathematics and in computer programming, a variadic function is a function of indefinite arity, i.e., one which accepts a variable number of arguments. Support for variadic functions differs widely among programming languages.
The computer programming languages C and Pascal have similar times of origin, influences, and purposes. Both were used to design their own compilers early in their lifetimes. The original Pascal definition appeared in 1969 and a first compiler in 1970. The first version of C appeared in 1972.
In the C programming language, data types constitute the semantics and characteristics of storage of data elements. They are expressed in the language syntax in form of declarations for memory locations or variables. Data types also determine the types of operations or methods of processing of data elements.
String functions are used in computer programming languages to manipulate a string or query information about a string.
A class in C++ is a user-defined type or data structure declared with any of the keywords class
, struct
or union
that has data and functions as its members whose access is governed by the three access specifiers private, protected or public. By default access to members of a C++ class declared with the keyword class
is private. The private members are not accessible outside the class; they can be accessed only through member functions of the class. The public members form an interface to the class and are accessible outside the class.
sizeof is a unary operator in the programming languages C and C++. It generates the storage size of an expression or a data type, measured in the number of char-sized units. Consequently, the construct sizeof (char) is guaranteed to be 1. The actual number of bits of type char is specified by the preprocessor macro CHAR_BIT, defined in the standard include file limits.h. On most modern computing platforms this is eight bits. The result of sizeof has an unsigned integer type that is usually denoted by size_t.
C++11 is a version of the ISO/IEC 14882 standard for the C++ programming language. C++11 replaced the prior version of the C++ standard, called C++03, and was later replaced by C++14. The name follows the tradition of naming language versions by the publication year of the specification, though it was formerly named C++0x because it was expected to be published before 2010.
This is an overview of Fortran 95 language features. Included are the additional features of TR-15581:Enhanced Data Type Facilities, which have been universally implemented. Old features that have been superseded by new ones are not described – few of those historic features are used in modern programs although most have been retained in the language to maintain backward compatibility. The current standard is Fortran 2023; many of its new features are still being implemented in compilers.
In computer programming, an anonymous function is a function definition that is not bound to an identifier. Anonymous functions are often arguments being passed to higher-order functions or used for constructing the result of a higher-order function that needs to return a function. If the function is only used once, or a limited number of times, an anonymous function may be syntactically lighter than using a named function. Anonymous functions are ubiquitous in functional programming languages and other languages with first-class functions, where they fulfil the same role for the function type as literals do for other data types.
SUPER BASIC, sometimes SBASIC for short, is an advanced dialect of the BASIC programming language offered on Tymshare's SDS 940 systems starting in 1968 and available well into the 1970s.