「シュガーリング」と「デシュガーリング」については、Java 8、これらの用語はどういう意味ですか?概念的または構文的ですか?.
いくつかの例:
Javaに再糖化するデフォルトの反復ループ
コンパイル中の構文糖に関する観察。
sugar、プログラミングでは、通常、sweet追加、主にショートカットを指します。これは、いくつかの構成体の入力と読み取りを容易にします(後者は実際には最も重要です)プログラムのライフサイクル中)。
ウィキペディアには シンタックスシュガー の定義がありますが、すべてのシュガーが本質的にシンタックスであるわけではないことに注意してください(最近の甘い追加はすべてコンパイラーの変更だけではありませんでした)。
以下に例を示します。
i++
および++i
)。唯一の目的は、追加のステートメントを書くことを避けることです。それらは純粋な砂糖です。+=
、|=
、&=
などは、同じ種類の砂糖でできています。Javaは、特に現代の言語と比較して、十分に簡潔でないと広く見られています。そのため、コードを読みやすくするのに役立つこれらの追加が歓迎されています。
最後に、砂糖が不足するとプログラムが太くなる可能性がありますが、過剰な砂糖は同じことを書くさまざまな方法につながるため、言語が混乱し、プログラムの一貫性が低下し、維持が難しくなることに注意してください。別の種類の砂糖、APIシュガーは、ほとんどの場合ペストであり、特に追加(オーバーロードなど)で作成されている場合、APIの把握が難しくなります。
これは、desugaringのいずれかを指します
「脱糖」はJava 8。
"Lambda Expressionsの翻訳" に関するこのドキュメントには、詳細に興味がある場合に何が起こっているかの本当の詳細があるようです。
ドキュメントからのキーフレーズ:
ラムダをバイトコードに変換する最初のステップは、ラムダ本体をメソッドに脱糖することです。
一般に、javacの「脱糖」により、一部の言語機能を既存の機能で表すことができます。これにより、クラスファイル形式に大きな変更を加えることなく、バイトコードでそれらを表すことができます。また、このため、コンパイラのバックエンドはフロントエンドよりも安定しています。これは、ラムダやメソッド参照の場合とは異なり、すべての新しい言語機能が単なる構文上の砂糖であることを意味するものではありません。コンパイラの「脱糖」の例は他にもあります。
また、文字列スイッチで何が起こるか、タイプ消去を調査することができます...