Kotlin 메모 - 코드 편(1)

9061 단어 AndroidKotlinJava
Kotlin 메모.저번에 했던 거야. 계속해.
지난번 환경 건설에 관한 건설을 썼다.
그리고 Java->Kotlin에 대해 다양한 사람들이 쓰고 있습니다.
내가 구글에 있을 때 먼저 이 사람의 투고가 있어서 참고하라고 했다.
코가라시씨 거Android 개발로 시작된 Kotlin.
하지만 보기만 해도 잘 모르겠어요.
어쨌든 터치를 해야 돼요.
어떤 것을 쓰는지 터치해 보세요.
※ 잘못된 해석 등이 있을 수 있으니 이를 지적해 주십시오.

교대하다


아, 먼저 반을 하나 합시다.
- 1. AppCompatActivity 상속
- 2. View.OnClickListener 구현
 
Java
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

}
kotlin
open class MainActivity : AppCompatActivity() , View.OnClickListener {

}
  • class 앞의'open'
  • extends와implements의 기술이 사라졌다
  • 오픈 수식자


    우선 "open"에 대해.
    이open을 가진 클래스는 계승 가능한 클래스입니다.
    오픈을 추가하지 않으면 이 종류를 계승할 수 없습니다.
    지금까지의public,private,protected의 3가지 가시성
    오픈 두 가지만 기억하면 될 것 같아서요.

    abstarct 수식자는?


    이번에는 안 썼지만 abstract 수식자를 붙인 상태에서
    kotlin
    abstract open class HogeClazz {
    
    }
    
    오픈하기 전에 붙여.
    추상류의 경우 오픈을 하지 않아도 계승할 수 있다는 것을 확인했다.
    ▶ 계승원의 추상적 클래스
    kotlin
    abstract class AbstractSample {
        abstract fun aaa() : Boolean
    }
    
    ▶ 상속지 학급
    kotlin
    open class ExtendsClazz : AbstractSample() {
        override fun aaa() : Boolean {
            return false;
        }
    }
    
    추상반에서 했기 때문에 보통 계승하는 느낌이죠?
    한번 해봤는데,class 전에private를 붙일 수 있을 것 같아요.
    어쨌든 가시성을 설정할 수 있다.
    그렇다면 아까의 오픈을 가시적인 3가지 모델에 편입한 논평을 설명하는 것은 좋지 않은 것 같다.
    open-> 상속 가능
    open-> 상속 불가
    그냥 단순히 기억해.
    그럼에도 불구하고 프라이빗한 동창은 무엇일까.
    어디까지 갈 수 있는지...
    그 일에 관해서는 나중에 다시

    interface


    인터페이스는 어떤 느낌의 기술일까요?
    어디 보자.
    java
    public interface IBaseListener {
        void onSuccess();
        void onError(String message, Throwable e);
    }
    
    kotlin
    interface IBaseListener {
        fun onSuccess()
        fun onError(message: String, e: Throwable)
    }
    
    거의 변하지 않았어요.
    겸사겸사 인터페이스에도 오픈 수식자를 추가할 수 있습니다.
    오픈이 없으면 설치가 안 돼요. 괜찮은 것 같아요.

    내부 등급


    우선 특별히 계승하고 설치하지 않은 내부 반이다.
    컨텍스트와 문자열을 매개 변수에 전달하여 보존하기만 하면 되는 클래스로 만듭니다.
    java
        private class InnerClass {
            private Context mContext;
            private String mString;
    
            public InnerClass(final Context context, final String str) {
                mContext = context;
                mString = str;
            }
        }
    
    kotlin
        private inner class InnerClass(private val mContext: Context, private val mString: String)
    
    많이 짧아졌어요.
    부품마다 다 보여요.

    내부 클래스 정의


    Java에서는 Kotlin에서
    "내복 쓸 거야! 괜찮아? 쓸 거야!!!"
    이처럼'inner class'라고 쓸 필요가 있을 것 같습니다.private inner class InnerClass

    클래스 이름 다음()


    뭐가?
    자바 때 운이 안 좋았어.
    변환 전의 Java와 변환 후의 Kotlin을 비교해 보겠습니다.
    Java
        private class InnerClass {
            private Context mContext;
            private String mString;
    
            public InnerClass(final Context context, final String str) {
                mContext = context;
                mString = str;
            }
        }
    
    private inner class InnerClass(private val mContext: Context, private 
    val mString: String)
    
    
    두 번 실렸지만 어쨌든 구조 함수는 생략할 수 있다.
    그러나 이것은 구조 함수가 mContext와 mString에 값을 넣었기 때문에 이런 기록이 있는 거죠?
    한번 해볼게요.
    구조 함수에서 특별한 일을 하지 말고 initialize 방법을 추가하고 mContext와 mString에 값을 추가하십시오.
    java
        private class InnerClass {
            private Context mContext;
            private String mString;
    
            public InnerClass() {
            }
    
            public void initialize(final Context context, final String str) {
                mContext = context;
                mString = str;
            }
        }
    
    kotlin
        private inner class InnerClass {
            private var mContext: Context? = null
            private var mString: String? = null
    
            fun initialize(context: Context, str: String) {
                mContext = context
                mString = str
            }
        }
    
    그렇구나.
    한마디로 구조 함수를 사용할 때 이런 느낌()으로 처리할 수 있습니다!
    ・・ 구조함수에서 슈퍼라고 하면 어떨까???
    한번 해볼게요.
    내부 클래스에서View를 계승하여 구조 함수 2개를 준비한 것을 Kotlin으로 보여 줍니다.
    java
        private class InnerClass extends View {
            private Context mContext;
            private AttributeSet mAttr;
    
            public InnerClass(Context context) {
                super(context);
                mContext = context;
            }
    
            public InnerClass(Context context, @Nullable AttributeSet attrs) {
                super(context, attrs);
                mContext = context;
                mAttr = attrs;
            }
        }
    
    kotlin
       private inner class InnerClass : View {
            private var mContext: Context? = null
            private val mAttr: AttributeSet
    
            constructor(context: Context) : super(context) {
                mContext = context
            }
    
            constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
                mContext = context
                mAttr = attrs
            }
        }
    
    오!!!
    "constructor"라고 쓰세요.':'뒤에서 슈퍼 호출
    괄호 안에 다른 처리를 쓰는 것 같다.
    예전과 다른 습관이 있는 것 같아요.이거 기억해야 될 것 같은데.
    그나저나 구조 함수가 하나인 상황에서 기술은 다르다.
    한 상황에서
    kotlin
    private inner class InnerClass(private val mContext: Context) : View(mContext) {
    }
    
    구조 함수 설명은 생략할 수 있을 것 같습니다.
    //추적
    좀 신경 쓰여서 조사해 봤는데 속옷반만 있는 게 아니라...
    따라서 통상적인 어느 반에도 이 기술이 적용된다.
    kotlin
    open class HogeClass(private val mContext: Context) : View(mContext) {
    }
    
    에서 기술한 장면은 다음과 같은 절차를 이용하여 명세표를 작성하여 개념 디자인에서 체량의 부피를 분석하도록 한다.
    그럼
    한번 해봤는데,class 전에private를 붙일 수 있을 것 같아요.
    상술한 바와 같이, 아마도, 아마도, 아마도 무엇이겠지만, 이 내부 등급이 준비된 가시성을 위해서가 아니겠는가.
    더 이상 앞으로 나가지 않으면 이해가 안 될 수도 있어...

    변수 및 상수


    변수와 상량을 살펴봅시다.
    java
        private static final int TEISU_INT = 0;
        private static final String TEISU_STRING = "hoge";
        private Context mContext;
        private View mView;
    
    kotlin
        private val mContext: Context? = null
        private val mView: View? = null
    
        companion object {
            private val TEISU_INT = 0
            private val TEISU_STRING = "hoge"
        }
    

    함수


    우선 변수를 설명해 드리겠습니다.
    private val hoge: String? = null
    

    val 및 var


    private val ← 이 녀석
    이것은 자바에서 말한 파이널 수식자와 같은 작용을 한다.
    java
    final String strHoge = "hoge";
    strHoge = "huga";     ★代入できないからコンパイルエラー
    
    String strHuga = "hoge";
    strHuga = "huga";    ★代入できる
    
    Kotlin은 그렇습니다.
    kotlin
    val strHoge: String? = "hoge";
    strHoge = "huga";     ★代入できないからコンパイルエラー
    
    var strHuga: String? = "hoge";
    strHuga = "huga";    ★代入できる
    
    특별히 쓸 가치도 없고...

    객체 정의


    이 녀석
    바로 이 부분입니다.
    Java의 경우 지정된 순서와 반대이기 때문에 Kotlin을 쓰기 시작할 때마다
    "아...또 했어요."
    그렇습니다.
    지금까지는 지정한 대상→변수 이름이었지만 변수 이름이 먼저 도착했다.
    Kotlin이 객체를 지정할 필요가 없기 때문입니다.
    유형 추리로 정의할 수 있다는 얘기다.
    그래서
    kotlin
    var hoge = null
    
    그럼요.
    하지만 지금까지 자바를 했던 사람들에게는 정말 힘들었어요.
    뭘 넣었는지 뭘 썼는지 모르겠어요.hoge 같은 변수 이름은 필요 없어요.
    그래서 나도 앞으로 어떻게 사용해야 할지 모르겠지만, 일반적인 상황에서는
    1.var 또는 val
    2. 변수 이름
    3. 객체 지정
    이런 식으로 쓰면 좋잖아.

    대상 뒤의


    : String ?이 녀석
    이게 뭐야?
    Java에서 NonNull 주석, Nullable 주석과 동일합니다.
    어쨌든, "?"없는 짓이야.
    kotlin
    var str1: String?
    str = null     ★これは?つけてNullableなのでnull代入OK
    
    var str2: String
    str = null     ★これは?なくてNoneNullなのでnull代入NG
    
    이거?나는 swift 개발자가 말한'전문형''비선택형'에 해당한다고 생각한다.
    스위프트를 하는 사람에게는 익숙해졌을 수도 있지만 안드로이드 개발에서 자바를 해 온 사람에게는 익숙하지 않기 때문에 조금만 받아들이는 데는 시간이 걸릴 수도 있다.
    이 방면의 처리에 관해서 나는 또 다른 보도를 해서 잘 정리하고 싶다.

    상량


    다음은 상수다.
    작법에 큰 변화가 있기 때문에 나는 지정된 방법만 기억하면 된다고 생각한다.
    코드 한 번 더 쓸게요.
    kotlin의 상수 정의
        companion object {
            private val TEISU_INT = 0
            private val TEISU_STRING = "hoge"
        }
    
    companion으로 절반을 번역했습니다.
    "친구"느낌인가요?

    참고로 프라이빗이라면 다른 반에서 참조할 수 없다
    프라이빗이 없는 것을 참조할 수 있습니다.퍼블릭 처리죠.
    protected 같은 가시성이 사라진 것 같아서 지정하지 못했습니다.
    kotlin의 상수 정의
        companion object {
            private val TEISU_INT = 0  ←他クラスからの参照不可
            val TEISU_STRING = "hoge" ←他クラスからの参照可
        }
    
    우선, 클래스를 만들고 변수를 정의하는데... 이런 입구 부분은 잠시 기재되어 있습니다.
    아, 명령의 마지막에';(분호)'를 붙이면 번역 오류가 발생할 수 있으니 주의해야 한다.
    다른 것도 많이 쓰겠지만 여기까지만 쓰세요.
    그리고 Kotlin의 샘플을 보고 싶으면 여기를 보세요.
    https://try.kotlinlang.org/

    좋은 웹페이지 즐겨찾기