No ono ta Java 8 zase takové terno není. Přibyly lambdy, streamy a Optional. Lambdy nejsou zase takové terno. Streamy... viděl jsem, jak to vypadalo, když Indové dostali jasně za úkolo používat streamy, protože je to asi velice profesionální. Vznikl z toho solidní nepřehledné běsy.
Optional taky nic moc, protože to má hrozně ukecanou syntax, viz:
// safe, ugly, omission-prone
if (project != null) {
ApplicationType applicationType = project.getApplicationType();
if (applicationType != null) {
String typeDirName = applicationType.getTypeDirName();
if (typeDirName != null) {
System.out.println(typeDirName);
}
}
}
// let's assume you will get this from your model in the future; in the meantime...
Optional<Project> optionalProject = Optional.ofNullable(project);
// safe, java 8, but still ugly and omission-prone
if (optionalProject.isPresent()) {
ApplicationType applicationType = optionalProject.get().getApplicationType();
Optional<ApplicationType> optionalApplicationType = Optional.ofNullable(applicationType);
if (optionalApplicationType.isPresent()) {
String typeDirName = optionalApplicationType.get().getTypeDirName();
Optional<String> optionalTypeDirName = Optional.ofNullable(typeDirName);
if (optionalTypeDirName.isPresent()) {
System.out.println(optionalTypeDirName);
}
}
// safe, prettier
Optional<String> optionalTypeDirName = optionalProject
.flatMap(project -> project.getApplicationTypeOptional())
.flatMap(applicationType -> applicationType.getTypeDirNameOptional());
optionalTypeDirName.ifPresent(typeDirName -> System.out.println(typeDirName));
A ted to same C#:
var typeDirName = project?.ApplicationType?.TypeDirName;
if(typeDirName != null)
System.Console.WriteLine(typeDirName);
Jinak, jestli někomu z Javistu připadá to použití Streamu jako pěknější a přehlednější, než původní klasické checkování na null, tak by si měl zajít k doktorovi nebo najít holku.