guard文とは

Swiftにおけるguard文とは

  • 条件不成立時に、確実にスコープ外へ抜けるための条件分岐文
  • guard文を含むスコープから抜ける処理が含まれない場合はコンパイルエラーになる
  • if文でも同じことはできるが、guard文での条件不成立時に確実にreturnすることで、else節以降は条件が成立する事が保証される

例:

func sample (a: Int) {
  guard a > 0 else {
    return // このreturnがなければコンパルエラー
  }
  // guard文以降a>0が保証される
}

参考:

[増補改訂第3版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plusシリーズ)

ボクシングとは

  • プリミティブ型からラッパーオブジェクトへの変換を暗黙的に行う仕組み
  • ここでいう暗黙的とは、コンストラクタやメソッド等を使わずに、直接代入(=)で行われるという事

例 (Kotlin):

非Nullable型からNullable型への変換する例。

var x: Int = 1
var y: Int? = x

参考:

速習 Kotlin: Javaより簡単!新Android開発言語を今すぐマスター 速習シリーズ

【Javaラッパークラス】オートボクシングとアンボクシングとは?

Elementとは

  • Widgetによって自動的に生成され、Widgetの状態管理(Widgetは状態を持たないため)と、描画を担当するRenderObjectの仲介をする
  • Flutterは実行時にWidgetツリーを構築し、その際にElementとRenderObjectも同様なツリーを構築する。Widgetツリーから状態管理と描画を分離することで、パフォーマンスの最適化を図っている。
  • また、ツリー状を構成するのは、画面の一部に状態変化があった際に、画面全体を更新する事無く末端のサブツリーのみを更新する事で効率化できるため

参考:

FlutterにおけるWidgetとElementとRenderObjectの基本

Flutterの3つのツリー(Widgetツリー/Elementツリー/RenderObjectツリー)をできるだけわかりやすくまとめてみた

【Flutter】Navigator.of(context) から理解する 3つのツリー

Flutter の Widget ツリーの裏側で起こっていること

HAXM (Hardware Accelerated Execution Manager、ハクサム)とは

  • Intel社が提供するエミュレータ高速化エンジン
  • 高速化を支援するハイパーバイザーの一種
  • Androidエミュレータは非常に重いので、Androidエミュレータ向けに広く使われている

参考:

Intel Hardware Accelerated Execution Manager (HAXM)

名前付き引数 (named parameters)とは

  • 関数やメソッド呼出し時に、どの引数にどの値を渡すか指定できる仕組み
  • 値が意図した引数に渡っているか明確なので可読性が上がり、さらに引数の順番間違いによるバグを減らす事ができる

例 (Dart):

Class Person{
  String first;
  String last;
  Person({this.first, this.last});
}
var person = new Person(first: 'john', last: 'Smith');

スプレッド演算子とは

  • 配列名の前に付与する「*」マーク
  • 可変長引数に配列を渡す際に利用する
  • Kotlinの場合、可変長引数に直接配列を渡すことはできないため、スプレッド演算子で展開する必要がある

例 (Kotlin) :

fun sum(vararg values: Int): Int{...}
var list = intArrayOf(1,2,3,4)
println(sum(*list)) // Output: 10
println(sum(list)) // Error

参考:

速習 Kotlin: Javaより簡単!新Android開発言語を今すぐマスター 速習シリーズ

遅延初期化 (lazy initialization)とは

  • オブジェクトの初期化を、実際に使用されるまで遅らせる仕組み
  • 初期化の負荷が大きかったり、使用するか分からないオブジェクトの初期化を、必要になるまで遅らせる(必要でない場合は初期化しない)事により、パフォーマンス改善やメモリ使用量の削減が期待できる

参考:

限定的な初期化