Swift – Imperative vs. Declarative

SwiftUI follows a different approach than its predecessor UIKit. With SwiftUI you program apps declaratively. The old UIKit followed the imperative approach. The difference here is that with UIKit we always had to say how an exact sequence should look. With SwiftUI we only say what we want.

We would like to change our car tires. As a thought experiment, we can imagine it like this:

Imperative

Get the keys, get in the car, drive to the workshop, wait until the tires are changed, pay, get back in the car, drive home.

Declarative

I need my tires changed.

It is important to remember that the imperative means HOW we achieve it and the declarative WHAT we want.

We can also project this onto code. We want a method that checks whether a certain number is present in an array.

Imperative

Declarative

As we can see in this declarative implementation, it doesn’t matter to us how we get the result. We just want to know if the number is in the array. Without all the fuss. It’s different in the imperative implementation, where we describe in detail how we want to find the number.

The example above is more general. In SwiftUI and UIKit it could look like this:

UIKit (Imperative)

SwiftUI (Declarative)

Both code examples have the same result. We remember that in the imperative approach, everything must be described in detail how something should work and that can be seen very well in this example. The SwiftUI example is kept short and concise. We just want something, how we should get there is irrelevant to us.

Swift – Imperativ vs. Deklarativ

SwiftUI verfolgt einen anderen Ansatz als sein Vorgänger UIKit. Mit SwiftUI programmiert man Apps Deklarativ. Das Alte UIKit ist dem Imperativen Ansatz gefolgt. Der Unterschied hierbei ist, dass wir bei UIKit immer sagen mussten, wie ein genauer Ablauf aussehen soll. Bei SwiftUI sagen wir nur was wir haben möchten.

Wir möchten an unserm Auto Reifen wechseln. Als Gedankenexperiment können wir uns das so vorstellen:

Imperativ

Schlüssel holen, ins Auto einsteigen, zur Werkstatt fahren, warten bis Reifen gewechselt sind, bezahlen, wieder ins Auto einsteigen, nach Hause fahren.

Deklarativ

Die Reifen sollen an meinem Auto gewechselt werden.

Wichtig ist hierbei das wir uns merken das imperativ bedeutet WIE wir es erreichen und deklarativ WAS wir haben wollen.

Das Ganze können wir auch auf Code projizieren. Wir wollen eine Methode haben, die überprüft, ob eine bestimmte Zahl in einem Array vorhanden ist.

Imperativ

Deklarativ

Wie wir auch hier bei der deklarativen Implementation sehen, ist es uns egal, wie wir auf das Ergebnis kommen. Wir wollen nur wissen, ob die Zahl in dem Array vorhanden ist. Ohne großes schnick schnack. Anders ist es hingegen bei der imperativen Implementierung, wo wir genaustens beschreiben, wie wir die Zahl zu finden möchten.

Das Beispiel von oben gilt eher für die Allgemeinheit. In SwiftUI und UIKit kann das folgendermaßen aussehen:

UIKit (Imperativ)

SwiftUI (Deklarativ)

Beide Codebeispiele haben das gleiche Ergebnis. Wir erinnern uns, dass bei dem imperativen Ansatz alles genaustens beschrieben werden muss, wie etwas funktionieren soll und genau das kann man wunderbar an diesem Beispiel erkennen. Am SwiftUI Beispiel ist alles hingegen kurz und knapp gehalten. Wir wollen nur etwas haben, wie wir dort hinkommen sollte uns egal sein.