En tiedä, onko olemassa standardia "älykkääksi koodiksi" pidetylle koodille, mutta luulen, että jos näyttäisit erilaisia koodinäytteitä ohjelmoijille, he tietäisivät sen nähdessään sen.
Ja joskus urallani olin hyvin kiinnostunut fiksun koodin kirjoittamisesta. Mutta mitä vanhemmaksi tulen ja mitä enemmän töitä teen projektien ylläpidossa, sitä vähemmän olen huolissani älykkään koodin kirjoittamisesta ja sitä enemmän olen kiinnostunut kirjoittamaan selkeää ja luettavaa ja siten ylläpidettävää koodia.
Fiksu koodi on linnuille. Anteeksi nämä typerät sanaleikit.
Kun työskentelemme WordPressin kanssa, käsittelemme todennäköisesti paljon taulukoita, varsinkin kun otetaan huomioon, että suuri osa WordPressin sisäisistä osista on rakennettu niille (kyllä, on myös joitain objekteja, mutta taulukot ovat kaikkialla).
Miltä sitten älykäs koodi taulukoineen näyttää WordPressissä verrattuna vähemmän älykkääseen koodiin? Ja lisäksi, pitäisikö meidän välttää pyrkimystä kirjoittaa fiksua koodia?
Älykäs koodi taulukoilla
Taulukkofunktiot ovat luultavasti yksi PHP:n suurimmista funktioista.
Luonnollisesti älykkään koodin kirjoittaminen WordPressillä näyttää sopivan osittain ja osittain ympäristöön, eikö niin? En sano, että se olisi ollenkaan huono. Sanon vain, että kun globaalissa nimiavaruudessa on toimintoja, jotka toimivat taulukoita palauttavien taulukoiden kanssa, on aivan liian helppoa kirjoittaa sisäkkäisiä kutsuja, jotka vaativat lopulta hieman enemmän henkistä työtä koodin tekemisen jäsentämiseksi.
Toki siitä kirjoittaminen on yksi asia, mutta ehkä on järkevää tarkastella esimerkkiä siitä, miltä WordPressin älykäs koodi voi näyttää ja kuinka se voidaan sitten muuttaa.
Esimerkki
Oletetaan esimerkiksi, että meillä on viesti ja päivitämme viestikatkelman niin, että otteessa oleva nimi on poistettava. Kun tämä tapahtuu, ei välttämättä ole tärkeää (vaikka delete_user ei ole vaikea kuvitella, eikö?)
Alusta alkaen meille on annettu:
- viestin tunnus,
- poistettavan henkilön nimi.
Yksi tapa tehdä tämä olisi käyttää yhdistelmää array, array_map, explode, array_diff, implode. Kaikki tästä syystä:
- taulukko henkilön taulukon luomiseksi (koska sitä taulukkona tarvitaan myöhemmin),
- array_map tyhjän tilan leikkaamiseen sen jälkeen, kun ote on räjäytetty taulukkoon,
- array_diff nimen poistamisen jälkeen jäljellä olevien merkkijonojen etsimiseen,
- ja implode rakentaaksesi tuloksen takaisin merkkijonoksi post_excerptille.
Okei, tässä on esimerkki siitä, miltä WordPressin älykäs koodi voi näyttää :
<?php
// Get the excerpt from the incoming post.
$post = get_post( $post_id );
$excerpt = $post->post_excerpt;
/**
* And we update the post content without the information (and we don't need
* paragraph tags).
*/
$event_post->post_excerpt =
apply_filters(
'the_excerpt',
implode( ', ',
array_diff(
array_map(
'trim',
explode( ',', $excerpt) ),
array( $name) ),
),
);
Mutta se on paljon sisäkkäistä, ja meidän on yleensä aloitettava ulkopuolelta sisäänpäin ja tiedettävä, mitä kukin toiminto tekee, eikö niin?
Sen puhdistamiseksi meidän on vielä käsiteltävä yllä lueteltuja toimintoja, mutta voimme jakaa asiat helpommin luettaviksi vaiheiksi (koodikommenttien ohella), jotta toisen kehittäjän on helpompi jäsentää.
Ehkä se voisi näyttää tältä :
<?php
// Get the excerpt from the incoming post.
$post = get_post( $post_id );
$excerpt = $post->post_excerpt;
// Remove the name from the array of names in the excerpt.
$to_remove = array( $name );
$names = array_map( 'trim', explode( ',', $excerpt) );
$result = array_diff( $names, $to_remove );
// Now creae the new excerpt.
$new_excerpt = implode( ', ', $result );
/**
* And we update the post content without the information (and we don't need
* paragraph tags).
*/
$event_post->post_excerpt = apply_filters( 'the_excerpt', $new_excerpt );
Onko se nyt oikea tapa tehdä se? Minä en tiedä. Mutta se on tapa tehdä se. Ja se on yksi niistä tilanteista, joita on helpompi lukea ja seurata.
Joten ehkä se ei ole älykkään koodin kirjoittamista WordPressiin, mutta en tiedä – enkä usko – sen pitäisi olla tavoite.
Pitäisikö meidän pyrkiä kirjoittamaan älykästä koodia?
WordPress-käsikirja kertoo seuraavaa:
Yleisesti ottaen luettavuus on tärkeämpää kuin älykkyys tai lyhyys.
Ja sitten antaa esimerkki. Tässä vaiheessa uraani olen samaa mieltä:
- älykäs koodi ei tarkoita tehokkaampaa koodia,
- älykkäällä koodilla kestää usein kauemmin hypätä enemmän henkisistä vanteista kuin monisanainen koodi,
- fiksua koodia on siten vaikeampi ylläpitää varsinkin kun hyppäät vanhempaan koodikantaan.
Lopuksi uskon, että eri ihmiset saattavat pitää jotakin koodia älykkäämpänä kuin toiset, mutta on myös koodia, jota monet meistä pitävät yrityksenä älykkäämpänä kuin ei.
Pyri viime kädessä kirjoittamaan koodia haluamallasi tavalla, mutta kirjoita toinen kehittäjä mielessä: Jos olet koskaan valittanut siitä, että koodinpätkä on vaikea tulkita ensi silmäyksellä, on todennäköistä, että se oli huonosti kirjoitettu tai se oli yrittää olla fiksu. Älä siis ole se kaveri tai tyttö, joka siirtää vastuun seuraavalle kehittäjälle.
Pyri sen sijaan kirjoittamaan selkeä koodi ja käytä tarvittaessa kommentteja.