NAME

Perl6::Overview::Object - Object-oriented Programming

DESCRIPTION

Basic class definition

class ClassName {
    has $.public_instance_var;
    # Untyped instance variable, a read-only accessor is automatically
    # generated. Methods have read-write access to $.instance_var.

    has $.public_instance_var is rw;
    # Untyped instance variable, a read-write accessor is automatically
    # generated.

    has Type $.public_instance_var;
    # Typed instance variable.

    has $!private_instance_var;
    # Private instance variable, no accessor is automatically generated.
}

Inheritance

class ParentClass {...}

class SubClass is ParentClass {...}
# or
class SubClass {
    is ParentClass;
    ...;
}

Methods

method methodname(...) {...}
# Standard subroutine signature

method methodname($invocant: ...) {...}
# The invocant (the class or the instance) is explicitly bound to
# $invocant. In any case, there's self and $?CLASS, too.

method ^methodname(...) {...}
# Class method

method methodname(::?CLASS $self: ...) {...}
# Instance method

Roles

role RoleName {
    method methodname(...) {...}
}

class SomeClass does RoleName {...}
# or
class SomeClass {
    does RoleName;
}

Magical function

self    # Returns the current instance

Magical variables

$?CLASS   # The current class as scalar variable
::?CLASS  # The current class as package variable
$?ROLE    # The current role as scalar variable
::?ROLE   # The current role as package variable

Subtypes

my subtype Int::Odd of Int where { $^value % 2 == 1 };
# Declaration of a new, lexical subtype of Int, allowing only odd integers.

my Int::Odd $var = 3;    # valid
$var++;                  # invalid

my Int::Odd $var = 4;    # invalid