{"id":228764,"date":"2022-11-01T17:45:00","date_gmt":"2022-11-01T14:45:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228764"},"modified":"2022-11-09T04:11:16","modified_gmt":"2022-11-09T01:11:16","slug":"om-att-skriva-smart-kod-med-arrayer-i-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/om-att-skriva-smart-kod-med-arrayer-i-wordpress\/","title":{"rendered":"Om att skriva smart kod med arrayer i WordPress"},"content":{"rendered":"\n<p>Jag vet inte om det finns en standard f\u00f6r vad som anses vara &quot;smart kod&quot;, men jag tror att om du skulle visa olika kodexempel f\u00f6r programmerare, skulle de kunna veta det n\u00e4r de ser det.<\/p>\n<p>Och det brukade vara en tid i min karri\u00e4r d\u00e5 jag var mycket intresserad av att skriva smart kod. Men ju \u00e4ldre jag blir och ju mer jag jobbar med att underh\u00e5lla projekt, desto mindre angel\u00e4gen \u00e4r jag om att skriva smart kod och desto mer intresserad \u00e4r jag av att skriva kod som \u00e4r tydlig och l\u00e4st och d\u00e4rmed underh\u00e5lls.<\/p>\n<p>Smart kod \u00e4r f\u00f6r f\u00e5glarna. Urs\u00e4kta dessa dumma ordvitsar.<\/p>\n<p>N\u00e4r vi arbetar med WordPress har vi troligen att g\u00f6ra med arrays mycket, s\u00e4rskilt med tanke p\u00e5 att s\u00e5 mycket av WordPresss interna funktioner \u00e4r byggda p\u00e5 dem (ja, det finns vissa objekt ocks\u00e5, men arrays \u00e4r genomg\u00e5ende).<\/p>\n<p>Hur ser d\u00e5 smart kod med arrayer ut i WordPress kontra mindre smart kod? Och dessutom, ska vi undvika att sikta p\u00e5 att skriva smart kod?<\/p>\n<h2>Smart kod med arrayer<\/h2>\n<p>Array-funktioner \u00e4r utan tvekan en av de st\u00f6rsta upps\u00e4ttningen funktioner i PHP.<\/p>\n<p>Att skriva smart kod med WordPress verkar naturligtvis passa delvis och delvis med milj\u00f6n, eller hur? Jag s\u00e4ger inte alls att det \u00e4r d\u00e5ligt. Jag s\u00e4ger bara att n\u00e4r du har funktioner i det globala namnutrymmet som fungerar med arrayer som returnerar arrayer, \u00e4r det alldeles f\u00f6r l\u00e4tt att skriva kapslade anrop som i slut\u00e4ndan kr\u00e4ver lite mer mentalt arbete f\u00f6r att analysera vad koden g\u00f6r.<\/p>\n<p>Visst, att skriva om det \u00e4r en sak, men det kanske \u00e4r meningsfullt att titta p\u00e5 ett exempel p\u00e5 hur smart kod med WordPress kan se ut och sedan hur den kan omstruktureras.<\/p>\n<h3>Ett exempel<\/h3>\n<p>S\u00e4g till exempel att vi har ett inl\u00e4gg och att vi uppdaterar inl\u00e4ggsutdraget s\u00e5 att ett namn som finns i utdraget m\u00e5ste tas bort. N\u00e4r detta h\u00e4nder \u00e4r inte n\u00f6dv\u00e4ndigtvis viktigt (\u00e4ven om <a href=\"https:\/\/codex.wordpress.org\/Plugin_API\/Action_Reference\/delete_user\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">delete_user<\/a> inte \u00e4r sv\u00e5rt att f\u00f6rest\u00e4lla sig, eller hur?)<\/p>\n<p>Fr\u00e5n b\u00f6rjan f\u00e5r vi:<\/p>\n<ul>\n<li>inl\u00e4ggets ID,<\/li>\n<li>namnet p\u00e5 personen som ska tas bort.<\/li>\n<\/ul>\n<p>Ett s\u00e4tt att g\u00f6ra detta skulle vara att anv\u00e4nda en kombination av <a href=\"https:\/\/php.net\/manual\/en\/language.types.array.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.array-map.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_map<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.explode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">explode<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.array-diff.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">array_diff<\/a>, <a href=\"https:\/\/php.net\/manual\/en\/function.implode.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">implode<\/a>. Allt av denna anledning:<\/p>\n<ul>\n<li>array f\u00f6r att skapa en array av personen (eftersom den, som en array, kr\u00e4vs senare),<\/li>\n<li>array_map f\u00f6r att trimma vitt utrymme efter att ha exploderat utdraget till en array,<\/li>\n<li>array_diff f\u00f6r att hitta str\u00e4ngarna som finns kvar efter att ett namn tagits bort,<\/li>\n<li>och implodera f\u00f6r att bygga om resultatet tillbaka till en str\u00e4ng f\u00f6r post_excerpt.<\/li>\n<\/ul>\n<p>Okej, med det sagt, h\u00e4r \u00e4r ett exempel p\u00e5 hur smart kod i WordPress <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13ff8610716de3cb5b5e612d80267e9e#file-00-clever-code-with-arrays-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">kan se ut<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Get the excerpt from the incoming post.\n$post    = get_post( $post_id );\n$excerpt = $post-&gt;post_excerpt;\n\n\/**\n * And we update the post content without the information (and we don't need\n * paragraph tags).\n *\/\n$event_post-&gt;post_excerpt = \n  apply_filters( \n    'the_excerpt', \n    implode( ', ', \n      array_diff( \n        array_map( \n          'trim', \n          explode( ',', $excerpt) ), \n      array( $name) ),\n    ),\n  );<\/code><\/pre>\n<p>Men det \u00e4r mycket h\u00e4ckning, och vi m\u00e5ste oftast b\u00f6rja utifr\u00e5n och in och veta vad varje funktion g\u00f6r, eller hur?<\/p>\n<p>F\u00f6r att rensa upp det m\u00e5ste vi fortfarande ta itu med funktionerna som listas ovan, men vi kan dela upp saker och ting i enklare att l\u00e4sa steg (tillsammans med kodkommentarer) f\u00f6r att g\u00f6ra det l\u00e4ttare f\u00f6r en annan utvecklare att analysera.<\/p>\n<p>Kanske kan det se <a href=\"https:\/\/gist.github.com\/tommcfarlin\/13ff8610716de3cb5b5e612d80267e9e#file-00-verbose-with-arrays-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ut s\u00e5 h\u00e4r<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/\/ Get the excerpt from the incoming post.\n$post    = get_post( $post_id );\n$excerpt = $post-&gt;post_excerpt;\n\n\/\/ Remove the name from the array of names in the excerpt.\n$to_remove = array( $name );\n$names     = array_map( 'trim', explode( ',', $excerpt) );\n$result    = array_diff( $names, $to_remove );\n\n\/\/ Now creae the new excerpt.\n$new_excerpt = implode( ', ', $result );\n\n\/**\n * And we update the post content without the information (and we don't need\n * paragraph tags).\n *\/\n$event_post-&gt;post_excerpt = apply_filters( 'the_excerpt', $new_excerpt );<\/code><\/pre>\n<p>Nu, \u00e4r det h\u00e4r s\u00e4ttet att g\u00f6ra det? jag vet inte. Men det \u00e4r ett s\u00e4tt att g\u00f6ra det. Och det \u00e4r en av de situationer som \u00e4r l\u00e4ttare att l\u00e4sa och f\u00f6lja.<\/p>\n<p>S\u00e5 det kanske inte \u00e4r att skriva smart kod i WordPress, men jag vet inte \u2013 och tror inte \u2013 det borde vara m\u00e5let.<\/p>\n<h2>Ska vi str\u00e4va efter att skriva smart kod?<\/h2>\n<p>WordPress <a href=\"https:\/\/make.wordpress.org\/core\/handbook\/best-practices\/coding-standards\/php\/#clever-code\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">-handboken<\/a> s\u00e4ger f\u00f6ljande:<\/p>\n<blockquote>\n<p>Generellt sett \u00e4r l\u00e4sbarhet viktigare \u00e4n smarthet eller korthet.<\/p>\n<\/blockquote>\n<p>Och forts\u00e4tter sedan med att ge ett exempel. Vid denna tidpunkt i min karri\u00e4r tenderar jag att h\u00e5lla med:<\/p>\n<ul>\n<li>smart kod \u00e4r inte lika med mer presterande kod,<\/li>\n<li>smart kod tar ofta l\u00e4ngre tid att hoppa igenom fler mentala ramar \u00e4n utf\u00f6rlig kod,<\/li>\n<li>smart kod \u00e4r d\u00e4rf\u00f6r sv\u00e5rare att underh\u00e5lla, s\u00e4rskilt n\u00e4r man hoppar in i en \u00e4ldre kodbas.<\/li>\n<\/ul>\n<p>Slutligen tror jag att olika m\u00e4nniskor kanske anser att viss kod \u00e4r smartare \u00e4n andra, men det finns ocks\u00e5 kod som m\u00e5nga av oss skulle anse som ett f\u00f6rs\u00f6k att vara smartare \u00e4n inte.<\/p>\n<p>I slut\u00e4ndan, str\u00e4va efter att skriva kod hur det \u00e4n \u00e4r du vill skriva men skriv med en annan utvecklare i \u00e5tanke: Om du n\u00e5gonsin har klagat \u00f6ver att en kodbit \u00e4r sv\u00e5r att tyda vid f\u00f6rsta anblicken, \u00e4r det troligt att det var d\u00e5ligt skrivet eller att det var en f\u00f6rs\u00f6k att vara smart. S\u00e5 var inte den d\u00e4r killen eller tjejen som skickar pengarna till n\u00e4sta utvecklare.<\/p>\n<p>Str\u00e4va ist\u00e4llet efter att skriva tydlig kod och anv\u00e4nd kommentarer n\u00e4r det beh\u00f6vs.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hur ser smart kod med arrayer ut i WordPress kontra mindre smart kod? Och ska vi undvika att sikta p\u00e5 att skriva smart kod?<\/p>\n","protected":false},"author":1,"featured_media":220968,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[901,807,724,868],"tags":[1173],"class_list":["post-228764","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-koda","category-php-9","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228764","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=228764"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/228764\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/220968"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=228764"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=228764"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=228764"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}