Top Qs
Timeline
Chat
Perspective
Comparison of programming languages (object-oriented programming)
From Wikipedia, the free encyclopedia
Remove ads
This comparison of programming languages compares how object-oriented programming languages such as C++, Java, Smalltalk, Object Pascal, Perl, Python, and others manipulate data structures.
This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
|
Remove ads
Object construction and destruction
More information construction, destruction ...
| construction | destruction | |
|---|---|---|
| ABAP Objects | data variable type ref to class .[1] |
[2][3] |
| APL (Dyalog) | variable←⎕NEW class «parameters» |
⎕EX 'variable' |
| C++ | class variable«(parameters)»;[4] orclass* variable = new class«(parameters)»;[5] |
delete pointer; |
| C# | class variable = new class(parameters); |
variable.Dispose();[3] |
| Java | [3] | |
| D | destroy(variable); | |
| eC | class «instance handle» { «properties/data members assignments, instance method overrides» } |
delete instance handle; |
| Objective-C (Cocoa) | class *variable = [[class alloc ] init]; or class *variable = [[class alloc ] initWithFoo:parameter «bar:parameter ...»]; |
[variable release]; |
| Swift | let variable = class(parameters) |
|
| Python | variable = class(parameters) |
del variable[3] (Normally not needed) |
| Visual Basic .NET | Dim variable As New class(parameters) |
variable.Dispose()[3] |
| Xojo | Dim variable As New class(parameters) |
variable = Nil |
| Eiffel | create variable orcreate «{TYPE}» variable.make_foo «(parameters)» orvariable := create {TYPE} orvariable := create {TYPE}.make_foo «(parameters)» |
[3] |
| PHP | $variable = new class«(parameters)»; |
unset($variable);[3] |
| Perl 5 | «my »$variable = class->new«(parameters)»; |
undef($variable); |
| Raku | «my »$variable = class.new«(parameters)»; |
$variable.undefine; |
| Ruby | variable = class.new«(parameters)» |
[3] |
| Windows PowerShell | $variable = New-Object «-TypeName» class ««-ArgumentList» parameters» |
Remove-Variable «-Name» variable |
| OCaml | let variable = new class «parameters» or let variable = object members end[6] |
[3] |
| F# | let variable = «new »class(«parameters») | |
| Smalltalk | The class is an Object. Just send a message to a class, usually #new or #new:, and many others, for example:
Point x: 10 y: 20.
Array with: -1 with: 3 with: 2.
|
|
| JavaScript | var variable = new class«(parameters)» or var variable = { «key1: value1«, key2: value2 ...»»} |
[3] |
| Object Pascal (Delphi) | ClassVar := ClassType.ConstructorName(parameters); |
ClassVar.Free; |
| Scala | val obj = new Object // no parameters
val obj = new Object(arg0, arg1, arg2...)
val obj = Object(arg0, arg1, arg2...) // case class
val obj = new Object(arg0, arg1, param1 = value1, ...) // named parameters
|
[3] |
| COBOL | INVOKE class "NEW" RETURNING variable orMOVE class::"NEW" TO variable |
|
| Cobra | variable «as class» = class(parameters) |
variable.dispose |
| ISLISP | (setq variable (create (class <some-class> [:field-1 value-1 [:field-2 value-2] ..]))) |
[3] |
Close
Remove ads
Class declaration
Summarize
Perspective
More information class, protocol ...
| class | protocol | namespace | |
|---|---|---|---|
| ABAP Objects | class name definition «inheriting from parentclass». «interfaces: interfaces.» method_and_field_declarations endclass. |
interface name. members endinterface. |
— |
| APL (Dyalog) | :Class name «:parentclass» «,interfaces»members:EndClass |
:Interface namemembers:EndInterface |
:Namespace namemembers:EndNamespace |
| C++ | class name« : public parentclasses[7]» { members }; |
namespace name { members } | |
| C# | class name« : «parentclass»«, interfaces»» { members } |
interface name« : parentinterfaces» { members } | |
| D | module name; | ||
| eC | class name« : base class» { «default member values assignments» «members» } |
|
namespace name; |
| Java | class name« extends parentclass»« implements interfaces» { members } |
interface name« extends parentinterfaces» { members } |
package name; members |
| PHP | namespace name; members | ||
| Objective-C | @interface name« : parentclass»[8]«< protocols >» { instance_fields } method_and_property_declarations @end [9] |
@protocol name«< parentprotocols >» members @end |
[10] |
| Swift | class name« : «parentclass»«, protocols»» { members } |
protocol name« : parentprotocols» { members } |
|
| Python | class name«(parentclasses[7])»: |
[11] | __all__ = [ member1,member2,... ] |
| Visual Basic .NET | Class name« Inherits parentclass»« Implements interfaces» |
Interface name« Inherits parentinterfaces» |
Namespace name |
| Xojo | Class name« Inherits parentclass»« Implements interfaces» |
Interface name« Inherits parentinterfaces» |
Module name |
| Eiffel | class name« inherit parentclasses[7]» |
— | |
| Perl | package name; «@ISA = qw(parentclasses[7]);» members 1; |
package name; members | |
| Raku | class name «is parentclass «is parentclass ...[7]»» «does role «does role ...»» { members } |
role name «does role «does role ...»» { members } |
module name { members } |
| Ruby | class name« < parentclass» |
module name | |
| Windows PowerShell | — | ||
| OCaml | class name «parameters» = object «(self)» «inherit parentclass «parameters» «inherit parentclass «parameters» ...[7]»» members end |
module name | |
| F# | type name«(parameters)» «as this» = class «inherit parentclass«(parameters)» «as base»» members «interface interface with implementation «interface interface with implementation ...»» end |
type name = interface members end |
namespace name |
| Smalltalk | [12] | [13] | |
| JavaScript (ES6) | class name «extends parentclass» { members } |
||
| Object Pascal (Delphi) |
ClassName = Class «(ClassParent, Interfaces)» |
package name; members | |
| Scala | class ConcreteClass(constructor params)
extends ParentClass
with Trait1 with Trait2 with Trait2 {
// members
}
|
trait TraitName
extends OtherTrait1
with OtherTrait2 with OtherTrait3 {
// members
}
|
package name
|
| COBOL | CLASS-ID. name« INHERITS« FROM» parentclasses».
FACTORY« IMPLEMENTS interfaces».class-membersEND FACTORY.OBJECT« IMPLEMENTS interfaces».instance-membersEND OBJECT.
|
INTERFACE-ID. name« INHERITS« FROM» interfaces».
members
|
— |
| Cobra | class name «inherits parentclass» «implements interfaces» |
interface name «inherits parentinterfaces» |
namespace name |
| ISLISP | (defclass name (base-class) ((x :initform 0 :accessor get-x :initarg x)) (:abstractp nil)) |
||
Close
Remove ads
Class members
Summarize
Perspective
Constructors and destructors
More information constructor, destructor ...
| constructor | destructor | finalizer[14] | |
|---|---|---|---|
| ABAP Objects | methods constructor «importing parameter = argument»[15] |
— | |
| APL (Dyalog) | ∇ name:Implements Constructor «:Base «expr»»instructions∇ |
∇ name:Implements Destructorinstructions∇ | |
| C++ | class(«parameters») «: initializers[16]» { instructions } |
~class() { instructions } |
|
| C# | class(«parameters») { instructions } |
void Dispose(){ instructions } |
~class() { instructions } |
| D | this(«parameters») { instructions } |
~this() { instructions } | |
| eC | class() { instructions } |
~class() { instructions } |
|
| Java | class(«parameters») { instructions } |
void finalize() { instructions } | |
| Eiffel | [17] | [18] | |
| Objective-C (Cocoa) | |
|
|
| Swift | init(«parameters») { instructions } |
deinit { instructions } |
|
| Python | |
| |
| Visual Basic .NET | |
|
|
| Xojo | Sub Constructor(«parameters») |
Sub Destructor() |
|
| PHP | |
|
|
| Perl | |
|
|
| Raku | |
|
|
| Ruby | def initialize«(parameters)» |
— | |
| Windows PowerShell | — | ||
| OCaml | initializer instructions[19] |
— | |
| F# | do instructions or[20] |
|
|
| JavaScript | function name(«parameters») { instructions }[21] |
— | |
| JavaScript (ES6) | constructor(«parameters») { instructions } | ||
| COBOL | —[22] | — | |
| Cobra | cue init(parameters) |
def dispose |
|
| ISLISP | (defmethod initialize-object ((instance <class-name>) initvalues) |
||
Close
Fields
More information public, private ...
| public | private | protected | friend | |
|---|---|---|---|---|
| ABAP Objects | public section.[23] data field type type. |
private section.[23] data field type type. |
protected section.[23] data field type type. |
[24] |
| APL (Dyalog) | :Field Public field «← value» |
:Field «Private» field «← value» |
||
| C++ | public: type field; |
private: type field; |
protected: type field; |
[25] |
| C# | public type field «= value»; |
private type field «= value»; |
protected type field «= value»; |
internal type field «= value»; |
| D | package type field «= value»; | |||
| Java | protected type field «= value»; |
type field «= value»; | ||
| eC | public type field; |
private type field; | ||
| Eiffel | feature |
feature {NONE} |
feature {current_class} |
feature {FRIEND} |
| Objective-C | @public type field; |
@private type field; |
@protected type field; |
@package type field; |
| Swift | — | |||
| Smalltalk | — | [26] | — | |
| Python | self.field = value[27] |
—[28] | — | |
| Visual Basic .NET | Public field As type «= value» |
Private field As type «= value» |
Protected field As type «= value» |
Friend field As type «= value» |
| Xojo | Public field As type «= value» |
Private field As type «= value» |
Protected field As type «= value» |
— |
| PHP | public $field «= value»; |
private $field «= value»; |
protected $field «= value»; |
|
| Perl | $self->{field} = value;[27] |
— | ||
| Raku | has« type »$.field« is rw» |
has« type »$!field |
— | |
| Ruby | — | @field = value[27] |
||
| Windows PowerShell | Add-Member |
— | ||
| OCaml | — | val «mutable» field = value |
— | |
| F# | — | let «mutable» field = value |
— | |
| JavaScript | this.field = value [27] |
|||
| COBOL | — | level-number field clauses.[29] | — | — |
| Cobra | var field «as type» «= value» |
var __field «as type» «= value» |
var _field «as type» «= value» |
|
| ISLISP | (field :initform value :accessor accessor-name :initarg keyword) |
|||
Close
Methods
More information basic/void method, value-returning method ...
| basic/void method | value-returning method | ||
|---|---|---|---|
| ABAP Objects | methods name «importing parameter = argument» «exporting parameter = argument» «changing parameter = argument» «returning value(parameter)»[30] |
[31] | |
| APL (Dyalog) | ∇ «left argument» name «right arguments»instructions∇ |
∇ result ← «left argument» name «right arguments»instructions∇ | |
C++[32]
The implementation of methods is usually provided in a separate source file, with the following syntax
|
void foo(«parameters») { instructions } |
type foo(«parameters») { instructions ... return value; } | |
| C# | |||
| D | |||
| Java | |||
| eC | void ««type of 'this'»::»foo(«parameters») { instructions } |
type ««type of this»::»foo(«parameters») { instructions ... return value; } | |
| Eiffel | foo ( «parameters» ) |
foo ( «parameters» ): TYPE | |
| Objective-C | - (void)foo«:parameter «bar:parameter ...»» { instructions } |
- (type)foo«:parameter «bar:parameter ...»» { instructions... return value; } | |
| Swift | func foo(«parameters») { instructions } |
func foo(«parameters») -> type { instructions... return value } | |
| Python | def foo(self«, parameters»): |
def foo(self«, parameters»): | |
| Visual Basic .NET | Sub Foo(«parameters») |
Function Foo(«parameters») As type | |
| Xojo | Sub Foo(«parameters») |
Function Foo(«parameters») As type | |
| PHP | function foo(«parameters»)«: void» { instructions } |
function foo(«parameters»)«: type» { instructions ... return value; } | |
| Perl | sub foo { my ($self«, parameters») = @_; instructions } |
sub foo { my ($self«, parameters») = @_; instructions ... return value; } | |
| Raku | «has »«multi »method foo(««$self: »parameters») { instructions } |
«has «type »»«multi »method foo(««$self: »parameters») { instructions ... return value; } | |
| Ruby | def foo«(parameters)» |
def foo«(parameters)» | |
| Windows PowerShell | Add-Member «-MemberType» ScriptMethod «-Name» foo «-Value» { «param(parameters)» instructions } -InputObject variable |
Add-Member «-MemberType» ScriptMethod «-Name» foo «-Value» { «param(parameters)» instructions ... return value } -InputObject variable | |
| OCaml | — | method foo «parameters» = expression | |
| F# | member this.foo(«parameters») = expression | ||
| JavaScript | this.method = function(«parameters») {instructions} [34] |
this.method = function(«parameters») {instructions... return value;} [34] | |
| Javascript (ES6) | foo(«parameters») {instructions} |
foo(«parameters») {instructions... return value;} | |
| COBOL | METHOD-ID. foo.
instructions
|
METHOD-ID. foo.
instructions
| |
| Cobra | def foo(parameters) |
def foo(parameters) as type |
|
| ISLISP | (defgeneric method (arg1 arg2)) |
Close
Properties
How to declare a property named "Bar"
Manually implemented
More information read-write, read-only ...
| read-write | read-only | write-only | |
|---|---|---|---|
| ABAP Objects | — | ||
| APL (Dyalog) | :Property Bar∇ result ← Getinstructions∇∇ Set argumentsinstructions∇:EndProperty Bar |
:Property Bar∇ result ← Getinstructions∇:EndProperty Bar |
:Property Bar∇ Set argumentsinstructions∇:EndProperty Bar |
| C++ | — | ||
| C# | type Bar { |
type Bar { get { instructions ... return value; } } |
type Bar { set { instructions } } |
| D | @property type bar() { instructions ... return value; } |
@property type bar() { instructions ... return value; } |
@property type bar(type value) { instructions ... return value; } |
| eC | property type Bar { |
property type Bar { get { instructions ... return value; } } |
property type Bar { set { instructions } } |
| Java | — | ||
| Objective-C 2.0 (Cocoa) | @property (readwrite) type bar; and then inside @implementation |
@property (readonly) type bar; and then inside @implementation |
— |
| Swift | var bar : type { get { instructions } set«(newBar)» { instructions } } |
var bar : type { instructions } |
— |
| Eiffel | feature -- Access |
||
| Python | def setBar(self, value): [35] |
def getBar(self): |
def setBar(self, value): |
| Visual Basic .NET | Property Bar() As type |
ReadOnly Property Bar() As type |
WriteOnly Property Bar() As type |
| Xojo | ComputedProperty Bar() As type |
ComputedProperty Bar() As type |
ComputedProperty Bar() As type |
| PHP | function __get($property) { |
function __get($property) { |
function __set($property, $value) { |
| Perl | sub Bar { |
sub Bar { |
sub Bar { |
| Raku | — | ||
| Ruby | def bar |
def bar |
def bar=(value) |
| Windows PowerShell | Add-Member |
Add-Member |
Add-Member |
| OCaml | — | ||
| F# | member this.Bar with get() = expression and set(value) = expression |
member this.Bar = expression |
member this.Bar with set(value) = expression |
| JavaScript (ES6) | get bar(«parameters») { instructions ... return value}set bar(«parameters») { instructions } |
get bar(«parameters») { instructions ... return value} |
set bar(«parameters») { instructions } |
| COBOL | METHOD-ID. GET PROPERTY bar.
instructions
instructions
|
METHOD-ID. GET PROPERTY bar.
instructions
|
METHOD-ID. SET PROPERTY bar.
instructions
|
| Cobra | pro bar «as type» |
get bar «as type» |
set bar «as type» |
| ISLISP | — | ||
Close
Automatically implemented
More information read-write, read-only ...
| read-write | read-only | write-only | |
|---|---|---|---|
| ABAP Objects | — | ||
| C++ | — | ||
| C# | type Bar { get; set; } |
type Bar { get; private set; } |
type Bar { private get; set; } |
| D | — | ||
| Java | — | ||
| Objective-C 2.0 (Cocoa) | @property (readwrite) type bar; and then inside @implementation |
@property (readonly) type bar; and then inside @implementation |
— |
| Swift | var bar : type |
let bar : type |
— |
| Eiffel | |||
| Python | @property |
@property |
bar = property() |
| Visual Basic .NET | Property Bar As type« = initial_value» (VB 10) |
||
| PHP | |||
| Perl[36] | use base qw(Class::Accessor); |
use base qw(Class::Accessor); |
use base qw(Class::Accessor); |
| Raku | — | ||
| Ruby | attr_accessor :bar |
attr_reader :bar |
attr_writer :bar |
| Windows PowerShell | |||
| OCaml | — | ||
| F# | member val Bar = value with get, set |
||
| COBOL | level-number bar clauses PROPERTY. |
level-number bar clauses PROPERTY «WITH» NO SET. |
level-number bar clauses PROPERTY «WITH» NO GET. |
| Cobra | pro bar from var «as type» |
get bar from var «as type» |
set bar from var «as type» |
Close
Overloaded operators
Standard operators
More information unary, binary ...
| unary | binary | function call | |
|---|---|---|---|
| ABAP Objects | — | ||
| C++ | type operator symbol () { instructions } |
type operator symbol (type operand2) { instructions } |
type operator () («parameters») { instructions } |
| C# | static type operator symbol(type operand) { instructions } |
static type operator symbol(type operand1, type operand2) { instructions } |
— |
| D | type opUnary(string s)() if (s == "symbol") { instructions } |
type opBinary(string s)(type operand2) if (s == "symbol") { instructions } |
type opCall(«parameters») { instructions } |
| Java | — | ||
| Objective-C | |||
| Swift | func symbol(operand1 : type) -> returntype { instructions } (outside class) |
func symbol(operand1 : type1, operand2 : type2) -> returntype { instructions } (outside class) |
|
| Eiffel[37] | op_name alias "symbol": TYPE |
op_name alias "symbol" (operand: TYPE1): TYPE2 |
|
| Python | def __opname__(self): |
def __opname__(self, operand2): |
def __call__(self«, parameters»): |
| Visual Basic .NET | Shared Operator symbol(operand As type) As type |
Shared Operator symbol(operand1 As type, operand2 As type) As type |
— |
| Xojo | Function Operator_name(operand As type) As type |
— | |
| PHP | [38] | function __invoke(«parameters») { instructions } (PHP 5.3+) | |
| Perl | use overload "symbol" |
use overload "symbol" |
|
| Raku | «our «type »»«multi »method prefix:<symbol> («$operand: ») { instructions ... return value; } or |
«our «type »»«multi »method infix:<symbol> («$operand1: » type operand2) { instructions ... return value; } |
«our «type »»«multi » |
| Ruby | def symbol |
def symbol(operand2) |
— |
| Windows PowerShell | — | ||
| OCaml | |||
| F# | static member (symbol) operand = expression |
static member (symbol) (operand1, operand2) = expression |
— |
| COBOL | — | ||
| ISLISP | — | ||
Close
Indexers
More information read-write, read-only ...
| read-write | read-only | write-only | |
|---|---|---|---|
| ABAP Objects | — | ||
| APL (Dyalog) | :Property Numbered Default name∇ result ← Getinstructions∇∇ Set argumentsinstructions∇:EndProperty Bar |
:Property Numbered Default Bar∇ result ← Getinstructions∇:EndProperty Bar |
:Property Numbered Default Bar∇ Set argumentsinstructions∇:EndProperty Bar |
| C++ | type& operator[](type index) { instructions } |
type operator[](type index) { instructions } |
|
| C# | type this[type index] { |
type this[type index] { get{ instructions } } |
type this[type index] { set{ instructions } } |
| D | type opIndex(type index) { instructions } |
type opIndex(type index) { instructions } |
type opIndexAssign(type value, type index) { instructions } |
| Java | — | ||
| Objective-C (recent Clang compiler) | — | |
|
| Swift | subscript (index : type) -> returntype { get { instructions } set«(newIndex)» { instructions } } |
subscript (index : type) -> returntype { instructions } |
|
| Eiffel[37] | bracket_name alias "[]" (index: TYPE): TYPE assign set_item |
bracket_name alias "[]" (index: TYPE): TYPE |
|
| Python | def __getitem__(self, index): |
def __getitem__(self, index): |
def __setitem__(self, index, value): |
| Visual Basic .NET | |
|
|
| PHP | [39] | ||
| Perl | [40] | ||
| Raku | «our «type »»«multi » |
«our «type »»«multi » |
— |
| Ruby | def [](index) |
def [](index) |
def []=(index, value) |
| Windows PowerShell | — | ||
| OCaml | |||
| F# | |
|
|
| COBOL | — | ||
| Cobra | pro[index «as type»] as type |
get[index «as type»] as type |
set[index «as type»] as type |
Close
Type casts
More information downcast, upcast ...
| downcast | upcast | |
|---|---|---|
| ABAP Objects | — | |
| C++ | operator returntype() { instructions } | |
| C# | static explicit operator returntype(type operand) { instructions } |
static implicit operator returntype(type operand) { instructions } |
| D | T opCast(T)() if (is(T == type)) { instructions } | |
| eC | property T { get { return «conversion code»; } } | |
| Java | — | |
| Objective-C | ||
| Eiffel[37] | ||
| Python | ||
| Visual Basic .NET | Shared Narrowing Operator CType(operand As type) As returntype |
Shared Widening Operator CType(operand As type) As returntype |
| PHP | — | |
| Perl | ||
| Raku | multi method type«($self:)» is export { instructions } | |
| Ruby | — | |
| Windows PowerShell | ||
| OCaml | ||
| F# | ||
| COBOL | — | |
Close
Remove ads
Member access
Summarize
Perspective
How to access members of an object x
More information object member, class member ...
| object member | class member | namespace member | |||
|---|---|---|---|---|---|
| method | field | property | |||
| ABAP Objects | x->method(«parameters»).[41] |
x->field |
— | x=>field or x=>method(«parameters[41]»). |
— |
| C++ | x.method(parameters) or |
x.field or |
cls::member |
ns::member | |
| Objective-C | [x method«:parameter «bar:parameter ...»»] |
x->field |
x.property (2.0 only) or |
[cls method«:parameter «bar:parameter ...»»] |
|
| Smalltalk | x method«:parameter «bar:parameter ...»» |
— | cls method«:parameter «bar:parameter ...»» |
||
| Swift | x.method(parameters) |
x.property |
cls.member |
||
| APL (Dyalog) | left argument» x.method «right argument(s)» |
x.field |
x.property |
cls.member |
ns.member |
| C# | x.method(parameters) | ||||
| Java | — | ||||
| D | x.property | ||||
| Python | |||||
| Visual Basic .NET | |||||
| Xojo | |||||
| Windows PowerShell | [cls]::member | ||||
| F# | — | cls.member | |||
| eC | x.method«(parameters)» |
x.field |
x.property |
cls::member |
ns::member |
| Eiffel | x.method«(parameters)» |
x.field |
{cls}.member |
— | |
| Ruby | — | x.property |
cls.member | ||
| PHP | x->method(parameters) |
x->field |
x->property |
cls::member |
ns\member |
| Perl | x->method«(parameters)» |
x->{field} |
cls->method«(parameters)» |
ns::member | |
| Raku | x.method«(parameters)» or |
x.field or |
cls.method«(parameters)» or |
ns::member | |
| OCaml | x#method «parameters» |
— | |||
| JavaScript | x.method(parameters) |
x.field |
x.property |
cls.member |
— |
| COBOL | INVOKE x "method" «USING parameters» «RETURNING result» or |
— | property OF x |
INVOKE cls "method" «USING parameters» «RETURNING result» or |
— |
| Cobra | x.method«(parameters)» |
x.field |
x.property |
cls.member |
ns.member |
Close
Remove ads
Member availability
More information Has member?, Handler for missing member ...
| Has member? | Handler for missing member | |||
|---|---|---|---|---|
| Method | Field | Method | Field | |
| APL (Dyalog) | 3=x.⎕NC'method' |
2=x.⎕NC'method' |
— | |
| ABAP Objects | — | |||
| C++ | ||||
| Objective-C (Cocoa) | [x respondsToSelector:@selector(method)] |
— | forwardInvocation: |
— |
| Smalltalk | x respondsTo: selector |
— | doesNotUnderstand: |
— |
| C# | (using reflection) | |||
| eC | ||||
| Java | ||||
| D | opDispatch() | |||
| Eiffel | — | |||
| Python | hasattr(x, "method") and callable(x.method) |
hasattr(x, "field") |
__getattr__() | |
| Visual Basic .NET | (using reflection) | |||
| Xojo | (using Introspection) | |||
| Windows PowerShell | (using reflection) | |||
| F# | (using reflection) | |||
| Ruby | x.respond_to?(:method) |
— | method_missing() |
— |
| PHP | method_exists(x, "method") |
property_exists(x, "field") |
__call() |
__get() / __set() |
| Perl | x->can("method") |
exists x->{field} |
AUTOLOAD | |
| Raku | x.can("method") |
x.field.defined |
AUTOLOAD | |
| OCaml | — | |||
| JavaScript | typeof x.method === "function" |
field in x |
||
| COBOL | — | |||
Close
Remove ads
Special variables
More information current object, current object's parent object ...
| current object | current object's parent object | null reference | Current Context of Execution | |
|---|---|---|---|---|
| Smalltalk | self |
super |
nil |
thisContext |
| ABAP Objects | me |
super |
initial |
|
| APL (Dyalog) | ⎕THIS |
⎕BASE |
⎕NULL |
|
| C++ | *this |
[42] | NULL, nullptr |
|
| C# | this |
base[43] |
null |
|
| Java | super[43] |
|||
| D | ||||
| JavaScript | super[43] (ECMAScript 6) |
null, undefined[44] |
||
| eC | this |
null |
||
| Objective-C | self |
super[43] |
nil |
|
| Swift | self |
super[43] |
nil[45] |
|
| Python | self[46] |
super(current_class_name, self)[7]super() (3.x only) |
None |
|
| Visual Basic .NET | Me |
MyBase |
Nothing |
|
| Xojo | Me / Self |
Parent |
Nil |
|
| Eiffel | Current |
Precursor «{superclass}» «(args)»[43][47] |
Void |
|
| PHP | $this |
parent[43] |
null |
|
| Perl | $self[46] |
$self->SUPER[43] |
undef |
|
| Raku | self |
SUPER |
Nil |
|
| Ruby | self |
super«(args)»[48] |
nil |
binding |
| Windows PowerShell | $this |
$NULL |
||
| OCaml | self[49] |
super[50] |
—[51] | |
| F# | this |
base[43] |
null |
|
| COBOL | SELF |
SUPER |
NULL |
|
| Cobra | this |
base |
nil |
Close
Remove ads
Special methods
More information String representation, Object copy ...
| String representation | Object copy | Value equality | Object comparison | Hash code | Object ID | ||
|---|---|---|---|---|---|---|---|
| Human-readable | Source-compatible | ||||||
| ABAP Objects | — | ||||||
| APL (Dyalog) | ⍕x |
⎕SRC x |
⎕NS x |
x = y |
— | ||
| C++ | x == y[52] |
pointer to object can be converted into an integer ID | |||||
| C# | x.ToString() |
x.Clone() |
x.Equals(y) |
x.CompareTo(y) |
x.GetHashCode() |
System | |
| Java | x.toString() |
x.clone()[53] |
x.equals(y) |
x.compareTo(y)[54] |
x.hashCode() |
System | |
| JavaScript | x.toString() |
||||||
| D | x.toString() or |
x.stringof |
x == y or |
x.opCmp(y) |
x.toHash() |
||
| eC | x.OnGetString(tempString, null, null) or |
y.OnCopy(x) |
x.OnCompare(y) |
object handle can be converted into an integer ID | |||
| Objective-C (Cocoa) | x.description |
x.debugDescription |
[x copy][55] |
[x isEqual:y] |
[x compare:y][56] |
x.hash |
pointer to object can be converted into an integer ID |
| Swift | x.description[57] |
x.debugDescription[58] |
x == y[59] |
x < y[60] |
x.hashValue[61] |
reflect(x) | |
| Smalltalk | x displayString |
x printString |
x copy |
x = y |
x hash |
x identityHash | |
| Python | str(x)[62] |
repr(x)[63] |
copy.copy(x)[64] |
x == y[65] |
cmp(x, y)[66] |
hash(x)[67] |
id(x) |
| Visual Basic .NET | x.ToString() |
x.Clone() |
x.Equals(y) |
x.CompareTo(y) |
x.GetHashCode() |
||
| Eiffel | x.out |
x.twin |
x.is_equal(y) |
When x is COMPARABLE, one can simply do x < y |
When x is HASHABLE, one can use x.hash_code |
When x is IDENTIFIED, one can use x.object_id | |
| PHP | $x->__toString() |
clone x[68] |
x == y |
|
spl_object_hash(x) | ||
| Perl | "$x"[69] |
Data::Dumper[70] |
Storable[71] |
Scalar[72] | |||
| Raku | ~x[69] |
x.perl |
x.clone |
x eqv y |
x cmp y |
x.WHICH | |
| Ruby | x.to_s |
x.inspect |
x.dup or |
x == y or |
x <=> y |
x.hash |
x.object_id |
| Windows PowerShell | x.ToString() |
x.Clone() |
x.Equals(y) |
x.CompareTo(y) |
x.GetHashCode() |
||
| OCaml | Oo.copy x |
x = y |
Hashtbl |
Oo.id x | |||
| F# | string x or x |
sprintf "%A" x |
x.Clone() |
x = y or x |
compare x y or x |
hash x or x |
|
| COBOL | — | ||||||
Close
Remove ads
Type manipulation
More information Get object type, Is instance of (includes subtypes) ...
| Get object type | Is instance of (includes subtypes) | Upcasting | Downcasting | ||
|---|---|---|---|---|---|
| Runtime check | No check | ||||
| ABAP Objects | —[73] | = | ?= | ||
| C++ | typeid(x) |
dynamic_cast<type *>(&x) != nullptr |
—[74] | dynamic_cast<type*>(ptr) |
(type*) ptr or |
| C# | x.GetType() |
x is type |
(type) x or x as type |
||
| D | typeid(x) |
cast(type) x |
|||
| Delphi | x is type |
x as type |
|||
| eC | x._class |
eClass_IsDerived(x._class, type) |
(type) x | ||
| Java | x.getClass() |
x instanceof class |
(type) x |
||
| Objective-C (Cocoa) | [x class][75] |
[x isKindOfClass:[class class]] |
(type*) x | ||
| Swift | x.dynamicType |
x is type |
x as! type x as? type | ||
| JavaScript | x.constructor (If not rewritten.) |
x instanceof class |
—[76] | ||
| Visual Basic .NET | x.GetType() |
TypeOf x Is type |
—[74] | CType(x, type) or TryCast(x, type) |
|
| Xojo | Introspection.GetType(x) |
x IsA type |
— | CType(x, type) |
— |
| Eiffel | x.generating_type |
attached {TYPE} x |
attached {TYPE} x as down_x |
||
| Python | type(x) |
isinstance(x, type) |
—[76] | ||
| PHP | get_class(x) |
x instanceof class | |||
| Perl | ref(x) |
x->isa("class") | |||
| Raku | x.WHAT |
x.isa(class) |
—[74] | type(x) or |
|
| Ruby | x.class |
x.instance_of?(type) or |
—[76] | ||
| Smalltalk | x class |
x isKindOf: class | |||
| Windows PowerShell | x.GetType() |
x -is [type] |
—[74] | [type]x or x -as [type] |
|
| OCaml | —[77] | (x :> type) |
— | ||
| F# | x.GetType() |
x :? type |
(x :?> type) |
||
| COBOL | — | x AS type[74] |
— | ||
Close
Remove ads
Namespace management
More information Import namespace, Import item ...
| Import namespace | Import item | ||
|---|---|---|---|
| qualified | unqualified | ||
| ABAP Objects | |||
| C++ | using namespace ns; |
using ns::item ; | |
| C# | using ns; |
using item = ns.item; | |
| D | import ns; |
import ns : item; | |
| Java | import ns.*; |
import ns.item; | |
| Objective-C | |||
| Visual Basic .NET | Imports ns |
||
| Eiffel | |||
| Python | import ns |
from ns import * |
from ns import item |
| PHP | use ns; |
use ns\item; | |
| Perl | use ns; |
use ns qw(item); | |
| Raku | |||
| Ruby | |||
| Windows PowerShell | |||
| OCaml | open ns |
||
| F# | |||
| COBOL | — | ||
Close
Contracts
More information Precondition, Postcondition ...
| Precondition | Postcondition | Check | Invariant | Loop | |
|---|---|---|---|---|---|
| ABAP Objects | — | ||||
| C++ | |||||
| C# | Spec#: |
Spec#: | |||
| Java | — | ||||
| Objective-C | |||||
| Visual Basic .NET | |||||
| D | f |
f |
assert(expression) |
invariant() { expression } |
|
| Eiffel | f |
f |
f |
class X |
from instructions |
| Python | — | ||||
| PHP | |||||
| Perl | |||||
| Raku | PRE { condition } |
POST { condition } |
|||
| Ruby | — | ||||
| Windows PowerShell | |||||
| OCaml | |||||
| F# | |||||
| COBOL | |||||
Close
Remove ads
See also
Notes
References
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads
Remove ads