アンドリュー・コトリン学習ログ5


開始します。


自分が勉強しながら整理したい部分を書いた文章です.👀
一緒に勉強している人に役に立つことを願っています.
もし私が間違っているところがあれば、お知らせください.💌

🔹 スキャン関数(scope関数)


特定のオブジェクトのコンテキストで特定の操作(初期化構成、使用率など)を実行するためにのみ使用される関数です.
ramda関数を使用すると、scope(範囲)が一時的に形成され、この範囲ではオブジェクトの名前を使用せずにアクセスできます.

◼ apply


オブジェクトの展開関数.
内部では、この方法でオブジェクトにアクセスできます.(省略可能)
返される結果はオブジェクト自体であるため、主にオブジェクトの初期化に使用されます.
    val person = Person().apply{
        name = "jjwim"
        age = 20
    }

◼ also


オブジェクトがパラメータを介して伝達される-ラムダの入力値
ラムダの入力値はitでアクセスでき,返される結果はオブジェクトである.
オブジェクトの有効性を検証するかprint関数でデバッグします.
    Random.nextInt(100).also { value ->
        print("$value")
    }

    // value 생략
    Random.nextInt(100).also {
        print("$it")
    }

◼ let


主にnull以外のオブジェクトでramdaを実行し、実行結果を返すために使用されます.
通常nullセキュリティのコードを記述するために使用されます.
    val number:Int?

    // number가 null일 때만 let 안의 내용을 실행한다.
    // if (number != null) 과 같다고 보면 된다.
    val sumNumberStr = number?.let {
        "${sum(10, it)}"
    }.orEmpty()

◼ with


ラムダの内部ではこの関数を使用でき、拡張関数としては使用できません.
戻り値はramdaの結果値です.
受信オブジェクトはnon-nullableであり,結果を必要としない場合に非常に有用である.
    val person = Person()

    // Person의 객체 함수나 변수들을 this를 통해 호출 가능
    // work(), sleep(), println(age)를 한번에 실행
    with(person){
        work()
        sleep()
        println(age)
    }

◼ run


オブジェクト(初期化)と計算結果を同時に構成する場合に便利です.
拡張関数として使用できます.
    val result = service.run {
        port = 8080
        query()
    }

🔹 Data Class


データを格納するクラス
copy、toString、hashCode、equleなどの関数が自動的に生成されます.

🔹 Lamda expression


コトリン(関数型言語に少し近い)でラムダ式を簡単に使用できる機能を提供しています.
簡単に言えば、ラムダ式は関数に関数を渡し、伝達された関数で関数を実行する役割である.
    button.setOnClickListener { v ->
   
    }

🔹 lateinit, lazy init


変数をnon-nullタイプとして宣言して空のコードを使用

◼ lateinit


遅延初期化
変数をすぐに使用しない場合は、
var(可変)変数にのみ適用
  // 미리 초기값을 넣어주지 못하는 상황에 선언
  private lateinit var menu: String

  // 추후 초기화 하는 코드
  // 단, 초기화를 해주지 않은 상태로 사용하면 오류 발생
  menu = "home"

◼ lazy init


変数を事前に宣言し、使用時に割り当てる
宣言と同時に初期化する必要があり、valのみが使用可能です.
呼び出しポイントで最初に初期化
    // 사용하기 전까지는 lazyNumber라는 변수에 100이 할당되지 않음
    val lazyNumber:Int by lazy { 
        100
    }

    //사용할 때 100이 할당됨
    lazyNumber.add()

🔹 内部(intent)


4つのコンポーネント(アクティブ、BroadCastReceiver、Service、ContentProvider)は、情報の有機的な伝達を実現します.

明示的なテント


Intentでクラスオブジェクトまたは構成部品の名前を指定して、呼び出すターゲットを決定します.(一部の構成部品やアクティビティが明確に動作する必要がある場合など)
val intent = Intent(this, SubActivity::class.java)
startActivity(intent)

あんていテント


Intentの動作とデータが指定されていますが、呼び出しが必要なターゲットでは同時に使用されない場合があります.アプリケーションがインストールされていることを知っているAndroidシステムは、Intentを使用して要求された情報を処理するための適切な組み合わせを検索し、ターゲットと処理結果をユーザーに表示します.隠しテントにはクラス名やパッケージ名は含まれません.次のコードを実行すると、AndroidシステムがどのアプリケーションでNAVERを実行するかを尋ねるコンポーネントがポップアップされます.
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://www.naver.com/"))
startActivity(intent)

🔹 Collection


  • List
    データが格納または削除されたときに順守されるタイプ
    indexでアクセス

  • Set
    同じ(重複)データが存在しないコレクション

  • Map
    key:valueタイプ(ただし、keyは繰り返すことはできません)