Important note to self: If I want to change the max upload to php on a web server, just changing upload_max_filesize
in php.ini might not be enough, since there is also a post_max_size
value.
Important note to self: If I want to change the max upload to php on a web server, just changing upload_max_filesize
in php.ini might not be enough, since there is also a post_max_size
value.
Min ursprungliga post – En kommentar till ”Refactoring Loops and Conditionals”
Emil svarade genom ett par tweets, som jag här satt samman till ett sammanhängande citat för tydlighetens skull.
Jag tycker han gör det rätt fram tills han blandar in collection. Även om collection är helt guld så blir det i det där fallet inte lättare att förstå. Men bort med switchen och in med en array istället. Helt klart.
och tredjepartslibraries är ju väldigt vanligt sedan Composer slog igenom. Om man inte utnyttjar det är man korkad. :)
Jag håller med om att det i det här fallet inte är något fel att byta ut ett Switch-statement mot en Array, så jag tror att vi är mer eller mindre överens.
Sen kan jag absolut se värdet av tredjepartsramverk. Dock medför de en högre tröskel för förståelse för den som läser koden i efterhand eftersom den förutsätter en förtrogenhet med det aktuella ramverket. Och visst, idag använder ”alla” Laravel men om två år är det något annat som ”alla” använder. Huvudproblemet här skulle jag säga är att PHP har så dåliga interna typer att man som utvecklare så lätt frestas att förlita sig på en tredjepart för något så grundläggande som en ”Collection”-klass.
Min vän Emil twittrade nyss följande:
Dagens lunchfilm för dig som programmerar PHP.
https://vimeo.com/115719437
Diskutera i grupp.
Jag fick en stor lust att, precis som Emil uppmanar till, diskutera det som visades i videon, och eftersom 140 tecken inte är en särskilt bra grogrund för nyanserad diskussion så tänkte jag blogga om det istället. (Just nu skriver jag på svenska för att i första hand diskutera med Emil. Eventuellt översätter jag det hela till engelska vid ett senare tillfälle om det visar sig vara intressant.)
Låt mig börja med att säga att jag är helt övertygad om att Adam Wathan som har gjort videon är en mycket mera kunnig PHP-utvecklare, och säkert programmerare i största allmänhet, än vad jag är. Jag är bara en glad amatör. Så jag vill inte påstå att han är okunnig, att hans lösning är idiotisk. Det är säkert jag som missförstått nåt men tills jag förstår mer så har jag några invändningar. Dessa kan sammanfattas under rubriken:
Varför denna refaktorisering1? Vad vinner vi på den? Blir koden mycket snabbare att exekvera? Blir den lättare att uppdatera?
Jag skulle påstå att den definitivt blir svårare att förstå. Kanske inte för den som redan programmerar på avancerad nivå, och visst ”det är lätt om en kan”, men omstruktureringen fick koden att gå från något som var fullt läsbart för den som är en nybörjare inom programmering till totalt obegripligt för den inte redan invigde.
”Switch”-statements och loopar kanske inte är så snygga att titta på men det är glasklart vad de gör. Jag skulle kunna visa den ursprungliga koden för de 12-åringar som vi (Emil, jag och andra) på fritiden undervisar i grundläggande programmering och annat och barnen skulle ha förstått allt redan under första lektionen. De refaktoriserade resultatet skulle kräva många lektioner för att förstå, inklusive en lektion i ett tredjepartsramverk eftersom den vanliga array-datatypen i PHP inte anses vara bra nog.2
Vi har bytt bort lättförståelig kod, så vad fick vi istället?3 Adam Wathan påstår att han gör koden mera ”simple” och ”clean” men jag förstår inte på vilket sätt det är sant. Det blev mindre kod men är det verkligen samma sak som ”simple” och ”clean”. Det är säkert Objective C-programmeraren i mig som talar men jag är ett fan av kod som är tydlig och lättförståelig, även om det innebär att den är längre och mera mångordig än vad som vore nödvändigt för samma funktion.
(Also linked from Twitter.)
blog.henrikcarlsson.se mentioned this on blog.henrikcarlsson.se.
Replies and comments
Jon Börjesson
3 maj, 2016 22:22@synvila Vitsen med Collection är väl att få OO kod. Finns ju array_map() och array_reduce() så kan du köra med array. @emomilol