's Picture

The Javashank Redemption

Postad av Hugo Millwood under Android

Varje morgon slår vi i Android-teamet oss ner vid våra datorer som har snabba processorer, obehagligt mycket RAM och mjukvara som utnyttjar det till fullo. Vi öppnar upp Android Studio och blir bemötta av en alldeles för vanlig syn:

mToastButton = (Button) findViewById(R.id.toastButton);
mToastButton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        Toast.makeText(
            view.getContext(),
            "You're toast!",
            Toast.LENGTH_LONG
        ).show();       
    }
});

Det vill säga standardkod som är näst-intill inbyggt i hur man skriver Android-appar.

Vi sitter fastkedjade i fängelset som är Java 1.6. Java 1.8 släpptes 2014, men inte till Android och det verkar inte som om det kommer någon gång snart. Det finns många bibliotek från olika tredjeparter som försöker tackla problemen, men bäst vore ju om språket var designat så att problemen inte skedde alls (eller åtminstone var mindre frekventa).
Du kanske märker att vi försöker bygga lite spänning.

En varm applåd för Kotlin, damer och herrar. Sveriges modigaste utvecklingsavdelning har inte börja skriva "Expressen <3 Kotlin" i sten riktigt än, men hittills gillar vi det vi ser.

Kotlin är ett relativt nytt språk som tagits fram av JetBrains och är 100% kompatibelt med Java-kod, men ger utvecklaren smaskigt syntaktiskt socker, undviker NullPointerExceptions till varje pris och tar bort mycket standardkod (och nu har vi inte ens nämnt lambda-uttryck, type inference och high-order functions).

Låt oss titta på hur koden ovan kan se ut i Kotlin:

import kotlinx.android.synthetic.activity_main.toastButton
...
mToastButton.setOnClickListener{toast("You're toast!"}

Less på nullcheckar?

string?.length()

Kotlin garanterar att ovanstående metodanrop bara kallas om och endast om string inte är lika med null (Frågetecknet är en ny typ av operator som kallas "safe call operator" eller "säkert anrop"-operatorn på svenska.

Det som i Java kan se ut så här:

class Person {
  private final String firstName = "Hugo";
  private final String lastName = "Millwood";
  private int age = 23;

  public String getFirstName() {
    return firstName;
  }

  public String getLastName() {
    return lastName;
  }

  public int getAge() {
    return age;
  }

  public void setAge(final int age) {
    this.age = age;
  }

  public String getMessage() {
    return "First name: " + firstName + ", Last name: " + lastName + ", Age: " + age;
  }
}

Kan skrivas i Kotlin så här:

class Person {
  val firstName = "Hugo"
  val lastName = "Millwood"
  var age = 23

  fun getMessage(): String {
    return "First name: ${firstName}, Last name: ${lastName}, Age: ${age}"
  }
}

Vips så blev 25 rader bara 9. Vill man verkligen pressa ner kod kan vi skriva:

data class Person (val firstName: String = "Hugo", val lastName: String = "Millwood", var age: Int = 23) {}

Kallar du sedan println(Person()) skrivs följande ut

Person(firstName=Hugo, lastName=Millwood, age=23)

Vi får inte samma fina sträng som getMessage()™ ger oss och läsbarheten har nog blivit lite sämre, men här ser vi vad Kotlin kan komprimeras ner till.

Det här inlägget täcker inte en tiondel av det som språket erbjuder, men vi i teamet följer noga nya tekniker, som Kotlin, för att ständigt förbättra våra produkter. Vem vet: magiska saker är möjligtvis på gång.

:wq

Hugo Millwood

PS. Missa inte vår nästa bloggpost, följ oss på Twitter!

Till startsidan