少し Scala をいじってみると、関数から早く戻ることができないようです。
インデントされていないフラットなコードは、リターンが早いので簡単に理解できます。私の最初の試みは、大きなネストされた構造を作成しました。うるさいと言いますが、次のようなものを見るのは好きではありません。
}
}
}
Scala で次のメソッドを記述する最良の方法は何ですか?
入れ子を減らすような方法でプログラミングすることは可能ですか?それとも、Scala の関数設計哲学に全面的に反対することになりますか?
@Nullable
public static <T extends PsiElement> T getParentOfType(@Nullable PsiElement element,
@NotNull Class<T> aClass,
boolean strict,
@NotNull Class<? extends PsiElement>... stopAt) {
if (element == null) return null;
if (strict) {
element = element.getParent();
}
while (element != null && !aClass.isInstance(element)) {
if (instanceOf(element, stopAt)) return null;
if (element instanceof PsiFile) return null;
element = element.getParent();
}
//noinspection unchecked
return (T)element;
}
私の試み:
def getParentOfType[T](element: PsiElement, aClass: Class, strict: Boolean): T[_ <: PsiElement] = {
element match {
case null => null
case _ => {
var el = if (strict) {
element.getParent
} else element
while(el != null) {
if (aClass isInstance el) {
return el
}
if (el.isInstanceOf[PsiFile]) return null;
el = el.getParent()
}
}
}
}
また、「Scala で Java メソッド X を記述する最良の方法は何ですか?」と尋ねる適切な Scala ワールドのフォーラムはどこですか。私は自分自身がこの質問をよくしていることに気づきます。