Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków...

41
Expect the unexpected. Artur Dębski [email protected] @mentero

Transcript of Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków...

Page 1: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

Expect the unexpected.

Artur Dębski [email protected]

@mentero

Page 2: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

What will we talk about?

How does Ruby exception mechanism actually work?

Page 3: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

What will we talk about?

How does Ruby exception mechanism actually work?

How can we use it?

Page 4: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

What will we talk about?

How does Ruby exception mechanism actually work?

How can we use it?

How should we use it?

Page 5: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

In other words

Page 6: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

What to throw?

Page 7: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

How to throw?

Page 8: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

How not to throw

Page 9: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

When to throw?And finally…

Page 10: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

Ok. Let’s get serious

Page 11: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

Ok. Let’s get serious

Page 12: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

When we fail?“When a method's preconditions are met, but it is unable to either deliver on its promised postconditions, or to maintain the object invariant, then it is in breach of its contract; it has failed.”

Page 13: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

So… here comes exceptions

Page 14: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

RAISE

Page 15: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

RAISEor fail

Page 16: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby
Page 17: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

Call #exception to get the exception object.

Set the backtrace. (#set_backtrace)

Set the global exception variable ($!)

Throw the exception object up the call stack.

Page 18: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby
Page 19: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

The exception has been thrown. What now?

Page 20: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

Rescueto the rescue!

Page 21: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby
Page 22: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby
Page 23: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

Be careful not to ensure ‘return`

Page 24: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

Did you know…

Page 25: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

Did you know…that in Ruby…

Page 26: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

Did you know…that in Ruby…

we have ‘retry’?!

#shock #niedowierzanie

Page 27: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby
Page 28: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

re-raising

Page 29: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

re-raising

Page 30: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

STORY TIME!

Page 31: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

STORY TIME!

Page 32: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

What to do?When dealing with external service/process catch all and log

CircuitBreaker (there’s a gem)

Just exit

Page 33: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

Expect only unexpected!

…ask yourself, 'Will this code still run if I remove all the exception handlers?" If the answer is "no", then maybe exceptions are being used in non-exceptional circumstances.

Page 34: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

Need to jump up the stack?

Don’t use exceptions

Page 35: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

Your answer is -throw… catch

Page 36: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby
Page 37: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

Ok! ok! I am nearly finished!

Page 38: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

My errors

Page 39: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

Your interest zone

Page 40: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

Where to find more?

“Exceptional Ruby” - Avdi Grimm - Base for this short talk

"Object Oriented Software Construction” - Bertrand Meyer

Page 41: Uszanowanko Programowanko #3 - Expect the unexpected - krótka prezentacja o obsłudze wyjątków w języku Ruby

Thanks ;)

Artur Dębski [email protected]

@mentero