回答編集履歴
18
test
CHANGED
@@ -31,7 +31,8 @@
|
|
31
31
|
Kotlin では `android.database.sqlite.SQLiteOpenHelper`の中にある
|
32
32
|
+ getで始まる名前の無引数メソッド (Getter)
|
33
33
|
+ setで始まる名前の単一引数メソッド (Setter)
|
34
|
-
を、 Kotlin 側から 「先頭の ”set”/"get"を除いて、次の文字を小文字にした名前(=プロパティの形式)」でアクセスできるように、自動的に解釈します。
|
34
|
+
を、 Kotlin 側から 「先頭の ”set”/"get"を除いて、次の文字を小文字にした名前(=プロパティの形式)」でアクセスできるように、自動的に解釈します。
|
35
|
+
(この2点が冒頭で言及した「**一定の規約**」の一部です)
|
35
36
|
|
36
37
|
これにより、
|
37
38
|
`.writableDatabase` という「プロパティ形式の記法」で、`getWritableDatabase()` という Getter メソッドを呼び出せます。
|
17
test
CHANGED
@@ -41,7 +41,9 @@
|
|
41
41
|
isEnabled(bool) -> setEnabled
|
42
42
|
も同じことです。
|
43
43
|
|
44
|
+
上記公式ドキュメントの引用後半
|
44
|
-
|
45
|
+
> Bool 値のアクセサーメソッド(Getter 名が is で始まり、Setter 名が set で始まる)は、Getter メソッドと同じ名前を持つプロパティとして表現されます。
|
46
|
+
の部分がまさにこれです。
|
45
47
|
(button のクラスに、`isEnabled()` という Getter があるはず)
|
46
48
|
|
47
49
|
---
|
16
test
CHANGED
@@ -46,7 +46,7 @@
|
|
46
46
|
|
47
47
|
---
|
48
48
|
|
49
|
-
Java のように「すべてを明示的に定義するプログラミング言語」に慣れている方からすると、このような
|
49
|
+
Java のように「すべてを明示的に定義するプログラミング言語」に慣れている方からすると、このような仕様は不思議に感じるかもしれませんが、結果として、Kotlin の別の仕様である、自動 Getter/Setter との一貫性や、コード記述量の削減に貢献するものとなっています。
|
50
50
|
|
51
51
|
|
52
52
|
--
|
15
test
CHANGED
@@ -34,7 +34,7 @@
|
|
34
34
|
を、 Kotlin 側から 「先頭の ”set”/"get"を除いて、次の文字を小文字にした名前(=プロパティの形式)」でアクセスできるように、自動的に解釈します。(この2点が冒頭で言及した「**一定の規約**」の一部です)
|
35
35
|
|
36
36
|
これにより、
|
37
|
-
writableDatabase
|
37
|
+
`.writableDatabase` という「プロパティ形式の記法」で、`getWritableDatabase()` という Getter メソッドを呼び出せます。
|
38
38
|
|
39
39
|
|
40
40
|
---
|
14
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
> なぜ「メソッドの実行結果」に「プロパティにアクセスする記述」でアクセスできるのか
|
2
2
|
|
3
|
-
Kotilin から、 Java で書かれたコード中にある、**一定の規約**に従ったメソッドを呼ぶ場合、そのよう
|
3
|
+
Kotilin から、 Java で書かれたコード中にある、**一定の規約**に従ったメソッドを呼ぶ場合、そのようにできる仕様になっているからです。
|
4
4
|
|
5
5
|
https://kotlinlang.org/docs/java-interop.html#getters-and-setters
|
6
6
|
|
13
test
CHANGED
@@ -46,7 +46,7 @@
|
|
46
46
|
|
47
47
|
---
|
48
48
|
|
49
|
-
Java のように「すべてを明示的に定義するプログラミング言語」に慣れている方からすると、このような挙動はな
|
49
|
+
Java のように「すべてを明示的に定義するプログラミング言語」に慣れている方からすると、このような挙動は慣れないかもしれませんが、結果として、Kotlin の別の仕様である、自動 Getter/Setter との一貫性や、コード記述量の削減に貢献する仕様となっています。
|
50
50
|
|
51
51
|
|
52
52
|
--
|
12
test
CHANGED
@@ -16,16 +16,18 @@
|
|
16
16
|
```kt
|
17
17
|
val db = _helper.writableDatabase
|
18
18
|
```
|
19
|
+
の `_helper` は、`DatabaseHelper` オブジェクトですが (質問文のコードの2行目)、
|
20
|
+
`DatabaseHelper` オブジェクトは `SQLiteOpenHelper` を継承しているはずです。
|
21
|
+
|
19
|
-
|
22
|
+
そして、`SQLiteOpenHelper` は、
|
20
|
-
冒頭に
|
21
23
|
```kt
|
22
24
|
import android.database.sqlite.SQLiteOpenHelper
|
23
25
|
```
|
24
|
-
というインポート文
|
26
|
+
というインポート文によってインポートされているはずです。
|
25
|
-
|
27
|
+
|
26
28
|
実はこの`android.database.sqlite.SQLiteOpenHelper`
|
27
29
|
というパッケージは、**Java で書かれています**。
|
28
|
-
|
30
|
+
|
29
31
|
Kotlin では `android.database.sqlite.SQLiteOpenHelper`の中にある
|
30
32
|
+ getで始まる名前の無引数メソッド (Getter)
|
31
33
|
+ setで始まる名前の単一引数メソッド (Setter)
|
@@ -33,16 +35,17 @@
|
|
33
35
|
|
34
36
|
これにより、
|
35
37
|
writableDatabase(プロパティ形式) という書き方で、getWritableDatabalse(Getter形式)を呼び出せます。
|
36
|
-
|
38
|
+
|
37
39
|
|
38
40
|
---
|
39
41
|
isEnabled(bool) -> setEnabled
|
40
42
|
も同じことです。
|
41
|
-
|
43
|
+
|
42
44
|
上記公式ドキュメントの引用後半「(Getter 名が is で始まり、Setter 名が set で始まる)は、Getter メソッドと同じ名前を持つプロパティとして表現されます。」の部分がまさにこれです。
|
45
|
+
(button のクラスに、`isEnabled()` という Getter があるはず)
|
43
46
|
|
44
47
|
---
|
45
|
-
|
48
|
+
|
46
49
|
Java のように「すべてを明示的に定義するプログラミング言語」に慣れている方からすると、このような挙動はなじまないかもしれませんが、結果として、Kotlin の別の仕様である、自動 Getter/Setter との一貫性や、コード記述量の削減に貢献する仕様となっています。
|
47
50
|
|
48
51
|
|
11
test
CHANGED
@@ -43,7 +43,7 @@
|
|
43
43
|
|
44
44
|
---
|
45
45
|
|
46
|
-
Java のように「すべてを明示的に定義するプログラミング言語」に慣れている方からすると、このような挙動はなじまないかもしれませんが、結果としてコード
|
46
|
+
Java のように「すべてを明示的に定義するプログラミング言語」に慣れている方からすると、このような挙動はなじまないかもしれませんが、結果として、Kotlin の別の仕様である、自動 Getter/Setter との一貫性や、コード記述量の削減に貢献する仕様となっています。
|
47
47
|
|
48
48
|
|
49
49
|
--
|
10
test
CHANGED
@@ -48,4 +48,4 @@
|
|
48
48
|
|
49
49
|
--
|
50
50
|
この回答をするにあたって参考にした資料:
|
51
|
-
[
|
51
|
+
[Kotlinの言語リファレンス](https://kotlinlang.org/docs/)
|
9
test
CHANGED
@@ -29,14 +29,14 @@
|
|
29
29
|
Kotlin では `android.database.sqlite.SQLiteOpenHelper`の中にある
|
30
30
|
+ getで始まる名前の無引数メソッド (Getter)
|
31
31
|
+ setで始まる名前の単一引数メソッド (Setter)
|
32
|
-
を、 Kotlin 側から 「先頭の ”set”/"get"を除いて、次の文字を小文字にした名前(=プロパティの形式)」でアクセスできるように、自動的に解釈します。(この2点が冒頭で言及した「**一定の規約**」
|
32
|
+
を、 Kotlin 側から 「先頭の ”set”/"get"を除いて、次の文字を小文字にした名前(=プロパティの形式)」でアクセスできるように、自動的に解釈します。(この2点が冒頭で言及した「**一定の規約**」の一部です)
|
33
33
|
|
34
34
|
これにより、
|
35
|
-
writableDatabase(プロパティ形式)
|
35
|
+
writableDatabase(プロパティ形式) という書き方で、getWritableDatabalse(Getter形式)を呼び出せます。
|
36
|
-
|
36
|
+
|
37
37
|
|
38
38
|
---
|
39
|
-
isEnabled(bool)
|
39
|
+
isEnabled(bool) -> setEnabled
|
40
40
|
も同じことです。
|
41
41
|
|
42
42
|
上記公式ドキュメントの引用後半「(Getter 名が is で始まり、Setter 名が set で始まる)は、Getter メソッドと同じ名前を持つプロパティとして表現されます。」の部分がまさにこれです。
|
8
test
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
実はこの`android.database.sqlite.SQLiteOpenHelper`
|
27
27
|
というパッケージは、**Java で書かれています**。
|
28
28
|
|
29
|
-
Kotlin は
|
29
|
+
Kotlin では `android.database.sqlite.SQLiteOpenHelper`の中にある
|
30
30
|
+ getで始まる名前の無引数メソッド (Getter)
|
31
31
|
+ setで始まる名前の単一引数メソッド (Setter)
|
32
32
|
を、 Kotlin 側から 「先頭の ”set”/"get"を除いて、次の文字を小文字にした名前(=プロパティの形式)」でアクセスできるように、自動的に解釈します。(この2点が冒頭で言及した「**一定の規約**」と呼ばれるものです)
|
7
test
CHANGED
@@ -43,7 +43,7 @@
|
|
43
43
|
|
44
44
|
---
|
45
45
|
|
46
|
-
Java のように「すべてを明示的に定義するプログラミング言語」に慣れている方からすると、このような挙動はなじまないかもしれませんが、結果として
|
46
|
+
Java のように「すべてを明示的に定義するプログラミング言語」に慣れている方からすると、このような挙動はなじまないかもしれませんが、結果としてコード作成省力化に貢献する仕様となっています。
|
47
47
|
|
48
48
|
|
49
49
|
--
|
6
test
CHANGED
@@ -13,12 +13,12 @@
|
|
13
13
|
---
|
14
14
|
|
15
15
|
これを質問者さんの例にあてはめると
|
16
|
-
```
|
16
|
+
```kt
|
17
17
|
val db = _helper.writableDatabase
|
18
18
|
```
|
19
19
|
というコードが書かれてある Kotlinファイルには、
|
20
20
|
冒頭に
|
21
|
-
```
|
21
|
+
```kt
|
22
22
|
import android.database.sqlite.SQLiteOpenHelper
|
23
23
|
```
|
24
24
|
というインポート文が書かれてあるはずです。
|
5
test
CHANGED
@@ -36,12 +36,10 @@
|
|
36
36
|
が相互に結びつきます。
|
37
37
|
|
38
38
|
---
|
39
|
-
s
|
39
|
+
isEnabled(bool) <-> setEnabled
|
40
40
|
も同じことです。
|
41
41
|
|
42
|
-
上記公式ドキュメントの引用の後半
|
43
|
-
「(Getter 名が is で始まり、Setter 名が set で始まる)は、Getter メソッドと同じ名前を持つプロパティとして表現されます。」
|
42
|
+
上記公式ドキュメントの引用後半「(Getter 名が is で始まり、Setter 名が set で始まる)は、Getter メソッドと同じ名前を持つプロパティとして表現されます。」の部分がまさにこれです。
|
44
|
-
がまさにこれです。
|
45
43
|
|
46
44
|
---
|
47
45
|
|
4
test
CHANGED
@@ -29,7 +29,7 @@
|
|
29
29
|
Kotlin は インポート時に `android.database.sqlite.SQLiteOpenHelper`の中にある
|
30
30
|
+ getで始まる名前の無引数メソッド (Getter)
|
31
31
|
+ setで始まる名前の単一引数メソッド (Setter)
|
32
|
-
を、 Kotlin 側から 「先頭の ”set”/"get"を除いて、次の文字を小文字にした名前(=プロパティの形式)」でアクセスできるように、自動的に解釈します。(
|
32
|
+
を、 Kotlin 側から 「先頭の ”set”/"get"を除いて、次の文字を小文字にした名前(=プロパティの形式)」でアクセスできるように、自動的に解釈します。(この2点が冒頭で言及した「**一定の規約**」と呼ばれるものです)
|
33
33
|
|
34
34
|
これにより、
|
35
35
|
writableDatabase(プロパティ形式) <-> getWritableDatabalse(Getter形式)
|
@@ -45,5 +45,9 @@
|
|
45
45
|
|
46
46
|
---
|
47
47
|
|
48
|
+
Java のように「すべてを明示的に定義するプログラミング言語」に慣れている方からすると、このような挙動はなじまないかもしれませんが、結果としてバグの軽減やコード作成省力化に貢献する仕様となっています。
|
49
|
+
|
50
|
+
|
51
|
+
--
|
48
52
|
この回答をするにあたって参考にした資料:
|
49
53
|
[kotlinの言語リファレンス](https://kotlinlang.org/docs/)
|
3
test
CHANGED
@@ -27,12 +27,12 @@
|
|
27
27
|
というパッケージは、**Java で書かれています**。
|
28
28
|
|
29
29
|
Kotlin は インポート時に `android.database.sqlite.SQLiteOpenHelper`の中にある
|
30
|
-
+ getで始まる名前の無引数メソッド
|
30
|
+
+ getで始まる名前の無引数メソッド (Getter)
|
31
|
-
+ setで始まる名前の単一引数メソッド
|
31
|
+
+ setで始まる名前の単一引数メソッド (Setter)
|
32
|
-
を、 Kotlin 側から 「先頭の ”set”/"get"を除いて、次の文字を小文字にした名前」でアクセスできるように、自動的に解釈します。(上の2つが冒頭で言及した「一定の規約」です)
|
32
|
+
を、 Kotlin 側から 「先頭の ”set”/"get"を除いて、次の文字を小文字にした名前(=プロパティの形式)」でアクセスできるように、自動的に解釈します。(上の2つが冒頭で言及した「一定の規約」です)
|
33
33
|
|
34
34
|
これにより、
|
35
|
-
writableDatabase <-> getWritableDatabalse
|
35
|
+
writableDatabase(プロパティ形式) <-> getWritableDatabalse(Getter形式)
|
36
36
|
が相互に結びつきます。
|
37
37
|
|
38
38
|
---
|
2
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
https://kotlinlang.org/docs/java-interop.html#getters-and-setters
|
6
6
|
|
7
|
-
>
|
7
|
+
> Methods that follow the Java conventions for getters and setters (no-argument methods with names starting with get and single-argument methods with names starting with set) are represented as properties in Kotlin. Boolean accessor methods (where the name of the getter starts with is and the name of the setter starts with set) are represented as properties which have the same name as the getter method.
|
8
8
|
|
9
9
|
(訳)
|
10
10
|
> JavaのGetterとSetterの規約に従ったメソッド(getで始まる名前の無引数メソッドとsetで始まる名前の単一引数メソッド)は、Kotlinではプロパティとして表現されます。
|
@@ -26,10 +26,10 @@
|
|
26
26
|
実はこの`android.database.sqlite.SQLiteOpenHelper`
|
27
27
|
というパッケージは、**Java で書かれています**。
|
28
28
|
|
29
|
-
|
29
|
+
Kotlin は インポート時に `android.database.sqlite.SQLiteOpenHelper`の中にある
|
30
30
|
+ getで始まる名前の無引数メソッド
|
31
31
|
+ setで始まる名前の単一引数メソッド
|
32
|
-
を、
|
32
|
+
を、 Kotlin 側から 「先頭の ”set”/"get"を除いて、次の文字を小文字にした名前」でアクセスできるように、自動的に解釈します。(上の2つが冒頭で言及した「一定の規約」です)
|
33
33
|
|
34
34
|
これにより、
|
35
35
|
writableDatabase <-> getWritableDatabalse
|
1
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
> なぜ「メソッドの実行結果」に「プロパティにアクセスする記述」でアクセスできるのか
|
2
2
|
|
3
|
-
Kotilin から Java
|
3
|
+
Kotilin から、 Java で書かれたコード中にある、**一定の規約**に従ったメソッドを呼ぶ場合、そのような挙動を行う仕様になっているからです。
|
4
4
|
|
5
5
|
https://kotlinlang.org/docs/java-interop.html#getters-and-setters
|
6
6
|
|