fun feedAny(list: List<Any>) { // listの処理をする } val strings = listOf<String>("1", "2") feedAny(list = strings) // コンパイルエラーにならない そうそうListの場合は、問題なさそうだ。じゃあなにが違うんだ・・・・ というのが調べ始めたモチベーションになります。 その中でoutやinが重要となっており、せっかくなので整理してみようと考えました。 この記事を見てもらえれば、上記のコンパイルエラーが出る出ないの仕組みが理解できるはずです!(頑張ります) Genericsについて まずは、Generics(ジェネリクス)についての説明です。 Genericsとは、変数の型やクラス名を「<>」で囲む記述方法を使うことを指します。 例えばlistOf<String>みたいなやつです。 一般的
Jetpack Composeで線の描画などをする際に使用するAndriod Pathクラスについて大体わかるようにまとめました。 はじめに この記事は「Android Pathクラスが大体わかる」を目標にまとめています。 そのためにはoffset(オフセット)の考え方が必要になるかもしれないため、こちらも読んでみてください。 下記は学びやすいと思う順番に筆者が並べました。 参考程度に読んでいただければと思います。 大体わかる順 moveTo こちらは描画を開始する点を指定する関数です。 画面に対する描画は発生しませんが、引数の値の考え方(offset)がわかりやすいと思います。 relativeMoveTo こちらはmoveToと基本的には同じですが、offsetが異なります。 しかしこの違いがわかればここから先も大体わかると思います。 lineTo こちらは開始点から引数で指定した点ま
表示の変わらないUI要素(Composable関数)に対して行われる再Composeは無駄な処理です。 ですので、極力排除したいところですが、表示が変わらないため、画面上からの判断が難しくなっています。 このようなとき、Layout Inspectorを利用すると、無駄な再Composeを見つけ出すことが出来ます。 ※環境:Android Studio Giraffe | 2022.3.1 Patch 1 再Composeの確認方法 Android StudioのLayout Inspectorを使うと、再Compose(フェーズComposition)が実施された関数と回数をグラフィカルに確認できます。 この機能を使うためには、「Show Recomposition Counts」にチェックが必要です。 Layout Inspectorの画面は図のような構成になっています。 ライブアップ
Kotlin Coroutines Flow Kotlinには便利なFlowというインターフェースがあります。 これがとても便利なのですが、いろいろな種類のクラスと拡張関数が用意されていて使いこなすのは一苦労です。 この記事では、私がよく使うFlowのテクニックとその解説を紹介します。 Flowとは何か Flowはコールドストリームな非同期処理インターフェースです。 コールドストリームとは、購読者が現れて初めて動き出すストリームで、対となるのはホットストリームなChannelです。 それぞれよく使われる用途があるのですが、Flowの方が圧倒的に使う場面は多いと思います。 よく使うFlowの例 大きく分けて、 StateFlow / MutableStateFlow SharedFlow / MutableSharedFlow callbackflow { } に分かれます。 StateFl
こんにちは。Android アプリ開発担当の nagayama(@nagayan_dev)です。 この記事は Gunosy Advent Calendar 2023 の 1 日目の記事です。昨年最後の記事は koid さんの 障害発生時の社内コミュニケーションをスムーズにするために でした。 今年もよろしくお願いします。 今回は私が担当している「auサービスToday」で DataStore の導入と段階的移行の基本実装を行ったため、その内容についてお伝えします。 DataStore とは 現状と対応方針 方針 1. Repository のインタフェースとなっている「データごとの取得・保存メソッド」はそのまま使用する 方針 2. Repository の戻り値は Flow型 にする 方針 3. SharedPreferences と DataStore が共存できるようにする 移行実装
CompositionLocalの継承関係 CompositionLocalは次に示すような継承関係を持ちます。 CompositionLocal#provided関数の実装に見ると、Dynamic側はremember+mutableStateOfが用いられているのに対し、Static側はdata classが用いられています。 : : fun <T> staticCompositionLocalOf( defaultFactory: () -> T ): ProvidableCompositionLocal<T> = StaticProvidableCompositionLocal( defaultFactory ) : : : internal class StaticProvidableCompositionLocal<T>( defaultFactory: () -> T ) :
Jetpack ComposeにおいてUIの下位階層にデータを渡すには、Composable関数に引数を渡していくのが一般的だと思います。 引数で渡す以外の方法として、CompositionLocal があります。 これの使い方について解説します。 注意事項先に CompositionLocal に関する注意事項を書いておきます。 CompositionLocal はほとんどケースでは使わなくて良いものです。グローバル変数のように見えるため乱用するとメンテンスが難しくなったりバグを引き起こしやすくなったりする可能性があります。 一部ケースで有用なものですが、使用する際は十分に注意してください。 実装方法例として、User情報を下位階層に渡したい場合を実装していきます。 まず compositionLocalOf を使ってCompositionLocal のキーを作成します。 型パラメータと
はじめに 今回はJetpack Roomの導入方法から基本的な使い方、シードデータを登録するサンプルまでをやっていきたいと思います。 Jetpack Roomとは? Jetpack Roomは、Android Jetpackの一部である永続データベースライブラリです。RoomはSQLiteを対象とした抽象化レイヤで、データベースのセットアップ、設定、クエリを行うための便利なAPIが用意されています。これにより、Androidアプリがデータベースとやりとりする際の処理を自動化することが可能になります Room を使用してデータを永続化する | Android Developers Room を使用してローカル データベースにデータを保存する | デベロッパー向け Android | Android Developers Roomの最新バージョン AndroidX Tech: an
※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。 (送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。) はじめに あなたがこの記事を手に取ったのは、Kotlinでの排他制御の実践方法を深く知りたいからではないでしょうか。 あるいは、既に何かのアプリケーションを開発中で、正確な排他制御の実装が必要となってきたのかもしれません。 この記事を読めば、Kotlinでの排他制御をしっかりと理解し、効果的に実装することができるようになります。 排他制御は、マルチスレッド環境でのデータの整合性を保つための重要な技術です。 しかし、実際には多くの開発者がその実装に苦労しています
Jetpack Compose には Composition Local という仕組みが用意されています。 これを使うとバケツリレー問題に対応することができます。 バケツリレー問題 例えば深いところの Composable で Context が必要だとします。 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val context: Context = this setContent { MyAppTheme { MyApp(context) } } } } @Composable fun MyApp(context:Context) { TopScreen(context)
共変 (covariant): 広い型(例:double)から狭い型(例:float)へ変換すること。反変 (contravariant) : 狭い型(例:float)から広い型(例:double)へ変換すること。不変 (invariant): 型を変換できないこと。Wikipedia 共変性と反変性 (計算機科学)より 共変、反変、不変。これらは単体で理解しようとすると、余計に難しくなる厄介な用語です。 そこでこのページでは、ジェネリクスのキーワードと対応させて、こう呼びたいと思います。 不変のデフォルト共変のout反変のin今回はKotlinのジェネリクス第2回。「制約」と「in/outキーワード」について。 ジェネリック型の制約最初にキーワードの前提となる「制約」を取り上げます。前回定義したBoxクラスを使って、ジェネリック型に制約を付け加えていきましょう。 class Box<T>
StateFlowの深堀り、SharedFlowとの違いとstateIn【kotlin coroutines flow】 StateFlowはkotlin corouteinsの1.3.6で追加された状態管理用の特別なFlowです。 以前、「StateFlowのドキュメントを読み込む」という記事を書きましたが、その後SharedFlowが追加され、若干実装に変更がありました。 また、新たにstateInというoperatorも追加されています。 今回はそれらを含めたStateFlowの詳細な仕様に関して深堀りしていきたいと思います。 Flow, SharedFlow, StateFlowの比較はこちらの記事を、SharedFlowの深堀りはこちらの記事を参考にしてください。 StateFlowの基本的な使い方StateFlowは状態管理に特化したFlowです。 StateFlowはMuta
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く