Sobes.tech
Middle+

Weet u wat desugaring is?

sobes.tech AI

Antwoord van AI

Desugaren is het proces waarbij syntactische suiker (hoog-niveau syntactische constructies die het schrijven van code vergemakkelijken) wordt omgezet in lagere, meer primitieve constructies die gemakkelijker door de compiler of de uitvoeromgeving kunnen worden verwerkt.

Voorbeelden in Android-ontwikkeling (Java/Kotlin):

  • Lambda-uitdrukkingen:

    // Syntactische suiker: lambda
    Runnable r = () -> System.out.println("Hallo");
    

    Desugaren zet dit om in een anonieme klasse:

    // Desugaren: anonieme klasse
    Runnable r = new Runnable() {
        @Override
        public void run() {
            System.out.println("Hallo");
        }
    };
    
  • for-each loops:

    // Syntactische suiker: for-each
    List<String> list = Arrays.asList("a", "b");
    for (String s : list) {
        System.out.println(s);
    }
    

    Desugaren zet dit om in een loop met iterator:

    // Desugaren: loop met iterator
    List<String> list = Arrays.asList("a", "b");
    for (Iterator<String> it = list.iterator(); it.hasNext(); ) {
        String s = it.next();
        System.out.println(s);
    }
    
  • Kotlin-coroutines (in oudere implementaties):

    // Syntactische suiker: suspenderende functie
    suspend fun fetchData(): String {
        delay(1000)
        return "Gegevens"
    }
    

    Desugaren (bijvoorbeeld via het genereren van een toestandsmachine) zet dit om in een lager niveau code.

Het belang van desugaren:

  • Maakt het mogelijk om meer expressieve en korte constructies (suiker) te gebruiken zonder de implementatie van de compiler/runtimete te compliceren.
  • Zorgt voor achterwaartse compatibiliteit, omdat desugared code op oudere platform- of VM-versies kan worden uitgevoerd.
  • Vereenvoudigt de analyse en optimalisatie van code door de compiler.

In Android wordt desugaren actief gebruikt in JVM/ART en build-tools (bijvoorbeeld D8/R8).