Les accolades dans les fonctions fléchées : un puzzle dévoilé
Dans les conférences de Dan Abramov, une question intrigante se pose : pourquoi les accolades provoquent-elles une fonction échouer à son test ? Enquêteons sur cette énigme.
Le code en question est une fonction flèche dans une instruction case :
case 'toggleTodo' : return ( state.map( (one) => { oneTodo( one, action ) }) );
Lorsque les accolades { } sont incluses, les tests échouent . Cependant, lorsqu’ils sont omis, le code fonctionne parfaitement. Voici ce qui se passe sous le capot.
Le pouvoir de l'accolade : blocs et retours explicites
Lorsque vous placez le corps d'une fonction entre accolades, vous créez un bloquer. Les blocs peuvent contenir plusieurs instructions, chacune se terminant par un point-virgule. Si vous souhaitez renvoyer une valeur à partir d'un bloc, vous devez utiliser explicitement une instruction return.
Dans le cas de la fonction flèche avec accolades, le corps consiste uniquement en un appel à oneTodo(). Puisqu'il n'y a pas d'instruction return explicite, la fonction renvoie undefined. Ce comportement inattendu provoque l'échec du test.
Pour remédier à cela, vous devez renvoyer explicitement le résultat de l'appel oneTodo() :
(one) => { return oneTodo(one, action); }
Corps concis : omettre les accolades pour plus de simplicité
Si vous omettez les accolades, la flèche la fonction a un corps concis. Les corps concis sont constitués d'une seule expression, dont le résultat est implicitement renvoyé.
Dans l'exemple sans accolades, le corps concis est :
(one) => oneTodo( one, action )
Cette expression est équivalente à :
return oneTodo( one, action );
En omettant les accolades, vous obtenez le même résultat sans avoir besoin d'un retour explicite déclaration.
Comprendre la différence
La clé à retenir est de comprendre la différence entre un bloc (indiqué par des accolades) et un corps concis (indiqué par l'absence d'accolades). Les blocs nécessitent des instructions return explicites, tandis que les corps concis renvoient implicitement le résultat de l'expression unique.
Ainsi, lorsque vous utilisez des fonctions fléchées dans les instructions case, n'oubliez pas d'utiliser des accolades et un return si vous avez besoin de plusieurs instructions dans le corps de la fonction. Si vous n'avez besoin que d'une seule expression, vous pouvez omettre les accolades pour créer un corps concis.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!