Guava – Google Core Libraries for java – Sir Charles Antony Richard Hoare



Guava – Google Core Libraries for java – Sir Charles Antony Richard Hoare

0 0


guava-libraries-presentation

Notes / presentation of (parts of) guava-libraries.

On Github andrel / guava-libraries-presentation

Guava

Google Core Libraries for java

+ historietime: null

André Lindhjem Kantega

Google java-biblioteker

collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O . .

 

Biblioteker som Google bruker for å gjøre Java litt enklere å leve med.

Sir Charles Antony Richard Hoare

typesystemet i ALGOL W

I call it my billion-dollar mistake. It was the invention of the null reference in 1965. [...] But I couldn't resist the temptation to put in a null reference, simply because it was so easy to implement. This has led to innumerable errors, vulnerabilities, and system crashes, which have probably caused a billion dollars of pain and damage in the last forty years.

null i Java

  • Da ønsker vi "fail fast" istedet for at det smeller senere. DB-problematikk... Haskey()..
  • null er vag: Kan bety feil/suksess/whatever.
  • Punkterer typesystemet. T betyr alltid T eller null.union type / sum type
  • Oppmuntrer til if (var != null) Ofte kan essensen forsvinne i null-sjekking.
  • Collections tillater null-verdierHashMap.put("something", null);
  • Collections returerner null ved manglende verdi.map.get("something"); .. må bruke containsKey().
  • Årsak til mange feil . .

"top ten java errors"

(drum roll) And the number one error that Java programmers make !!!!! 1. Null pointers! Null pointers are one of the most common errors that Java programmers make. Compilers can't check this one for you - it will only surface at runtime, and if you don't discover it, your users certainly will. For å ikke snakke om andre programmeringsspråk (C).

Tiltak

En (blanding?) av:

  • Regler / standarder
  • Javadoc
  • Tester
  • Findbugs
  • Annoteringer

Guava collections.

Living with null-hostile collections

Mange collections tillater ikke null-verdier (feks: immutable-versjoner av Set, Map, List).

Flere collections

  • Multiset
  • Multimap
  • ClassToInstanceMap
  • BiMap
  • Table
  • osv . .

Telle antall forekomster

Vanlig problem å komme borti.

Map<String, Integer> forekomster = new HashMap<String, Integer>();
for (String ord : alleOrd) {
    Integer antall = forekomster.get(ord);
    if (antall == null) {
        forekomster.put(ord, 1);
    } else {
        forekomster.put(ord, antall + 1):
    }
}

Guava-måten

Slik gjør vi det med MultiSet.

MultiSet<String> ordSett = HashMultiset.create();
ordSett.addAll(alleOrd);
// ordSett.count("sykkel"); antall som "int".

Optional<T>

  • Optional brukes der vi i dag bruker null for å indikere fravær av verdi.
  • Idiot-sikring - utvikler må aktivt ta stilling til at en Optional kan ha "fravær av verdi". Erfaringer fra feks Scala - NPE forekommer skjeldent.
  • Erfaringer fra språk med liknende typer er at problemer rundt null nesten ikke forekommer. Option i Scala, Maybe i Haskell

Optional<T>

Med verdi.

Optional<Integer> kanskje = Optional.of(5);
kanskje.isPresent(); // true
kanskje.get(); // returnerer 5

Fravær av verdi.

Optional<Integer> kanskje = Optional.absent(); // tom verdi
kanskje.isPresent(); // false
kanskje.or(6); // returnerer 6
kanskje.asSet(); // returnerer et tomt sett.
kanskje.get(); // IllegalStateException!

Generelt om guava

Ikke rocket science, men:

  • Mange brukere.
  • Mye vekt på API-design.
  • Brukes i "inner loop"-tilfeller.

Lenker