2013-08-25 23 views
18

czasami napisać kod jak:Krótki notacja dla coffeescript try/catch

try doSomething() 
catch e 
    handleError e 

który nie jest to, co ładne i czyste kod coffeescript powinien wyglądać.

Czy istnieje sposób, aby napisać:

try doSomething() 
catch e handleError e #<-- will not compile 

będzie to zaoszczędzić mi około 33% linii kodu w moim sprawozdaniu try/catch;)

Odpowiedz

38

pisania try/catch jednej wkładki prace jak if-then jednej wkładki lub pętlę jednej wkładki wykorzystujące then kluczowe:

try doSomething() 
catch e then handleError e 
finally cleanUp() 

można nawet mieć go w jednej linii, jeśli chcesz:

try doSomething() catch e then handleError e finally cleanUp() 
+0

Również 'then' jest opcjonalne, a żadne'; '' s nie są wymagane, gdy je wszystkie zsumujesz. A więc jest to również poprawne: 'try doSomething() catch e then handleError e finally cleanUp()' – Webthusiast

+1

Gdy ma się 'catch e' i' handle e' w jednym wierszu, nadal potrzebujesz 'then' w przeciwnym razie nie skompiluje: http : //coffeescript.org/#try: try% 20doSomething% 28% 29% 0Acatch% 20e% 20handleError% 20e% 0Afinally% 20cleanUp% 28% 29 – Juve

+0

Przepraszam, byłem niejasny, miałem na myśli "klauzulę' then'- * * jest opcjonalne. Dzięki za komentarz. – Webthusiast

0

Trasy wpis od https://github.com/jashkenas/coffeescript/issues/2413:

FWIW odkryłem można napisać

try 
    compute something 
catch error 
    handle error 
unless error? 
    handle success 

Jest to możliwe, ponieważ CS stawia zmienną klauzuli catch do otaczającego zakresu, który JS robi nie robić. Można nawet argumentować, że powiedzenie unless error? jest jaśniejsze niż oba else (nie jest to klauzula if) i continue (to nie jest pętla) w tej pozycji.

Ludzie, którzy nalegają na oneliners może nawet napisać

try compute something catch error then handle error unless error? then handle success 

która jest nieco chłodny i nieco nieczytelne.

Klauzula musi być przed z unless, oczywiście.