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 :

$label = ($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 ($firstItem?->visits) {
    $label = 'Has visits';
else {
    $label = 'No visits';
}

Ces quelques lignes forment un bloc logique que vous pourrez, à loisir, encapsuler dans une méthode avec un nom approprié désignant ses intentions !

Good programmer write code that humans Can understand ~ Martin Fowler