コトリンの基本文法
コトリンの基本文法
1.main()関数
Intellijでcottlinプロジェクトを作成し、大学生のときに最初に接触したプログラミング担当者として
mainを入力し、Tabキーを押して自動的に作成します.argsを追加する場合は、mainaを押すだけで、Tabキーを押すと自動的に完了します.
上記main関数がJVMで実行されると、main関数を含むファイル名に基づいてJavaクラスが自動的に生成されます.
シーケンスは、JVMでCOTLIN->バイトコードの順に実行されます.
上記の方法を逆コンパイルすると、以下のコードとして解釈されます.
package
コトリンプロジェクトは複数のモジュールから構成されています.通常、各機能はモジュール単位で管理され、モジュールにpackageを配置してクラス/ファイルを管理します.
2.変数の作成
変数宣言キーワードは2種類あります. val:不変、JavaScriptのconst、JavaのStringクラス.Javaのfinalキーワードとは少し違います var:可変変数で、通常の変数として再割り当てできます.JavaScriptのletと同じです.コートリンで変数を宣言するには、キーワードの1つを使用する必要があります.
変数と割当て変数を同時に宣言しない場合は、タイプを無視することはできません.
変数宣言の例
コトリンでは、参照フォーマットを使用して符号化する必要があります.
コンパイラは内部で基本型に変換し、最適化されたバイトコードにするので、参照型だけを使用するのもいいです.
(int,long,double,...この基本タイプではなくlong,double,...を使うべきで、内部もよく置き換えることができます.)
3.資料型整数データ型 Long、Int、Short、Byte.
変数を宣言するときにタイプが個別に書き込まれていない場合は、アノテーションでタイプが指定されます.
値100、省略タイプの場合はIntと推定され、99933332223344455はLongと推定される. valex 1=100 Lのように接尾辞Lを付けると,Longタイプと推定される.整数タイプでは、Intはデフォルトです.Short範囲内の整数であってもShortではなくIntと推定する.
実数データ型 のデフォルトは二重引用符で、値にFを付けるとFloatタイプになります.
論理データ型 valisOpen=trueは自動的にBooleanと推定されます.
文字データ型 '(一重引用符)という文字を指定すると、Charと推定されます.
文字列データ型 文字列タイプは、他のタイプとは異なり、基本タイプではなく参照タイプです.値に文字を並べた場合、Stringタイプと推定されます.Javaと同様にお尻でStringPoolを共有するのが特徴です.
文字列""の使用方法(文字列自体で表す方法)資料型別名
4.資料型検査コトリンnull コトリンは変数を使用するときに値を付けなければなりません!このような原則がある.(nullが好きではありません)これまで、上記のコードでは多変数nullは許可されていませんでした.nullを許可する場合は、疑問符(?)を入力します.記号をタイプに貼り付けた後、変数を宣言します.エルビス演算子:(?:) 上で学んだSAFE CALLとELVIS演算子を使って、とてもきれいなnull処理を実現できます.
値がnullの場合、エルビス演算子は演算子であり、予め指定された値を返します.したがって、出力を-1として指定すると、-1が表示されます.
if文を使用してnullを1つずつチェックする必要がなく、1行で処理できるため、読みやすさが向上します.
5.データ変換
int値を二変数に割り当てると、Javaは自動的にタイプを変換します.
比較値:
比較参照アドレス:
基本タイプと参照タイプの比較例
ただし、
デフォルトでは、はnullを許可します.これは、変数自体がオブジェクトであることを意味します.nullをデフォルトのタイプに割り当てることもできません. -128-127の整数値はキャッシュに格納され、参照される. したがって、上記の例では、値が10の場合、10自体がキャッシュに格納され、すべての変数がキャッシュのアドレス値を格納する.
6.インテリジェント放送
値が整数、実数の場合、どうすればいいですか?
nullが発生する可能性がある場合は、異常を回避するために、以下の方法で疑問符を付けて解決できます.
yがnullの場合、asキーにアクセスせずにnullが返されます.ttはnullとすることができるのでnullを保存します.
参考文献:Do it!コトリンプログラミング
1.main()関数
Intellijでcottlinプロジェクトを作成し、大学生のときに最初に接触したプログラミング担当者として
Hello Kotlin!
をコンソールウィンドウに配置する例を作成しました.fun main() {
println("Hello Kotlin!")
}
上のkotlinファイルでのみmain()関数を定義して実行すると、コンソールは正常にHello Kotlin!
を出力します.mainを入力し、Tabキーを押して自動的に作成します.argsを追加する場合は、mainaを押すだけで、Tabキーを押すと自動的に完了します.
上記main関数がJVMで実行されると、main関数を含むファイル名に基づいてJavaクラスが自動的に生成されます.
シーケンスは、JVMでCOTLIN->バイトコードの順に実行されます.
上記の方法を逆コンパイルすると、以下のコードとして解釈されます.
public final class HelloKotlinKt {
public static final void main() {
String var0 = "Hello Kotlin!";
boolean var1 = false;
System.out.println(var0);
}
}
上記のソースコードから、main()メソッドはHelloKotlinktクラスに属するメンバーメソッドとして宣言されていることがわかります.JavaをアルバムJVM上で実行するため、文字列はString var 1として宣言され、Systemと呼ばれます.out.println()からコンソールデバイスに出力されます.package
コトリンプロジェクトは複数のモジュールから構成されています.通常、各機能はモジュール単位で管理され、モジュールにpackageを配置してクラス/ファイルを管理します.
2.変数の作成
変数宣言キーワードは2種類あります.
val
を主とし、セキュリティの向上を目標とし、可変割当が必要な変数に対してvar
を用いるべきである.val username: String = "junyoung"
변수선언키워드 변수명:타입=값
こう書けばいいCottinコンパイラがタイプを推定できる場合は、このタイプを省略できます.val username = "junyoung"
上記のように、値が文字列の場合、cottlinコンパイラはユーザー名をStringタイプと推定します.変数と割当て変数を同時に宣言しない場合は、タイプを無視することはできません.
val name // 불가능
val name:String // 가능
name = "hello"
前述したように、先に宣言するだけであれば、タイプを記入する必要があります.変数宣言の例
// val var 차이
val name:String = "immutable"
var age:Int = 20
name = "junyoung" // val로 설정했으니까 컴파일 시점에 에러가 납니다.
age = 30
println("age: $age") // $(달러표시)로 변수를 출력할 수 있습니다.
// 선언과 할당
var number = 10
number = 20
var number2:Int // Int라고 타입을 줬으니까 선언만 해도 됩니다.
number2 = 30
val number4 // 이 변수는 타입을 가져야 하거나 초기화가 되어야된다는 에러가 납니다.
変数タイプ基本タイプ(Primitive type)と参照タイプ(Reference type)コトリンでは、参照フォーマットを使用して符号化する必要があります.
コンパイラは内部で基本型に変換し、最適化されたバイトコードにするので、参照型だけを使用するのもいいです.
(int,long,double,...この基本タイプではなくlong,double,...を使うべきで、内部もよく置き換えることができます.)
3.資料型
変数を宣言するときにタイプが個別に書き込まれていない場合は、アノテーションでタイプが指定されます.
値100、省略タイプの場合はIntと推定され、99933332223344455はLongと推定される.
val myLong = 99_933_322_233_344_455 // Long으로 추론
val ex1 = 0x0F // 16진수 표기 15
val ex2 = 0b0001111 // 2진수 표기 15
実数データ型
論理データ型
文字データ型
文字列データ型
var string1 = "hello"
var string2 = "hello"
println(${string1 === string2}) // true
// string1과 string2가 참조하는 주소값이 같습니다.
文字列で「(二重引用符)または$(ドルで表される)を使用する場合は、反スラッシュ()を前に置くことができます.val expression = "\"hello\" this is \$10"
スラッシュではなく${""}を使用する場合は、二重引用符を適用できます.文字列""の使用方法(文字列自体で表す方法)
val num = 10
val formattedString = """
var a = 11
var b = "hello kotlin"
"""
println(formattedString)
実行結果var a = 11
var b = "hello kotlin"
typealias Username = String
val user:Username = "junyoung"
typealiasキーワードを使用してStringタイプにユーザー名を付けます.4.資料型検査
// null 문제
val str:String = "hello_world"
str = null // 컴파일러에서 이미 에러 발생함
// 타입 뒤에 ? 붙이면 null이 할당될 수 있는 변수라는 의미입니다.
var str2:String? = "hello_world" // val은 immutable이라 ?를 붙여도 컴파일 에러가 발생합니다.
str2 = null
println(str2) // null 출력
// non-null 단정 기호와 세이프 콜
var nullableString:String? = "hello_kotlin"
nullableString = null
// println("nullableString: $nullableString.length: ${nullableString.length}") // .에서 컴파일 에러 발생
// String? 타입에서는 ?.(세이프콜) 또는 !!.(non-null 단정기호)만 쓸 수 있다고 나온다.
// safe call이란 말 그대로 안전하게 호출하도록 도와주는 기법이다. println("nullableString : $nullableString , length : ${nullableString?.length}") //출력 값 : nullableString : null , length : null
var testString:String? = "hello_kotlin"
testString = null
println("testString length: ${testString?.length ?: -1}")
testStringは、SAFE COLONGにアクセスせずにnullを返すため、エルビス演算子の前の値はnullとなります.値がnullの場合、エルビス演算子は演算子であり、予め指定された値を返します.したがって、出力を-1として指定すると、-1が表示されます.
if文を使用してnullを1つずつチェックする必要がなく、1行で処理できるため、読みやすさが向上します.
5.データ変換
int値を二変数に割り当てると、Javaは自動的にタイプを変換します.
int a = 3;
double d = a; // 3.0으로 자동 변환
コトリンは自動的に形を変えることはありません.逆にタイプミスが発生し、ミスを徹底的に防止します.従って、コトリンはフォーマットを変換する方法を提供した.val intValue:Int = 3
val doubleValue:Double = intValue.toDouble()
val result = 1L + 3 // Long으로 형변환 -> 표현범위가 더 큰쪽으로 변환됩니다.
基本型と参照型の比較原理比較値:
==
、値が同じ場合true、値が異なる場合false比較参照アドレス:
===
、参照自体が同じ(値にかかわらず)場合はtrue、そうでなければfalse(値は考慮されませんが、参照自体が同じ)です.基本タイプと参照タイプの比較例
val one:Int = 128
val two:Int = 128
println(one == two) // true
println(one === two) // true
val three:Int = 128
val four:Int? = 128
println(three == four) // true
println(three === four) // false
// Int 형으로 선언된 three는 128 값 자체가 스택에 저장, Int? 형으로 서언된 four는 128이 힙 영역에 저장되어 있고, 그것의 주소로 저장합니다.
val data1:Int = 128
val data2 = data1;
println(data1 == data2)//기본형으로 int로 변환되어 값이 동일하므로 true
val data3:Int? = data1 //128이라는 값을 힙에 할당하고 그것을 가리킵니다.
val data4:Int? = data1 //128이라는 값을 힙에 할당하고 그것을 가리킵니다.
val data5:Int? = data3
println(data3 == data4) //true 값만 비교했는데 두 개의 값은 128로 같습니다.
//각각 값은 128로 동일하지만 힙에 생긴 128은 각각 생기기 때문에 다른 주소를 가리키므로 주소비교는 false
println(data3 === data4) //false
/**
* data5는 data3를 가리키는데 data3가 힙의 128의 주소를 가리키고 있으므로
* 복사되었을 때 같은 힙에 있는 128을 가리킵니다.
**/
println(data3 === data5) // true
まず、メモリ領域のHIPで作成するかスタックで作成するかを知る必要がありますが、簡単に言えばnullを許可しない変数は、参照タイプを使用する場合、内部でデフォルトタイプの値が得られ、スタックに直接割り当てられます.ただし、
null
の変数は、基本タイプの参照に変換されても、hipに独自の値を割り当て、そのアドレスを스택공간
に割り当てることができる.デフォルトでは、
6.インテリジェント放送
値が整数、実数の場合、どうすればいいですか?
Number
型もございます(特殊オブジェクト)Number
型として定義される変数は、整数および実数を含むことができる.var sc:Number = 3.14
println(sc) // 3.14 Double
sc = 3
println(sc) // 3 Int
sc = 30L
println(sc) // 30 Long
sc = 10.1F
println(sc) // 10.1 Float
データ型チェック時isキーワードval cup = 3
if(cup is Int) {
println("Int Type")
}
if(cup !is Int) {
println("Not a Int Type")
}
if(!(cup is Int)) {
println("Not a Int Type")
}
データ型インテリジェント放送val x:Any // Any는 자바의 Object와 유사합니다. 모든 타입의 부모 타입입니다. Any를 이용하면 자료형을 결정하지 않은 채로 변수를 선언할 수 있습니다.
x = "jdk"
if(x is String) { // is 키워드로 검사될 때 자동으로 스마트 캐스팅 되었으므로 해당 조건문을 탑니다.
println(x)
}
asキーワードによるインテリジェント鋳造var y:Int = 3
val t:String = y as String
val tt:String? = y as? String
yがnullでない場合、Stringに変換してtに割り当てます.nullの場合、変換できないため異常が発生します.nullが発生する可能性がある場合は、異常を回避するために、以下の方法で疑問符を付けて解決できます.
yがnullの場合、asキーにアクセスせずにnullが返されます.ttはnullとすることができるのでnullを保存します.
参考文献:Do it!コトリンプログラミング
Reference
この問題について(コトリンの基本文法), 我々は、より多くの情報をここで見つけました https://velog.io/@sa1341/코틀린-기본문법テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol