Scala FutureのonComplete関数とandThen関数の違いは何ですか？
andThen` と `onComplete` はどちらも、コールバック関数によって未来の結果を見ることができる。しかし、`andThen` は連鎖させることができ、`onComplete` とは異なり、コールバック関数が適用される順番が保証されている。さらに、 `andThen` に渡されるコールバック関数は部分関数である可能性があり、結果のサブセットのみを扱うことができる（例えば、 `Success` のみ、または `Failure` のみ）。

以下は `andThen` と `map` を使った例である：

```
def demoAndThen(fut: Future[Int])：未来[Int] = { }.
  .andThen { case Success(value) => println(s "andThen1: $value") }.
    .andThen { case Success(value) => println(s "andThen2: $value") } }.
    .マップ { i =>
      println(s "map: $i")
      i
    }
}
```

fut`が正常に終了すると、"andthen1: ..."、"andThen2: ..."、"map: ... "の順に出力される。

onComplete`と`map`を使った例を考えてみよう：

```
def demoOnComplete(fut: Future[Int])：フューチャー[Int] = {
  fut.onComplete { t：Try[Int] => println(s "onComplete1: $t") }.
  fut.onComplete { t：try[Int] => println(s "onComplete2: $t") }.
  fut.map { i => T: Try[Int
    println(s "map: $i")
    i
  }
}
```

この場合、`fut`が正常に完了すると、"onComplete1: ..."、"onComplete2: ..."、"map: ... "が不特定の順番で表示される。

andThen`は連鎖しますが、コールバック関数は通常、結果の `Future` の結果に影響を与えません。しかし、コールバック関数が致命的なエラーを投げると、結果の `Future` は完了しないので注意してください。