Monday, January 16, 2017

Week 10 - Week 13 -- Exceptions, Date and Time API, Lambda Expressions

Week11
Rationale and Types of Exceptions
- Exception digunakan di Java untuk meng-handle events yang memengaruhi flow normal dari eksekusi app.
- Keuntungan exceptions:
1. memisahkan error-handling code dari main code program
2. menghandle error sampai call stack
3. dapat mengelompokkan exceptions yang mirip"
- Exceptions di java didefine oleh instance dr class Throwable. Class Exceptions menginclude class Throwable serta subclassnya.
- Checked Exceptions: dicek oleh compiler pada saat compile time. cth ClassNotFoundException
- Unchecked Exceptions: dicek pada saat runtime, merupakan subclass dari RuntimeException, termasuk RuntimeException sendiri. kebanyakan terjadi karena programming errors. cth: NullPointerException
- Error: uncheckes exceptions yang menandakan kondisi ekstrim yang mampu membuat app kita fail. contoh: OutOfMemoryError
- Defining Exceptions: exceptions harus memiliki 2 constructor, yang satunya tidak memiliki parameter apapun dan satunya memiliki 1 param String.
- gunakan keyword throw untuk melempar exceptions di Java.
- propagating exceptions: exceptions dapat diberikan sampai pada class main. gunakan keyword throws.
- Alter the program flow:
1. try-catch: basic, kalo ada exceptions statement setelah throw gadilakukan
2. try-finally: finally slalu dilakukan kecuali kalau program di-terminate sebelum sampe ke finally
3. try-catch-finally
4. try-with-resource-statement: didalam kurung try ada statement/code, setelah itu baru throw ...
5. multi-catch clause: dlm 1 try ada banyak catch.

Common Checked Exceptions:
- ClassNotFoundException
- NoSuchMethodException
- FileNotFoundException
- IOException
- SQLException
- InterruptedIOException

Common Unchecked Exceptions:
- IllegalArgumentException
- NumberFormatException
- ArrayIndexOutOfBoundsException
- IndexOutOfBoundsException
- NullPointerException
- IllegalStateException
- ClassCastException
- ArithmeticException

Common Errors:
- AssertionError
- ExceptionInInitializeError
- VirtualMachineError
- OutOfMemoryError
- NoClassDefFoundError

Assertions: statement pada program yang memungkinkan programmer untuk menguji asumsi dari program mereka.
- boolean value
- cth: assert stock>qty;
     : assert stock>qty : "stock is less than qty";

LAB SESSION
- using assertions
- create custom exception class
- try-with-resource stat
- multi-catch clause

Week12
Programming with Date & Time API
- 3 calendar data creation classes:
1. LocalTime Class: terdapat bbrp method declarations untuk mendukung pembuatan time (tanpa date / time zone).
cth: Localtime a = LocalTime.now(); LocalTime b = LocalTime.parse("12:00", DateTimeFormatter.ISO_TIME); LocalTime c = LocalTime.of(12,30,38);

2. LocalDate Class
cth: LocalDate d = LocalDate.now(); LocalDate e = LocalDate.parse("2016-10-01"); LocalDate f = LocalDate.of(2015,12,5);

3. LocalDateTime Class

Calendar Data Manipulation
- plus/minus methods:
LocalDateTime a = LocalDateTime.now();
a = a.plusYears(1).plusMonths(2).plusWeeks(3).plusDays(4).plusHours(5).plusMinutes(6).plusSeconds(7).plusNanos(8) //kalo minus tinggal ganti plus sama minus aja

Calendar Periods:
- Period: date-based amount terdiri dari tahun, bulan, hari
- Duration: time-based amount terdiri dari hari, jam, menit, detik, nanoseconds
- method dari class Period yang sering digunakan:
1. of[interval]
2. Parse
3. get[interval]
4. with[interval]
5. plus[interval]
6. minus[interval]
7. is[state]
8. between

Week13
Lambda Expression: closure-like construct (closure: kemampuan sebuah function yang dapat disimpan sebagai variabel).
- Lambda Expression support Functional Programming in Java & memiliki bbrp benefit antara lain:
1. Code Reduction -> to a single line
2. Improvement to the collection Library (easier iteration, filtering, sorting, counting, etc)
3. Improvement to the concurrency library
4. Lazy evaluation support through streams.

- Lambda Expression harus memiliki sebuah Functional Interface yang disebut juga sebagai SAM (Single Abstract Method)
- Functional Interface harus punya exacly 1 abstract method. Dapat memiliki satu atau lebih method default ataupun static methods.
- basic syntax dari lambda expression:
  (parameter list) -> { statements; }

- Untuk mengimplementasikan lambda expression dengan functional interface, kita dapat melakukan refactoring sebuah anonymous inner class kedalam lambda expression menggunakan Comparator FI.
- Comparator interface implemented from a class
- Comparator interface used with an anonymous inner class
- Comparator functional interface used with a lambda expression

cth ketika sorting sbh ArrayList dengan lambda expression, kita dapat menentukan desired ordering menggunakan Comparator.

- Predicate Functional Interface: utk tes boolean value

0 comments: