回答編集履歴

18

2023/03/12 01:06

投稿

退会済みユーザー
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"を除いて、次の文字を小文字にした名前(=プロパティの形式)」でアクセスできるように、自動的に解釈します。(この2点が冒頭で言及した「**一定の規約**」の一部です)
34
+ を、 Kotlin 側から 「先頭の ”set”/"get"を除いて、次の文字を小文字にした名前(=プロパティの形式)」でアクセスできるように、自動的に解釈します。
35
+ (この2点が冒頭で言及した「**一定の規約**」の一部です)
35
36
   
36
37
  これにより、
37
38
  `.writableDatabase` という「プロパティ形式の記法」で、`getWritableDatabase()` という Getter メソッドを呼び出せます。

17

 

2023/03/06 13:05

投稿

退会済みユーザー
test CHANGED
@@ -41,7 +41,9 @@
41
41
  isEnabled(bool) -> setEnabled
42
42
  も同じことです。
43
43
   
44
+ 上記公式ドキュメントの引用後半
44
- 上記公式キュメントの引用後半「(Getter 名が is で始まり、Setter 名が set で始まる)は、Getter メソッドと同じ名前を持つプロパティとして表現されます。」の部分がまさにこれです。
45
+ > Bool 値のアクセサーメソッド(Getter 名が is で始まり、Setter 名が set で始まる)は、Getter メソッドと同じ名前を持つプロパティとして表現されます。
46
+ の部分がまさにこれです。
45
47
  (button のクラスに、`isEnabled()` という Getter があるはず)
46
48
 
47
49
  ---

16

 

2023/03/06 13:04

投稿

退会済みユーザー
test CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
  ---
48
48
   
49
- Java のように「すべてを明示的に定義するプログラミング言語」に慣れている方からすると、このような挙動慣れないかもしれませんが、結果として、Kotlin の別の仕様である、自動 Getter/Setter との一貫性や、コード記述量の削減に貢献する仕様となっています。
49
+ Java のように「すべてを明示的に定義するプログラミング言語」に慣れている方からすると、このような仕様不思議に感じるかもしれませんが、結果として、Kotlin の別の仕様である、自動 Getter/Setter との一貫性や、コード記述量の削減に貢献するものとなっています。
50
50
 
51
51
 
52
52
  --

15

 

2023/03/06 13:03

投稿

退会済みユーザー
test CHANGED
@@ -34,7 +34,7 @@
34
34
  を、 Kotlin 側から 「先頭の ”set”/"get"を除いて、次の文字を小文字にした名前(=プロパティの形式)」でアクセスできるように、自動的に解釈します。(この2点が冒頭で言及した「**一定の規約**」の一部です)
35
35
   
36
36
  これにより、
37
- writableDatabaseプロパティ形式) という書き方で、getWritableDatabalseGetter形式)を呼び出せます。
37
+ `.writableDatabase` という「プロパティ形式の記法」で、`getWritableDatabase()` という Getter メソッドを呼び出せます。
38
38
   
39
39
 
40
40
  ---

14

 

2023/03/06 12:59

投稿

退会済みユーザー
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

 

2023/03/06 12:57

投稿

退会済みユーザー
test CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
  ---
48
48
   
49
- Java のように「すべてを明示的に定義するプログラミング言語」に慣れている方からすると、このような挙動はなじまないかもしれませんが、結果として、Kotlin の別の仕様である、自動 Getter/Setter との一貫性や、コード記述量の削減に貢献する仕様となっています。
49
+ Java のように「すべてを明示的に定義するプログラミング言語」に慣れている方からすると、このような挙動は慣れないかもしれませんが、結果として、Kotlin の別の仕様である、自動 Getter/Setter との一貫性や、コード記述量の削減に貢献する仕様となっています。
50
50
 
51
51
 
52
52
  --

12

 

2023/03/06 12:56

投稿

退会済みユーザー
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
- というコードが書かれある Kotlinファイルには、
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

 

2023/03/05 23:22

投稿

退会済みユーザー
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

 

2023/03/05 22:52

投稿

退会済みユーザー
test CHANGED
@@ -48,4 +48,4 @@
48
48
 
49
49
  --
50
50
  この回答をするにあたって参考にした資料:
51
- [kotlinの言語リファレンス](https://kotlinlang.org/docs/)
51
+ [Kotlinの言語リファレンス](https://kotlinlang.org/docs/)

9

 

2023/03/05 22:49

投稿

退会済みユーザー
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(プロパティ形式) <-> getWritableDatabalse(Getter形式)
35
+ writableDatabase(プロパティ形式) という書き方で、getWritableDatabalse(Getter形式)を呼び出せます。
36
- が相互に結びつきます。
36
+
37
37
 
38
38
  ---
39
- isEnabled(bool) <-> setEnabled
39
+ isEnabled(bool) -> setEnabled
40
40
  も同じことです。
41
41
 
42
42
  上記公式ドキュメントの引用後半「(Getter 名が is で始まり、Setter 名が set で始まる)は、Getter メソッドと同じ名前を持つプロパティとして表現されます。」の部分がまさにこれです。

8

 

2023/03/05 22:32

投稿

退会済みユーザー
test CHANGED
@@ -26,7 +26,7 @@
26
26
  実はこの`android.database.sqlite.SQLiteOpenHelper`
27
27
  というパッケージは、**Java で書かれています**。
28
28
 
29
- Kotlin は インポート時に `android.database.sqlite.SQLiteOpenHelper`の中にある
29
+ Kotlin は `android.database.sqlite.SQLiteOpenHelper`の中にある
30
30
  + getで始まる名前の無引数メソッド (Getter)
31
31
  + setで始まる名前の単一引数メソッド (Setter)
32
32
  を、 Kotlin 側から 「先頭の ”set”/"get"を除いて、次の文字を小文字にした名前(=プロパティの形式)」でアクセスできるように、自動的に解釈します。(この2点が冒頭で言及した「**一定の規約**」と呼ばれるものです)

7

 

2023/03/05 22:29

投稿

退会済みユーザー
test CHANGED
@@ -43,7 +43,7 @@
43
43
 
44
44
  ---
45
45
 
46
- Java のように「すべてを明示的に定義するプログラミング言語」に慣れている方からすると、このような挙動はなじまないかもしれませんが、結果としてバグの軽減やコード作成省力化に貢献する仕様となっています。
46
+ Java のように「すべてを明示的に定義するプログラミング言語」に慣れている方からすると、このような挙動はなじまないかもしれませんが、結果としてコード作成省力化に貢献する仕様となっています。
47
47
 
48
48
 
49
49
  --

6

 

2023/03/05 22:19

投稿

退会済みユーザー
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

 

2023/03/05 22:18

投稿

退会済みユーザー
test CHANGED
@@ -36,12 +36,10 @@
36
36
  が相互に結びつきます。
37
37
 
38
38
  ---
39
- setEnabled <-> isEnabled(bool)
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

 

2023/03/05 22:17

投稿

退会済みユーザー
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"を除いて、次の文字を小文字にした名前(=プロパティの形式)」でアクセスできるように、自動的に解釈します。(の2が冒頭で言及した「一定の規約」です)
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

 

2023/03/05 22:14

投稿

退会済みユーザー
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

 

2023/03/05 22:13

投稿

退会済みユーザー
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  https://kotlinlang.org/docs/java-interop.html#getters-and-setters
6
6
 
7
- > Normally, properties declared as having a non-null type must be initialized in the constructor. However, it is often the case that doing so is not convenient. For example, properties can be initialized through dependency injection, or in the setup method of a unit test. In these cases, you cannot supply a non-null initializer in the constructor, but you still want to avoid null checks when referencing the property inside the body of a class.
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
- コンパイラは インポート時に `android.database.sqlite.SQLiteOpenHelper`の中にある
29
+ Kotlin は インポート時に `android.database.sqlite.SQLiteOpenHelper`の中にある
30
30
  + getで始まる名前の無引数メソッド
31
31
  + setで始まる名前の単一引数メソッド
32
- を、 kotlin 側から 「先頭の ”set”/"get"を除いて、次の文字を小文字にした名前」でアクセスできるように、自動的に解釈します。(上の2つが冒頭で言及した「一定の規約」です)
32
+ を、 Kotlin 側から 「先頭の ”set”/"get"を除いて、次の文字を小文字にした名前」でアクセスできるように、自動的に解釈します。(上の2つが冒頭で言及した「一定の規約」です)
33
33
   
34
34
  これにより、
35
35
  writableDatabase <-> getWritableDatabalse

1

 

2023/03/05 22:12

投稿

退会済みユーザー
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