私は高階関数でコードを書いて、私はそうような時の表現を一の変換を書き出すために多くのクリーナーであることがわかりました。不要な大きな変数を削除するswiftcコンパイラの最適化はありますか?
let children = objects.map { $0.children }
let validChildren = children.filter { $0.isValid }
let sortedChildren = validChildren.sorted { $0.count < $1.count }
しかし、私はこれらの各知っています関数は変数に格納している新しいArrayオブジェクトを返します。理論的には、毎回新しいArrayを作成して保持し、多くのメモリを浪費しています。不要な配列が使用後に破棄されるように、呼び出しを1行として記述する方がよいでしょう。
let sortedChildren = objects.map { $0.children } .filter { $0.isValid } .sorted { $0.count < $1.count }
これは、コードの1行で非常に多くのことが起こっているので、後で読むのが面倒です。だから私の質問です:Swiftのコンパイラは、コンパイル時に私の欲求を赦し、未使用の変数を削除する最適化を持っていますか?
*「1行のコードには非常に多くのことがあります」* - '.filter'の前と' .sorted'の前に改行することができることに注意してください。 –
これは時期尚早の最適化のような臭いです。 – rmaddy
コンパイラはあなたを別の変数に分割することを心配していません。しかし、あなたが@MartinRが言ったようにメモリを心配すれば、改行を使用するか、少なくともあなたの変数をprivate/fileprivateまたはlazyとして宣言することができます。 – Vollan