Be clear, not clever

Le code ci-dessous possède une complexité logarithmique relativement faible, il pourrait toutefois nécessiter quelques secondes pour être pleinement analysé et compris :

return ($items[0] ?? null)?->visits ? 'has visits' : 'no visits';

L'ajout d'un nullsafe sur le retour d'un null coalescent depuis une ternaire rend ce code inutilement difficile à appréhender.

La complexité de cette ligne devient purement accidentelle et constitue une coupure cognitive délétère pour la qualité de votre code.

La programmation n'est en aucun cas un exercice de concision, écrire en une ligne ce que vous auriez pu faire en plusieurs n'est à aucun moment un gage de qualité.

Le code que vous produisez aujourd'hui est irrémédiablement destiné à être lu et compris par des humains, partant de ce constat, le soin que vous apporterez à votre syntaxe et au style sera capital pour rendre votre code accessible et maintenable dans le futur.

N'hésitez pas à écrire votre code de manière plus verbeuse et directive si cela contribue à rendre votre code plus explicite :

$firstItem = $items[0] ?? null;

if (is_null($firstItem) {
    return 'No visits';
}
return $firstItem->visits ? 'Has visits' : 'No visits';

Si le caractère primitif de ce code vous interpelle, interrogez-vous sur sa teneur.

Ce code, bien que plus long que le précédent, possède exactement la même complexité logarithmique. Il présente la même lourdeur conceptuelle mais répartie sur plusieurs lignes, il est donc peu ou prou la même chose.

Sa véritable différence consistera simplement à présenter ses conditions différemment, sous un autre angle, ce qui pourrait fluidifier le flux de lecture de la méthode.

Ne recherchez pas les tournures de code les plus concises et complexes car ce que vous gagnerez en lignes, vous le perdrez souvent en lisibilité.

Votre code n’a pas besoin d’être dense pour être performant et intelligent.