Kotlinのデフォルト構文の処理
この投稿はyoutuber Code with Joyceの講義に基づいて書かれたものです.
1.関数の使い方の戻り値にかかわらず、
return値がある場合は、 パラメータを渡す場合は、タイプの前に変数名を宣言します.
varは変数を他の値に変換して使用できます.
3. String template
4-3. ExpressionとStatement
コードユニットExpressionとStatementがあり、Kotlinの関数と条件文はjavaとは異なり Expression:1つ以上の値で表すことができるコード 状態:最小の独立コードブロック ExpressionはStatementの一部集合です.したがって,ExはStであってもよいが,StはすべてExではない.
ここでmaxByとmaxBy 2はどちらもExpressionです.cortlinの関数に戻り値がない場合でも、すべての関数がUnitを返すため、すべての関数がExpressionとしてマークされます.
ただし、maxByでは、条件文はStatementとしてマークされ、maxBy 2では、条件文はExpressionとしてマークされます.
Javaではvoid関数に戻り値がないためStatementで表される関数である.また、javaでは条件文はStatemtとしてマークされています.
4-2. When
スイッチドアとあまり差がありません.
可変リスト(変更可能)=arrayList、Array
inmutableList(変更不可)=List
6-1. For
Javaはコンパイル時にNPEをキャプチャすることができず、実行時にのみNPEをチェックするため、実行時エラーが発生することが多い.
コトリンでは、コンパイル時にnullチェックをするのがとても便利です!
7-1. ? 演算子 null値を含む可能性がある変数を宣言した場合、typeの後に?貼り付け null値であるかどうかを確認するには、変数名の後にしますか?貼り付け 変数がnullの場合、デフォルト値を指定したり、空の値を変換したりする関数の結果が生成されます. 宣言の値が絶対nullでない場合!!演算子として宣言した場合、null値を後でチェックする必要はありません.
7-4. ?.
セキュリティ処理用 null.nullでない場合は、右側の関数を実行するか、nullを返します. javaとは異なり、ファイル名とクラス名は一致する必要はありません. 8-1. クラスの作成基本ジェネレータは、クラス宣言の隣にある パラメータで渡された値はかっこの横の構造関数で直接生成され、値がなければ初期化値を書くことができます. オブジェクトを生成する場合、Javaとは異なり、 8-2. 親ジェネレータとinitジェネレータ initジェネレータは、プライマリジェネレータが呼び出されるたびに呼び出されるジェネレータです.オブジェクトまたはサブクラスの作成者を呼び出すときに自動的に呼び出されます. 部生成者が自主生成者に来るので、主生成者から受け取った値を 8-3. 継承と上書きコトリンではclassとmethodがfinalとして宣言されているため、 継承宣言方法
1.関数の使い方
fun 함수명()
に統一されています.return値がある場合は、
fun 함수명(): Unit
と宣言されます.fun helloWorld(){
println("Hello world!")
}
fun add(a: Int, b:Int) : Int{
return a+b;
}
fun add(a: Int, b : Int) = a + b //expression 표현식
2. val VS varfun hi(){
val a : Int = 10
var b = 9 // 자동으로 타입을 선언해준다. 타입 추론 가능
//a = 9 => error!
b = 100
}
valは定数に変更されない値を表します.変数に1回値を初期化した場合、後で他の値に割り当てることはできません.Javaでfinal
を使用するのと同様varは変数を他の値に変換して使用できます.
3. String template
val name = "Jaewon"
println("my name is ${name} !!")
println("is this true? ${1==0}")
println("this is 2\$!!")
/*
my name is Jaewon !!
is this true? false
this is 2$!!
*/
4.条件文4-3. ExpressionとStatement
コードユニットExpressionとStatementがあり、Kotlinの関数と条件文はjavaとは異なり
Expression으로 표기가 가능
です.fun maxBy( a: Int, b:Int) : Int{
if(a >b){
return a
}else{
return b
}
}
fun maxBy2(a : Int, b:Int) = if (a>b) a else b
maxByのコードはmaxBy 2で表すことができます.ここでmaxByとmaxBy 2はどちらもExpressionです.cortlinの関数に戻り値がない場合でも、すべての関数がUnitを返すため、すべての関数がExpressionとしてマークされます.
ただし、maxByでは、条件文はStatementとしてマークされ、maxBy 2では、条件文はExpressionとしてマークされます.
Javaではvoid関数に戻り値がないためStatementで表される関数である.また、javaでは条件文はStatemtとしてマークされています.
4-2. When
スイッチドアとあまり差がありません.
fun checkNum(score : Int){
when(score){
0 -> println("this is 0")
1 -> println("1")
2,3 -> println(" 2 or 3")
else-> println(" 0~3이 아니다.")
}
// 조건문이 statement로 사용될땐 else문이 없어도 된다.
var b = when(score){
0 -> 0
1 -> 1
2 -> 2
else -> 3
}
//조건문이 expression으로 사용될땐 else문이 꼭 있어야 한다.
println("b : ${b}")
when(score){
in 1..3 -> println("1~3")
in 4..5 -> println("4~5")
else -> println("1~3이 아니다.")
}
}
/*
입력 0
출력
this is 0
b : 0
1~3이 아니다.
*/
5. Array, List可変リスト(変更可能)=arrayList、Array
inmutableList(変更不可)=List
// 초기화 방법
val array = arrayOf(1,2,3)
val list = listOf(1,2,3)
// 여러 타입 초기화 가능
val array2 = arrayOf(1,"d",3.4f)
val list2 = listOf(1,"d",3.4f)
array[0] = 3 // 변경가능
//list[0] = 2 // 리스트의 원소 변경 불가능, 읽기전용
var result = list.get(1)
// 데이터 추가
var arrayList = arrayListOf<Int>()
arrayList.add(10)
arrayList.add(20)
6.繰り返し文6-1. For
val students = arrayListOf("jaewon","sungmin","bubble","danchoo")
for (name in students){
println("${name}")
}
for((index,name) in students.withIndex()){
println("${index+1}번째 학생 : ${name}")
}
for (i in 10 downTo 1){
sum += i
}
for (i in 1 until 100){
sum += i
}
6-2. Whilewhile (index < 10){
println("index : ${index}")
index++
}
7. Nullable/NonNullJavaはコンパイル時にNPEをキャプチャすることができず、実行時にのみNPEをチェックするため、実行時エラーが発生することが多い.
コトリンでは、コンパイル時にnullチェックをするのがとても便利です!
7-1. ? 演算子
var name : String = "jaewon"
var nullName : String? = null
var nameInUperCase : String = name.toUpperCase()
var NullNameUPerCase : String? = nullName?.toUpperCase()
// nullName 변수가 null 값이면 'null'을 반환하고 null이 아니면
// 메서드를 실행시킨다. nullName 뒤에 ?가 붙지 않으면 컴파일오류
7-2. ?: エルビス演算子val lastname : String? = null
val fullname : String? = name+" "+(lastname?: "No lastName")
val name1 : String? = lastname?: return
val name2 : String? = lastname?: throw NullPointerException()
7-3. !!fun ignoreNull(str : String?){
val mNotNull : String = str!!
val upper = mNotNull.toUpperCase()
}
strは空の値ではないことを保証するので、2番目の実行文では?書き間違えなくても起こりません.7-4. ?.
セキュリティ処理用
val email : String? = "ashwon12"
email?.let {
println("my email is ${email}")
}
8. Classclass Person constructor(val name : String = "익명"){
open fun eatingCake(){
println("${name}이 말하길,,,케이크는 맛있다!")
}
}
fun main(){
val person1 = Person("jaewon")
val person2 = Person()
person1.eatingCake()
person2.eatingCake()
}
/*
출력
jaewon이 말하길,,, 케이크는 맛있다!
익명이 말하길,,, 케이크는 맛있다!
*/
constructor()
によって生成される.省略できます.かっこだけを書きます.new
を省略して書き出します.class Person constructor(val name : String = "익명" ){
init {
println("주 생성자의 일부!, 객체 생성!")
println("person is ${name}")
}
constructor(name : String, age : Int) : this(name){
println("my name is ${name}, age is ${age}")
}
}
fun main(){
val person = Person("jaewon")
val person2 = Person()
val sungmin = Person("sungmin",25)
}
/*
출력
주 생성자의 일부!, 객체 생성!
person is jaewon
주 생성자의 일부!, 객체 생성!
person is 익명
주 생성자의 일부!, 객체 생성!
person is sungmin
my name is sungmin, age is 25
*/
this()
で伝達しなければならない.open class Person constructor(val name : String = "익명"){
init {
println("주 생성자의 일부!, 객체 생성!")
}
open fun eatingCake(){
println("${name}이 말하길,,,케이크는 맛있다!")
}
}
class onePerson() : Person(){
override fun eatingCake(){
//super.eatingCake()
println("${name}은 cake를 싫어해!")
}
}
fun main(){
val person = Person("jaewon")
person.eatingCake()
val person2 = onePerson()
person2.eatingCake()
}
/*
출력
주 생성자의 일부!, 객체 생성!
jaewon이 말하길,,,케이크는 맛있다!
주 생성자의 일부!, 객체 생성!
익명은 cake를 싫어해!
*/
open
コマンドがなければ継承と上書きはできません.class 자식클래스() : 부모클래스()
Reference
この問題について(Kotlinのデフォルト構文の処理), 我々は、より多くの情報をここで見つけました https://velog.io/@ashwon1218/Kotlin-기본-문법-다루기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol