CodestrukturProgramme in ScriptformShell-Scripts mit GroovyKlassen und QuelldateienImporteImportanweisungen an beliebiger StelleStandardimporteAliasnamen für importierte TypenKlassenpfadeDen Klassenpfad konfigurierenDen Klassenpfad dynamisch erweiternGrape und @GrabGlobale FunktionenKonsolenausgaben mit print(), println() und printf()Pausieren mit sleep()Typen erweitern mit use()SyntaxabwandlungenAnweisungen mit und ohne SemikolonKeine checked ExceptionsKlassenliterale ohne classMehrfachzuweisungenthis im statischen KontextAnnotationenEinschränkungenInnere KlassenArray-InitialisiererZeichenliteraleGenerische TypenDie klassische for-SchleifeZuweisungen in BedingungenNamensregelnReservierte WörterNamen in AnführungszeichenKonventionenSichtbarkeitenTypen und Methoden standardmäßig öffentlichFelder werden zu PropertiesPrivate Member bleiben ungeschütztDatentypenAlles ist ein ObjektDynamische TypisierungDynamische MethodenauflösungTypen sind dynamisch erweiterbarDas Groovy-JDK (oder GDK)TypanpassungenImplizite TypanpassungExplizite TypanpassungLiteraleZahlenZeichenkettenEinfache AnführungszeichenDoppelte AnführungszeichenDreifache AnführungszeichenSchrägstrich und Dollar-SchrägstrichOperatorenOperatormethodenGleichheit und IdentitätWeitere OperatorenMethoden und KonstruktorenArgumentlisten ohne KlammernOptionale ParameterBenannte Parameter bei MethodenBenannte Parameter bei KonstruktorenVariable ArgumentlistenDer Spread-OperatorMethoden mit einem ParameterOptionale Return-AnweisungPropertiesKonventionelle PropertiesProperties und AnnotationenAuf Properties zugreifenDer Feldzugriff-Operator @Interne Zugriffe auf PropertiesVorhandene Properties ermittelnListen und MapsListen erzeugenAuf Listenelemente zugreifenDer Spread-Dot-OperatorMaps erzeugenAuf Map-Elemente zugreifenWertebereiche (Ranges)Funktionen als ObjekteEinfache ClosuresClosures mit expliziten ParameternClosures als MethodenreferenzenClosures als MethodenparameterTraitsTraits definierenTraits implementierenDas Problem der MehrfachvererbungInstanzspezifische Implementierung von TraitsKontrollstrukturenDie Groovy-WahrheitFor-Each-SchleifenMächtiges Switch-CaseSwitch mit EnumsBedingte AusdrückeInformative Zusicherungen mit assertAssert-SyntaxVielsagende Fehlermeldungen