Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.
Verwijderd
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.
Given-when klinkt inderdaad wel lekker, maar dat zijn eigenlijk niet de meest fundamentele aanpassingen aan de switch-statement zoals we die kennen uit Java,C++, C# en dergelijke.Jaaap: Ja Larry vond dat switch / case niet echt begrijpelijk engels was. Vandaar zijn keuze.
Allereerst zijn is de code die uitgevoerd wordt achter een geval een echt block en heeft dus ook een echte scope.
Verder is de switch een expressie, waar andere talen een voorbeeld aan kunnen nemen:
1
2
3
4
5
| $result = given $digit {
when "T" { 10 }
when "E" { 11 }
default { $digit }
} |
Het belangrijkste vind ik echter dat er geen fall-through is: als een optie is uitgevoerd, wordt er naar het einde van de switch gesprongen en hoef je dus niet te breaken. Dit is veel logischer, zeker als je het vergelijkt met de if-then-else constructie (waar de Perl 6 switch grote overeenkomsten mee vertoond). Als je wel een fall-through wilt, kan je dat zelf aangeven met 'skip'.
Het leuke van de when is ook dat je hem eigenlijk in veel meer situaties kunt gebruiken, zoals bijvoorbeeld de CATCH, maar nog leuker: de for. De loop variabele is hier dan de 'given' waarde.
Verder kan je uiteraard op veel meer manieren gevallen onderscheiden met veel geavanceerdere mogelijkheden, maar dat volgt eigenlijk nogal logisch uit de aard van Perl...
Ik ben vast een hele hoop vergeten, want ik ben helemaal geen Perl kenner, maar dit schets wel een beetje de scope en samenhang van deze ideeen
Voor die mensen die meer willen lezen:
Apocalypse 4, Statements and Declarations en RFC 022: Control flow: Builtin switch statement.
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Verwijderd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| Perl 5 Perl 6
-------------------------------- ----------------------------------
if ( /\w+/ ) { } if ( match ) { }
die "Bad!" if ( $_ !~ /\w+/ ); die "Bad!" if ( ! match );
($res) = m#^(.*)$#g; ($res) = match #^(.*)$#g;
# These are longer, but you can still use the backwards
# compatible syntax where it makes sense, like here
next if /\s+/ || /\w+/; next if match /\s+/ or match /\w+/;
next if ($str =~ /\s+/) || next if match /\s+/, $str or
($str =~ /\w+/) match /\w+/, $str;
next unless $str =~ /^N/; next unless match /^N/, $str;
$str =~ s/\w+/$bob/gi; $str = subst /\w+/$bob/gi, $str;
s/\w+/this/; subst /\w+/this/;
tr/a-z/Z-A/; trade /a-z/Z-A/;
$new =~ tr/a/b/; $new = trade /a/b/, $new;
# Some become easier and more consistent...
($str = $_) =~ s/\d+/&func/ge; $str = subst /\d+/&func/ge;
($new = $old) =~ tr/a/z/; $new = trade /a/z/, $old; |
Verwijderd
Reporter: Mister Gandhi, what do you think of western civilisation?
Gandhi: I think it would be a good idea
De visie achter de aanpassingen is goed en om die visie te begrijpen moet je Apocalypse 5 bestuderen, waarin pattern matching uitgebreid aan de orde komt.
http://www.perl.com/lpt/a/2002/06/04/apo5.html
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Ik ben het met je eens hoor, maar ik was verrast toen ik zag jij het zei. Waarom vond je het ranzig toen ik voorstelde om de C if-statement ook als expressie te kunnen gebruiken? Je zegt zelf al dat ze vrij veel op elkaar lijken.Op vrijdag 07 juni 2002 17:54 schreef mbravenboer het volgende:
[..]
Verder is de switch een expressie, waar andere talen een voorbeeld aan kunnen nemen:
code:
1 2 3 4 5$result = given $digit { when "T" { 10 } when "E" { 11 } default { $digit } }
.
Overigens denk ik wel dat jij het aan jezelf verplicht bent om Perl tenminste op een paar punten af te zeiken, want het is en blijft natuurlijk een ranzig taaltje
He who knows only his own side of the case knows little of that.
Wat pas echt erg is in Perl5 is OO (Object Oriented stuff). Met het pijltje -> ipv een punt zoals in java: $reference->subroutine. Als je een beetje java kan dan is de perl OO erg wazig. bless dit, our dat. Ik heb nog niet gelezen of/hoe ze dit in Perl6 gaan aanpakken.
Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.
Ho, ik heb niets over if-statement als expressie gezegd.... Dat weet ik zeker, want ik was het volledig met je eensRickN: Waarom vond je het ranzig toen ik voorstelde om de C if-statement ook als expressie te kunnen gebruiken? Je zegt zelf al dat ze vrij veel op elkaar lijken.
MSalters (als ik het goed heb) had wel bezwaren omdat in C een expressie nooit een nieuwe scope introduceert. Dat bezwaar kan ik me voorstellen, maar dat maakt voor het ontwerp van een nieuwe taal natuurlijk niet zo heel erg veel uit.
Ik zou graag alles als expressie willen zien (if, switch/given, try-catch) en dat heel generiek gerealiseerd door de introductie van expressie-blocken waarin de laatste expressie de waarde van het expressie-block is, maar daar dus wel statements voor kunnen staan.
Overigens ben ik dus wel tegen een assignment als een expressie, omdat dat dat juist onduidelijkheid oplevert. In mijn voorstel van een expressie-block zou je eerst een assignment kunnen doen en daarna de variable opleveren als resultaat.
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Ik ken Perl verder eigenlijk niet bepaaldRickN: Overigens denk ik wel dat jij het aan jezelf verplicht bent om Perl tenminste op een paar punten af te zeiken, want het is en blijft natuurlijk een ranzig taaltje
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment
Nou, geweldig dan.Op vrijdag 07 juni 2002 19:37 schreef mbravenboer het volgende:
[..]
Ho, ik heb niets over if-statement als expressie gezegd.... Dat weet ik zeker, want ik was het volledig met je eens. Ik had toen alleen geen zin om daar ook nog op in te gaan, dus is viel je niet bij
. Ik vind net als jij dat er geen aparte syntax zou moeten zijn voor een conditionele expressie.
MSalters (als ik het goed heb) had wel bezwaren omdat in C een expressie nooit een nieuwe scope introduceert. Dat bezwaar kan ik me voorstellen, maar dat maakt voor het ontwerp van een nieuwe taal natuurlijk niet zo heel erg veel uit.
Ik zou graag alles als expressie willen zien (if, switch/given, try-catch) en dat heel generiek gerealiseerd door de introductie van expressie-blocken waarin de laatste expressie de waarde van het expressie-block is, maar daar dus wel statements voor kunnen staan.
Overigens ben ik dus wel tegen een assignment als een expressie, omdat dat dat juist onduidelijkheid oplevert. In mijn voorstel van een expressie-block zou je eerst een assignment kunnen doen en daarna de variable opleveren als resultaat.
He who knows only his own side of the case knows little of that.
Ah, nu je 'ranzig' zegt begrijp ik waar je op doeltRickN: het lijkt er een beetje op dat je mijn voorstel over die if statement ranzig noemt.
1
| if( ..) then {a} else {b} = 5 |
De if-syntax ipv .. ? .. : .. vind ik prima
JuistMaar whatever, we zijn het nu met elkaar eens.
Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment