5. It’s up to the type
•Number
6431509992650787137?
•Address
0x5941504341534941?
•String “YAPCASIA”?
0101100101000001010100000100001101000001010100110100100101000001
6. What is a $scalar?
•Boolean: true or false
•Integer
•Double
•String
•Bytes
•UTF-8
•reference
7. What is a $scalar?
•Boolean: true
•Number: 0
•String “0 but true”?
0 but true
8. What is the type of $a?
•Boolean: !!$a
•Number: 0+$a
•String q{} . $a
my $a = q{0 but true};
11. Perl 5 = context-oriented
•Most languages: type is
set when declared or
assigned
•Perl: type is set when
used.
12. Smart types
#!/usr/bin/env /friends/.rakudobrew/bin/perl6
my subset Fizz of Int where * %% 3;
my subset Buzz of Int where * %% 5;
my subset FizzBuzz of Int where Fizz&Buzz;
my subset Number of Int where none Fizz|Buzz;
proto sub fizzbuzz ($) { * }
multi sub fizzbuzz (FizzBuzz) { "FuzzBuzz" }
multi sub fizzbuzz (Fizz) { "Fizz" }
multi sub fizzbuzz (Buzz) { "Buzz" }
multi sub fizzbuzz (Number $number) { $number }
fizzbuzz($_).say for 1..30;
http://eval.dan.co.jp/fizzbuzz.html#perl6
13. Inferred types
#!/usr/local/bin/swift
extension Int {
var fizzbuzz:String {
let fb = ("Fizz", "Buzz")
switch (self % 3, self % 5) {
case (0, 0) : return fb.0 + fb.1
case (0, _) : return fb.0
case (_, 0) : return fb.1
default : return "(self)"
}
}
}
_ = (1...30).map{ print($0.fizzbuzz) }
http://eval.dan.co.jp/fizzbuzz.html#swift
14. Wrap-up
•Type = meaning of data
•Perl 5 is special
•lazy typing?
•Future of types
•Perl 6: subtype
•Type inference: Haskell,
Rust, Swift, SPVM?