Open pjdevries opened 1 year ago
@HermanPeeren en @roland-d Wat vinden jullie van bovenstaande lijst? Te veel, te weinig, precies genoeg, beetje overdreven, tot nu toe door niemand om gevraagd, ...? (Hoe) gaan we die verdelen?
@pjdevries Ik vind het een veel te lange lijst. Zeker een interessante lijst maar ik denk dat het behalve ons 3 voor de meeste boven de pet is. Mijn idee zou zijn om de lijst te consolideren tot meer/veel gebruikte/nuttige opties, om wat voorbeelden uit de lijst te pakken:
Ik mis nog wat nieuwe functies zoals de str_contains
My 2 cents
@roland-d Ja hij is lang en mijn bedoeling was niet de hele lijst af te werken, tenzij daar behoefte aan is. Als @HermanPeeren ook zijn blik er over laat gaan en suggesties doet, dan stellen we een definitieve lijst op die we onderling verdelen.
@roland-d Ik heb str_contains()
, str_starts_with()
en str_ends_with()
onder 8.0 toegevoegd.
@HermanPeeren, @roland-d Wat doen we hiermee?
Als @HermanPeeren ook zijn blik er over laat gaan en suggesties doet, dan stellen we een definitieve lijst op die we onderling verdelen.
De definitieve lijst opstellen?
@roland-d Jij vond de lijst aan de lange kant. Een definitieve zou dan korter moeten zijn, toch?
@pjdevries Ik heb toch een kortere lijst doorgegeven?
@roland-d Ik realiseerde me niet dat jij jouw kortere lijst als definitief had bestempeld. Vandaar de vraag aan @HermanPeeren er ook zijn blik over te laten gaan.
Zeker een interessante lijst maar ik denk dat het behalve ons 3 voor de meeste boven de pet is.
Ik vond dit ook wat kort door de bocht, want we zitten met wat slimme luitjes bij elkaar. Maar zelfs als je gelijk hebt, is dat niet juist waarvoor deze dag aanvankelijk was bedoeld?
De lijst die ik heb opgesteld, komt voort uit wat ik als nuttig ervaar of het bestaan ervan nuttig vind. Dat zou dus ook voor anderen het geval kunnen zijn. Misschien zelfs voor jou :grin: Maar dat de lijst voor het praktische misschien wat aan de lange kant is, ben ik met je eens. Vandaar de vraag of @HermanPeeren er ook eens naar wil kijken om tot een definitieve lijst te komen. Zelf mis ik er in jouw lijst er ook nog enkelen, waarvan ik denk dat ze heel nuttig kunnen zijn.
Ik zou niet van die losse punten willen behandelen, maar thematisch te werk gaan. Als ik een beetje uit de losse pols tel valt bijna 40% van de grote lijst van @pjdevries onder het thema "typing & scoping". Dat is denk ik ook het hoofdthema van veranderingen in de versies van PHP sinds 5.6. Ik stel dus voor dat we op de bijeenkomst een verhaal houden over typing & scoping en daar allerlei punten van de lijst in te gebruiken. In context wordt het duidelijk wat het belang van die features is. De strict_types
-declaratie past ook in dit verhaal. Misschien een idee voor een leuk verhaal: proberen om foute voorbeelden te maken zonder gebruik van die features, die voorkomen kunnen worden door wel stricter te typeren of de scope te beperken (maar ja, is wel weer extra werk; ik weet voor mezelf niet of ik er tijd voor heb).
Andere thema's zouden kunnen zijn:
En een onderwerp dat ik leuk vind: composability met anonymous functions, closures & arrow-functions.
Ik denk dat allerlei losse features zonder context (thema) een beetje verloren gaan. Of misschien kunnen in 1 rest-onderwerp "moet je kijken wat handig dit is" toch nog even allerlei losse handigheidjes of syntactic sugar behandeld worden. Dan wel liefst met een voorbeeldje van code zonder die feature en met.
Thematisch groeperen vind ik op zich een goed idee, al wil ik de relatie met de PHP versie wel behouden. Maar zoals je zelf al opmerkt, zoiets bruikbaar voorbereiden kost extra tijd en dat is niet iets waar we allemaal veel van over hebben. Ik zou het ook een uitdaging vinden.
Ik zei niet dat het bruikbaar voorbereiden extra tijd kost, maar het maken van foute voorbeelden en laten zien hoe stricter typing en scoping die fouten kan voorkomen. "Bruikbaar voorbereiden" kost wel tijd, maar is altijd nodig (anders is het niet bruikbaar/nuttig), dus geen extra tijd.
Ik had op jouw lijst even voor mezelf aangemerkt wat (enigszins) met typing en scoping te maken had en als je die onderwerpen samenpakt, dan komt er al bijna vanzelf een "verhaaltje" uit, een samenhang tussen die verschillende punten.
Mijn voorstel is om eerst van die typing & scoping features (en er enigszins mee samenhangende dingen, die aan dat thema opgehangen kunnen worden) een geheel te maken en de rest even te laten zitten. Dan over een paar weken weer eens kijken hoe dat ervoor staat en wat we van de rest nog oppakken. Beter 1 onderwerp wat grondiger uitdiepen dan alles half doen.
Misschien een taakverdeling voor dat uitwerken, zodat we er met meerderen aan kunnen werken? Waarbij opgemerkt, dat ik t/m 15 november erg weinig tijd heb (maar kan altijd mijn gedachten alvast over een deelonderwerp laten gaan). Mogelijke deeltaken bij dat ene thema:
Dit is maar een voorstel, hoor. Hoe ik het aan zou pakken. Als je liever toch een keuze uit je lijst wil maken en die punten uit wil werken, dan moet je dat zeker doen! :-) Ik beperk me voorlopig alleen tot typing & scoping (maar zoals ik al zei, dekt dat ongeveer 40% van je lijst).
Ik ga mijn best doen de lijst opnieuw te organiseren naar thema. Daarna zien we wel verder.
@roland-d Wat vind jij van @HermanPeeren's idee?
Zoiets qua thema Typing & Scoping:
const
string
, ìnt
, float
, bool
, array
(type ...$types).string
, ìnt
, float
, bool
, array
.function d(?int $foo): ?string
.function f(): void
function f(Foo|Bar $param)
mixed
$fn = callable(...)
function f(Foo&Bar $param)
function f(): never { exit; }
final public const foo = "bar";
null
, false
and true
.Het idee van het groeperen op thema vind ik een prima idee. Ook de groep die Herman noemt typing & scoping
vind ik een goede. Het is denk ik ook een groep waarmee je de hele dag wel kan vullen als je het over niets anders wil hebben :) De lijst hierboven lijkt mij prima. Ook ik weet ze niet allemaal uit het blote hoofd als ik de lijst zie :/
Toch wil ik het thema new functions
niet laten vallen. Dat zal een aanzienlijk kortere lijst zijn.
Ik heb Enums ook bij de types gezet en (ook van 8.1) First Class Callable syntax.
Ik heb die Null-safe operator even weggehaald uit die typing-list en dacht aan een aparte rubriek null-handling, met de volgende items van @pjdevries z'n lijst:
??
function d(?int $foo): ?string
. (staat ook bij typing)??=
?->
mixed
(staat ook bij typing)Maybe (pun intended) met een klein uitstapje naar functional programming (in PHP uiteraard) met een Optional type/object/function. Maar waarschijnlijk zijn jullie het daar niet mee eens, want dan dwalen we wat te veel af... voor een andere keer dan. Zie https://auxiliaire.medium.com/perhaps-functional-programming-in-php-part-5-163f88c811cf . Zie ook Scott Wlaschin's artikel over "Railway Oriented programming" https://fsharpforfunandprofit.com/rop/
Hangt er een beetje vanaf wat je onder nieuw verstaat :grin:
Ik zoek vooral naar het embedden van losse functies in een context. In dit geval: tekst manipulatie. Wat wil je bereiken en hoe krijg je dat voor elkaar (kookboek-recepten).
Soms volstaan eeuwenoude ingrediënten in een recept, soms is iets nieuwsers handiger.
Ik heb Enums ook bij de types gezet en (ook van 8.1) First Class Callable syntax.
Vanwaar de keuze om de First Class Callable syntax bij de Types & Scoping onder te brengen?
In navolging van @HermanPeeren's aangepaste lijst, heb ik de vrijheid genomen de gehele lijst vergelijkbaar te herorganiseren. Ik heb echter moeite om de lijst in te delen op conceptuele topics, zoals die @HermanPeeren opsomt: toekomstbestendig, geheugen en grote bestanden, modulaire opbouw, cross-cutting concerns, etc. Niet alleen vergt dat veel meer tijd en aandacht om voor te bereiden, maar ik denk dat het ook veel extra tijd in de besprekning tot gevolg heeft. Uiteraard staat het ons allemaal vrij om interessante voorbeelden binnen zo'n conceptuele context te maken. De lijst is dus vooral PHP topic specifiek gegroepeerd.
Ik ben ook zo eigenwijs geweest om First Class Callable Syntax niet onder typing & scoping onder te brengen. Het lukt me niet dat te beredeneren en @HermanPeeren heeft nog niet toeglicht waarom hij het daar heeft ondergebracht.
Als laatste heb ik, met het oog op de release in november, ook wat nieuwe PHP 8.3 features aan de lijst toegevoegd.
const
string
, ìnt
, float
, bool
, array
(type ...$types)string
, ìnt
, float
, bool
, array
define('FOO] , [1, 2, 3])
function d(?int $foo): ?string
function f(): void
function f(iterable $i)
object
function f(Foo|Bar $param)
mixed
function f(Foo&Bar $param)
function f(): never { exit; }
final public const foo = "bar";
null
, false
and true
??
function d(?int $foo): ?string
??=
?->
mixed
...
for variadic function parameters and array unpacking.**
Exponentation operator<=>
list()
shorthand): [$foo, $bar] = [1, 2]
list()
and array destructuring: ['foo' => $item1, 'bar' => $item2] = ['foo' => 1, 'bar' => 2]
[1, 2, ...[3, 4], 5]
[1, 2, [...['foo' => 3, 'bar' => 4], 5]
str_contains()
str_starts_with()
str_ends_with()
mb_str_pad()
new class [implements Interface] {}
get_class($object)
shorthand: $object::class
$fn = callable(...)
new
in Initializers: default value of a parameter, static variable, global constant initializers, and as attribute arguments.#[\SensitiveParameter]
#[\AllowDynamicProperties]
#[\Override]
use some\namespace\{ClassA, ClassB, ClassC as C};
catch (Exception1 | Exception2 | .... $e)
match(expression) {...}
@roland-d, @HermanPeeren Ik stel voor dat we een definitieve onderverdeling maken, wie welke topics uit de lijst oppakt. Laten we daarbij en bij de voorbereiding niet uit het oog verliezen dat we beperkte tijd hebben en dus efficient moeten zijn. Dit is immers slechts één van de 13 issues die voor de komende meetup op de lijst staan om behandeld te worden.
@roland-d, @HermanPeeren Ik heb het onderwerpenoverzicht onder de naam Topics.md in de repo gecommit.
@roland-d, @HermanPeeren Ook een eerste voorbeeld in de repo gezet. Alleen niet m.b.t. dit issue :grin:
@pjdevries schreef:
Ik ben ook zo eigenwijs geweest om First Class Callable Syntax niet onder typing & scoping onder te brengen. Het lukt me niet dat te beredeneren en @HermanPeeren heeft nog niet toeglicht waarom hij het daar heeft ondergebracht.
Zie ik nu pas 😅. Is natuurlijk prima, kan op verschillende manieren ingedeeld worden, is maar net wat je als kapstokje wil gebruiken. Ik was uitgegaan van: "CallableExpr(...) has the same semantics as Closure::fromCallable(). That is, unlike callable using strings and arrays, CallableExpr(...) respects the scope at the point where it is created".
Maar als je een aparte rubriek Classes & Functions hebt, dan kun je het ook daar onder brengen.
Algemeen
Per PHP versie
const
...
for variadic function parameters and array unpacking.**
Exponentation operatorstring
,ìnt
,float
,bool
,array
(type ...$types).string
,ìnt
,float
,bool
,array
.??
<=>
define('FOO] , [1, 2, 3])
new class [implements Interface] {}
use some\namespace\{ClassA, ClassB, ClassC as C};
function d(?int $foo): ?string
.function f(): void
list()
shorthand):[$foo, $bar] = [1, 2]
function f(iterable $i)
catch (Exception1 | Exception2 | .... $e)
list()
and array destructuring:['foo' => $item1, 'bar' => $item2] = ['foo' => 1, 'bar' => 2]
object
??=
[1, 2, ...[3, 4], 5]
function f(Foo|Bar $param)
match(expression) {...}
?->
mixed
get_class($object)
shorthand:$object::class
str_contains()
,str_starts_with()
,str_ends_with()
[1, 2, [...['foo' => 3, 'bar' => 4], 5]
$fn = callable(...)
function f(Foo&Bar $param)
function f(): never { exit; }
new
in Initializers: default value of a parameter, static variable, global constant initializers, and as attribute arguments.final public const foo = "bar";
#[\SensitiveParameter]
null
,false
andtrue
.