2017-02-28 1 views
3

J'ai vu cette syntaxe avant, où j'ai quelque chose que je veux faire si une condition est vraie je l'écrirais comme ça.Qu'est-ce que le vide (conditionnel && action) en tapuscrit

() => void (x === 0 && this.setZero()) 

Pourquoi appliquez-vous x === 0 && this.setZero() dans la zone vide? Quel est le nom de ce modèle?

L'annulation retournera indéfinie mais si this.setZero() renvoie undefined, pourquoi ne pas le faire?

() => x === 0 && this.setZero() 

Les deux sont valables. L'emballer avec du vide est-il juste plus sûr?

Répondre

3

Ceci est juste une chose JavaScript. Est un opérateur JavaScript très étrange: il évalue son opérande, puis prend comme résultat undefined. Ainsi, votre

() => void (x === 0 && this.setZero()) 

... est une fonction de flèche qui retournera toujours undefined, avec le possible effet secondaire d'appeler this.setZero() (si x === 0).

Pourquoi vous enveloppez x === 0 & & this.setZero() en vide?

Alors que la fonction toujours rendements undefined plutôt que de retourner false (si x === 0 est faux) ou le résultat de this.setZero() (si x === 0 est true).

Quel est le nom de ce modèle?

Je ne pense pas qu'il en a un, spécifiquement.

Votre alternative () => x === 0 && this.setZero() renverrait false ou le résultat de this.setZero().

Je vais simplement remarquer que

() => void (x === 0 && this.setZero()) 

fait exactement ce que

() => { x === 0 && this.setZero(); } 

le fait, puisqu'une fonction verbeux flèche ne retourne rien à moins que vous utilisez return; Une autre alternative serait:

() => { if (x === 0) this.setZero(); } 
+0

Pour expliquer pourquoi il peut être utilisé ici, il est probable que cette fonction de flèche est utilisée dans la continuité de la promesse, et le développeur ne spécifiquement * pas * veulent retourner soit 'false' ou le résultat de 'this.setZero()', mais simplement avoir la promesse/thenable être rempli avec rien. 'void' est une façon très compacte d'atteindre ce résultat. – cdhowie

+0

@cdhowie: Heh, je viens d'ajouter ça (mais pas le bit de promesse). Notez que 'void' est moins compact qu'une flèche verbeuse aurait été dans ce cas. –

+2

Bien qu'il soit compact, il est évidemment plus déroutant. Code confus conduit à des bugs et des problèmes de maintenance.Mieux vaut être bavard et laisser faire les minifieurs. –