パターンマッチ ".." と "_"の違い

元ネタ Difference between ".." and "_" in match patterns. : rust _ 一つの値のみにマッチする .. 複数の値にマッチする let v = (1, 2, 3); match v { (1, 2, _) => println!("1, 2, _"), (1, ..) => println!("1, .."), (..) => println!(".."), }

Option<T>

Option enum Option<T> { None, Some(T), } boolに変換 is_some(&self) is_none(&self) 値の取り出し T expect(self), msg: &str) -> T unwrap(self) -> T unwrap_or(self, default: T) -> T unwrap_or_else<F>(self, f: F) -> T where F: FnOnce() -> T Result<T, E> ok</t,></f></t>…

型と所有権

型と変数と値 型は、struct,enumを使って定義し、値は型から生成され、変数に格納する。 // 型Vを定義 struct V(i32); // 変数aに値V(0)を格納する let a = V(0); 所有権とは 値を保持することができる変数は必ず1つであるという制約のこと。 #[derive(Debu…

ポリモーフィズム with トレイトオブジェクト

ポリモーフィズム (Polymophism) ポリモーフィズム in Rust deepLによる翻訳 ポリモーフィズム 多くの人にとって、ポリモーフィズムは継承と同義語です。しかし、実際にはもっと一般的な概念であり、複数の型のデータを扱うことができるコードを指します。継…

トレイトオブジェクト

Trait objects 動的サイズ決定型 (DSTs) トレイトオブジェクトは、以下のポインタを持つワイドポインタ(動的サイズ決定型) 値へのポインタ 仮想メソッドテーブル トレイトオブジェクトの形 Box<dyn SomeTrait> &dyn SomeTrait トレイトオブジェクトの目的 動的ディスパッチ</dyn>…

impl trait引数とジェネリクス関数の違い

元ネタ rust - What are the differences between an impl trait argument and generic function parameter? - Stack Overflow 回答 impl trait引数は、トレイト境界に脱糖(desugar)される。(ゆえにトレイト境界の糖衣構文である) したがって以下は同じ。 t…

anyhowを使う

anyhow::Error https://docs.rs/anyhow/1.0.44/anyhow/struct.Error.html 動的エラー型を包み込んだエラー型。 Box<dyn std::error::Error>との違い 静的な型 もどり道(backtrace)を保証する narrow pointer Display representations Display 表し方 esprintln!("{}", err) undering</dyn>…

anyhowメモ

anyhowのメリット エラーに説明を追加できる anyhow::Result<T>は、エラーの伝播ルートをスタックトレースとして出力してくれる anyhowがない場合 Result<T, E> と std::error::Errorトレイトを使う。 fn count_words<R: Read>(input: &mut R) -> Result<u32, Box<dyn Error>> { let reader = BufRe</u32,></r:></t,></t>…

Borrow<Borrowed>とToOwnedトレイト

Borrow<Borrowed>トレイト - Borrowed型を借用できることを表す ToOwnedトレイト - Borrow<Borrowed>型を実装すると自動実装される use std::borrow::Borrow; #[derive(Debug)] struct ToolBox(Tool); #[derive(Debug)] struct Tool; impl Borrow<Tool> for ToolBox { fn borrow(&self)</tool></borrowed></borrowed>…

葉桜の季節に君を想うということ

発行: 2003年 著書: 歌野晶午 まさかのつながりからの展開にびっくり。 十角館の殺人を彷彿させる本格ミステリーであったが、最後の最後までミステリー小説なのかどうか分からなかった。 読後、タイトルを読み、今や恋人の帰りを待っている主人公の姿を思い…

向日葵の咲かない夏

著書: 道尾秀介 発行: 2008年9月1日 いわゆる叙述トリックを使ったミステリ小説で、最後は嫌な気持ちになるイヤミス。 こういったミステリの醍醐味は、 最後まで読んでタネが分かった上で、また読み直すことできることだと思う。 道尾秀介の本は、「カラスの…

クラス図

UML

クラス関係 矢印でクラス同士を結ぶ事ができる。 この際、その関係の種類によって矢印の形が異なる。 関係 意味 備考 図 Extension 継承 Aggregation (集約) has-a 授業(親)と生徒(子)といった関係を表す。また授業を消したからと言って、生徒は消えない。 C…

ザリガニの鳴くところ

ネタバレあり

nmap <leader>r <Plug>(quickrun)

Vim

カスタムコルーチンスコープの作成

kotlin.github.io CoroutineScopeは実装することが出来る。 interface CoroutineScope CoroutineScope概要 launchやasyncといった全てのコルーチンビルダーはCoroutineScopeを拡張し、全ての要素とキャンセルを自動的に伝播するために、そのcoroutineContext…

Android KTXを

developer.android.com Android KTXとは Android JetpackのKotlin拡張をまとめたライブラリ。 以下のKotlinの機能を用いた拡張が用意されている Extension functions Extension properties Lambdas Named parameters Parameter default values Coroutines サ…

ViewModelの生成と初期化方法

ViewModel import androidx.lifecycle.ViewModel class UserViewModel(name: String, age: Int, gender: Int) : ViewModel() { val name = name val age = age val gender = gender } ViewModelProviderを使う val viewModel = ViewModelProvider(this, obje…

コルーチン Coroutin

コルーチン 使うにあたって dependencyの追加 https://github.com/Kotlin/kotlinx.coroutines#using-in-your-projects Gradleの場合 dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0' } import App.kt import kotlinx.…

classにつけられるキーワード

classにつけられるキーワード data - 値型もどき sealed - 代数的データ型もどき inner - Outerクラスの呼び出しが可能となる enum - Javaのenum open - Javaのfinalの反対。Kotlinの全てのclassはデフォルトでfinalであるため value - ? data class 自動導…

エラーハンドリング構成 in 2020

元ネタ nick.groenen.me メモ std::error::Errorトレイトが抱える問題 スタックトレースがとれない。 アプリケーションとライブラリとでエラーのあり方が異なる ライブラリにおけるエラー 意味のあるエラーを返す必要がある ライブラリ内で発生したエラーは…

参照型 `&T` `&mut T`

Primitive Type 参照 &T or &mut T 参照, 共有と可変 参照は、ある所有された値の借用を表す。 & ,&mut 演算子もしくは、ref, ref mutキーワードを使って参照を得ることが出来る。 ポインタ型(*const T, *mut T)と違って、null出ないことが保証されている。 …

ジェネリクス Generics

Generic(総称型) vs Concreate(具体型) Rustにおいて、"generic"は、一つ以上のgeneric type parameters<T>を持つものである。 それ以外は、concrete(non-generic)である。 例: 関数 fn foo<T>(arg: T) { .... } 引数の型Tがジェネリクス型パラメーターが指定され</t></t>…

bat

概要 github.com 出力の整形や構文ハイライトをしてくれるツール。 プロジェクト構成 src構成 ▾ src/ ▾ bin/bat/ ツールファイル一式 app.rs assets.rs clap_app.rs config.rs directories.rs input.rs main.rs lib.rs ソースファイル一式 main関数 fn main(…

オブジェクト構造

PDF

Document structure オブジェクト階層 in PDF direct object 相互参照テーブルからオフセット位置を読み取ることが出来るオブジェクト (名前付きオブジェクトと呼ばれることもある。) indirect object direct object以外のオブジェクト。 オブジェクト階層で…

heap領域で確保される型

users.rust-lang.org Rustは通常スタック領域に値を確保するが、一部の型はヒープ領域で内部の値を確保し、その参照を返す。 Containers: Box Rc Arc Collections types: Vec, VecDeque String HashMap, HashSet BTreeMap, BTreeSet Concurrency: thread::sp…

Box<T>型

doc.rust-lang.org Rustの全ての値は、デフォルトはstack領域で確保される。 値は、Box<T>を生成することによって、boxed(ヒープ上での確保)することが出来る。 box値は、T型の値をヒープ上に確保するためのスマートポインタである。 box値がスコープから消えた</t>…

ViewGroupによるタッチイベントの管理

ViewGroupにおけるタッチイベントの管理 onInterceptTouchEvent()メソッドをオーバーライドすることで、サブビューに対して、タッチイベントを発生させないようにすることができる。 class MyViewGroup @JvmOverloads constructor( context: Context, privat…

複数ポインタのトラッキング

複数のポインタをトラックする ACTION_DONW このポインタのindexは必ず0が割り当てられる ACTION_POINTER_DOWN indexが0以外のポインタがスクリーン上で検知された場合、呼び出される。割り当てられるindexは、getActionIndex()メソッドから取得が可能 ACTIO…

GestureDetectorを使ったジェスチャーのハンドリング

概要 GestureDetectorを使うことで、共通のジェスチャーを簡単にハンドルすることができる。 またActivity.onTouchEvent()もしくはView.onTouchEvent()と組み合わせて使うため、それ以外のジェスチャーのハンドリングもシンプルに記述することが可能となって…

View Binding

developer.android.com 概要 View Bindingを使うことで、findViewById()を取り替えることができる。 Setup instruction build.gradle アプリ側のbuild.gradleにviewBindingをtrueにする android { ... buildFeatures { viewBinding = true } } Layoutファイ…