第8回Vimスクリプト入門みたいの(リスト情報取得関数)
結局一日一回更新でいっぱいいっぱい。もっとクオリティ下げて毎日やるべきか、それともこのクオリティ・間隔を維持すべきか。ある程度まとまった単位でないと書きにくい気はするんだけど、逆に読むときは短い方が読みやすそうなんだよね。
あと目標がほしいな。こういうスクリプトを作る!みたいの。じゃ、今回の分。
" リストの情報取得用関数 " range(), len(), empty(), get(), index(), match(), max(), min(), count() " " 今回はリストの情報を取得する関数。 " 情報取得から先に紹介するのは、おそらく副作用がないため。 " " range() echo range(4) echo range(1, 4) " いきなりだが、ちょっと主旨に反する関数。これはリストの情報取得が目的で " はない。ただ、前回使ったようなfor用の添字リストを作ったり、ちょっとした " 連番のリストを作るのに便利だし、これからのサンプルコードでもよく使うの " で最初に書いておく。例にはないが、第3引数はstepを示す。 " 引数の個数によって、最大値を含むか含まないかが変化することに注意。 " " len() let a = range(1, 5) echo len(a) let a = range(1, 10) echo len(a) " リストの要素数を返す。前回使ったし、問題ないと思う。count()とは別物。 " 文字列や数値の場合は、バイト数を返すらしいが、その場合は strlen() を " 使った方が目的がはっきりして良いと思う。 " " empty() let a = [] echo empty(a) let a = [1] echo empty(a) " リストが空なら1,空でないなら0を返す。len() == 0 でも可能だが、 " こちらの方が高速になるらしい。知っていればお得という関数。 " " get() let a = range(5) echo get(a, 2) echo get(a, len(a), -1) " 指定した位置の値を返す。a[]の形式だと、添字が範囲外だった場合に " エラーとなるが、get()の場合は第3引数(指定しなければ0)が返される。 " 安全に取得したい場合に便利かもしれない。 " " index() let a = ['a', 'B', 'c', 'de'] echo index(a, 'b') echo index(a, 'b', 0, 1) echo index(a, 'de') " 最初に発見した位置を返す。見つからなければ -1。 " 第3、第4引数で、検索開始位置と大・小文字の区別を指定できる。 " " match() let a = [1, 2, 3, 'abc', 'def'] echo match(a, '\d') echo match(a, '\d', 2) echo match(a, '\w\{3}') " index()と似ているが、こちらは正規表現を使える。 " ignorecase に影響される。smartcase には影響されない。 " magic で, cpoptions は空らしい。こういう情報はきっちり " 把握しておいた方が良さそう。 " 第3、第4引数で、検索開始位置と無視する個数を指定できる。 " 第4引数を使うと第3引数の解釈が変わったりして、ややこしいので " できるかぎり使わない方向でいきたい。 " " max(), min() let a = range(1, 5) echo max(a) echo min(a) " max() は数値で最大のものを min() は数値で最小のものを返す。 " 文字列の場合は自分の環境では0になっているが、 " エラーになると書かれているので、注意して使うべきだと思う。 " " count() let a = ['a', 'b', 'A', 'b'] echo count(a, 'a') echo count(a, 'a', 1) echo count(a, 'a', 1, 1) echo count(a, 'b') " 該当する個数を返す。len()と間違いそうになった。 " 第3、第4引数は例によって、大小の区別と開始位置。 " index() と似た感じで使うのかと思ったが、第3、第4引数が逆。 " これは危ないな。 " " " というわけで、今回はリストの情報取得用関数を簡単に試した。 " 次回はリスト操作用の関数を試す。 " " 今回のまとめ " range() " len() " empty() " get() " index() " match() " max() " min() " count() "