19.0406

List(リスト)

List とは、なんでしょうか。
普段使う 「リスト」 とも、よく似ています。
買い物リスト、発注リスト、ToDoリスト などなど。
Array(配列)とも、よく似ています。

でも、やはり、プログラミング言語 での使い方では、
いつものことですが、文法的に、きっちりとした、仕様があります。
ですので、Array/配列 とは、どこが同じで、どこが違うのか、独特のやり方、などなど
を、きっちり覚えていきましょう。

まず、Array/配列 との、違い、同じところ を、見てみましょう。

違い 補足
 Array  要素の書き換え が出来る  val a = arrayOf("apple", "strawberry") 
a[0]="orange"
// OK
List  要素の書き換え が出来ない  val l = listOf("apple", "strawberry")
l[0]="orange"
// コンパイルエラー
 
  
Array
 
 
arrayOf()関数 で、作成  val a = arrayOf("apple", "strawberry") 
 
List
 
listOf()関数 で、作成 val l = listOf("apple", "strawberry")
 
 
共通するところ 補足
  
Array
 
 
要素の は、変更できない 解決策:新たに作り直す
 
List
 
要素の は、変更できない 解決策:「仲間」である、MutableList を使う


まず、List では、要素の書き換え が出来ないことを、
実際のコードで試してみましょう。



MutableList(ミュータブル・リスト)
不変のリスト であれば、List で、事足りると思いますが、
内容の変更、追加など の、機能が欲しいことも多々あると思われます。
そんな時には、MutableList を、使ってみましょう。

1. 要素 を、追加する

1_01. 最後の要素 として、追加する

このためには、
  add()関数
を、使います。
それでは、やって見ましょう
15行目、16行目 で、add()関数 を、使っています。
やり方は、同じなので、15行目 について、見てみます。
  toDoList.add("CSS")
まず、toDoList とは、なんだったのでしょうか?
  インスタンス/instance
ですね。
(もっと正確に言うと、実は、MutableList は、インターフェイス(後述)なので、
 「:(実装)」 した、class の、インスタンスなのですが。
 ただ、作成方法は、定番のやり方ではない/listOf(要素s) ですね。)
そして、あるインスタンス だけが持っている、関数のことを、メソッド と、言います。
そして、MutableListインスタンス は、add(追加したい要素)メソッド を、持っています。
そして、見逃してはいけないのが、./ドット です。
あるインスタンス / an Instance が、関数/メソッド を、呼ぶとき/callするとき
  .
を、使うのです。
これで、分かりましたね。
  toDoList.add("CSS")
とは、MutableListのインスタンス、toDoList が、add()メソッド を、コールしているのです。


1_02. 好きな位置に、要素 を、追加する

もし、ここで、今の結果
  Kotlin文法
  Androidプログラミング
  英文読解
  英単語
  CSS
  JS
の、「英単語」 の、下に、"HTML" を、加えるには、どうすればよいのでしょうか?
この時には、
  MutableListインスタンス の
  add(インデックス: Int型, 付け加える要素)
この メソッド を、使えばいいです。
では、"HTML" を、「英単語」 の後に加えるとしたら、
インデックス/index は、いくつでしょうか?
0スタート なので、になります。
では、add(インデックス, 要素)を、使ったコードを、見てみましょう。
14行目の、「index:」 と、「element: 」 は、IntelliJ の、透かし文字 です。
 本当に書いたら、エラーです。

 IntelliJ が、分かりやすいようにつけてくれますが、後ろについている場合、本当に書いても
 大丈夫だと思いますが、前についている場合は、構文から言っても、おかしいです。)
上から数えて、0,1,2,3,4 で、
  4 の位置
に、「HTML」 が、追加されていることが、確認できます。


2. 要素 を、削除する

2_01. インデックス番号 を使って、削除 する

removeAt(インデックス番号)メソッド を、使います。
今までの例を、見れば、なんとなく察しが付くと思いますが、コード を、見てみましょう。
11行目の、「index:」 は、IntelliJ の、透かし文字 です。
 本当に書いたら、エラーです。

 IntelliJ が、分かりやすいようにつけてくれますが、後ろについている場合、本当に書いても
 大丈夫だと思いますが、前についている場合は、構文から言っても、おかしいです。)


2_02. 値 を、指定して、削除する
値 を指定しても、削除できます。
これには、
  remove(削除したい要素)
この メソッド を、使います。
これも、どんな風に書くか、予想できるでしょう、、多少経験を積まないと無理かもしれませんが。
コードは、こうなります


3. 要素 を、変更する
これは、
  削除して、追加する だけ
です。
こんなを、書いてみました。
削除の例、追加の例 のコードをみて、考えてみてください。



まとめ
・Array(配列)は、書き換えができます。
・List は、書き換えができません。
・arrayOf()関数
・listOf()関数
・Array、List ともに、「数」 の変更はできません。
・MutableList は、追加・削除・変更 が、出来ます。
  ・MutableList での、要素の追加方法、2つ思い出しましょう。
  ・MutableList での、要素の削除方法、2つ思い出しましょう。
  ・MutableList での、変更するには、どうすればいいですか?