Android Kotlin 개발 실례(Hello World!)문법
머리말
Kotlin 은 자바 가상 컴퓨터 에서 실 행 된 정적 형 프로 그래 밍 언어 로 주로 러시아 상 트 페 테 르 부 르 크 의 JetBrains 개발 팀 이 발전 한 프로 그래 밍 언어 이다.이 언어 는 몇 가지 우세 가 있다.
1.간결 함
그것 은 네가 써 야 할 모델 코드 의 수 를 크게 줄 였 다.
2.안전
빈 포인터 이상 등 모든 종류의 오 류 를 피하 십시오.
3.통용
서버 엔 드 프로그램,안 드 로 이 드 프로그램 또는 브 라 우 저 에서 실행 되 는 전단 프로그램 을 구축 합 니 다.
4.상호작용 성
100%자바 상호 작용 성 을 통 해 JVM 기 존 프레임 워 크 와 라 이브 러 리 를 이용 합 니 다.
배치 하 다.
Google AndroidStudio 개발 도구 에서 Kotlin 이라는 우수한 개발 언어 를 사용 하려 면 플러그 인 을 설치 하고 설치 플러그 인 인터페이스 에서 Kotlin 을 검색 한 다음 설치 해 야 합 니 다.그 다음 gradle 파일 에 다음 설정 을 추가 합 니 다.
apply plugin:'kotlin-android'
apply plugin:'kotlin-android-extensions'
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
프로젝트 gradle 파일
buildscript {
ext.kotlin_version = '1.1.1'
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
위의 설정 을 완성 하면 우 리 는 즐겁게 놀 수 있 습 니 다.Kotlin 예시
우선 저 희 는 예전 과 마찬가지 로 안 드 로 이 드 프로젝트 를 만 들 고 Activity 를 자동 으로 만 든 후에 자바 류 를 만 듭 니 다.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
public class Test {
private static String str = null;
public static void main(String[] args) {
str = "Code4Android";
System.out.println(str);
}
}
그럼 위의 코드 는 kotlin 으로 이 루어 지면 어떤 모습 일 까요?아직 Kotlin 코드 를 쓸 수 는 없 지만 플러그 인 을 설치 한 후 AS 에 서 는 Kotlin 코드 를 자동 으로 변환 하 는 기능 을 제공 합 니 다.변 환 된 Kotlin 코드
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val toolbar = findViewById(R.id.toolbar) as Toolbar
setSupportActionBar(toolbar)
val fab = findViewById(R.id.fab) as FloatingActionButton
fab.setOnClickListener { view ->
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()
}
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.menu_main, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val id = item.itemId
if (id == R.id.action_settings) {
return true
}
return super.onOptionsItemSelected(item)
}
}
object Test {
private var str: String? = null
@JvmStatic fun main(args: Array<String>) {
str = "Code4Android"
println(str)
}
}
주의:AS 가 제공 하 는 자바 코드 자동 변환 기능 은 쉽게 사용 하지 말고 성숙 한 프로젝트 로 전환 하지 마 십시오.필요 하 다 면 우리 스스로 재 구성 하여 실현 해 야 합 니 다.그렇지 않 으 면 의사 가 없 는 일이 기다 리 고 있 을 것 이다.왜냐하면 전환 은 그렇게 지능 적 이지 않 기 때문이다.위의 코드 는 단지 Kotlin 코드 가 어떤 모습 인지 간단하게 익히 라 는 것 일 뿐 입 니 다.그 다음 에 우 리 는 먼저 Kotlin 의 기본 문법 을 배 워 보 겠 습 니 다.쉽게 손 에 넣 을 수 있 을 거 라 고 믿 습 니 다.Hello World!
저 희 는 간단하게"Hello World!"출력 프로그램 시작.새 자바 파일 과 유사 합 니 다.다음 그림 에서 Kotlin File/class 를 선택 하여 Kotlin 파일 을 만 듭 니 다.
package com.learnrecord
/**
*Created by Code4Android on 2017/4/21.
*/
var str: String = ""
fun main(args: Array<String>) {
str = "Hello World!"
println(str)
}
위 코드 는 간단 한 출력 문자열 인"Hello World"입 니 다.package 뒤 에는 가방 이름 이 있 습 니 다.자바 파일 과 의 차 이 를 알 수 있 습 니 다.가방 이름 뒤에 분점 이 없습니다."결말Kotlin 문법 에서 문장의 끝 에 분점 이 있 지 않 습 니 다.";".Kotlin 에서 변 수 는 두 가지 유형 이 있 습 니 다.val 수식 변 수 는 읽 기 변수 즉 한 번 만 할당 할 수 있 고 다시 할당 할 때 컴 파일 오류 가 발생 합 니 다.
만약 우리 가 값 을 여러 번 수정 해 야 한다 면 var 를 사용 해 야 합 니 다.위의 var str:String="에서 str 는 변수 이름 입 니 다.:String 은 이 변 수 는 String 형식 변수 이 고 그 다음은 할당 문 입 니 다.우 리 는 var str="생명 변수 유형 을 생략 하고 부 여 된 값 에 따라 유형 을 자동 으로 추정 할 수 있 습 니 다.만약 우리 가 아래 의 할당 문 구 를 str=null 로 사용한다 면 null 은 할당 할 수 없 는 것 을 발견 할 수 있 습 니 다.이것 이 바로 Kotlin 의 특성 입 니 다.만약 우리 가 null 을 할당 하고 싶다 면 var str:String?="으로 수정 할 수 있 습 니 다.
fun 은 함수 생명 입 니 다.이 main 함 수 는 우리 자바 의 main 방법 과 마찬가지 로 프로그램 이 실행 하 는 입구 입 니 다.println 은 인쇄 출력 입 니 다.
Kotlin 성명 형식
Kotlin 에는 다음 과 같은 몇 가지 Number 유형 이 있 는데 그들 은 모두 Number 추상 류 를 계승 한다.
Float(32 비트),Double(64),Int(32),Byte(8),Short(16),Long(64,유형 은 대문자 L,예 를 들 어 12L),Any(임 의 유형),배열 유형 Array 는 들 어 오 는 일반적인 데이터 에 따라 자동 으로 유형 을 매 칭 합 니 다.Kotlin 은 ByteArray,CharArray,ShortArray,IntArray,LongArray,FloatArray,DoubleArray,BooleanArray 등 지정 한 유형의 Array 도 제공 합 니 다.배열 형식 에 서 는 get(index),set(index,value)및 iterator()방법 을 제공 합 니 다.
val iArray: IntArray = intArrayOf(1, 2, 3)
val sArray: Array<String> = Array<String>(3, { i -> i.toString() })
val anyArray: Array<Any> = arrayOf(1, "2", 3.0, 4.1f) //
val lArray: LongArray = longArrayOf(1L, 2L, 3L)
함수.우 리 는 먼저 간단 한 수치 구 화 함 수 를 실현 합 니 다.통용 실현 방법 은 다음 과 같 습 니 다.
fun sum(a: Int, b: Int): Int {
return a + b
}
두 개의 Int 형 수 치 를 입력 합 니 다.sum 은 함수 이름 입 니 다.괄호 뒤의:Int 는 이 함수 가 Int 의 값 을 되 돌려 주 고 함수 체 에서 두 개의 숫자 를 더 하고 되 돌려 줍 니 다.Kotlin 에서 표현 식 은 함수 체 로 도 사용 할 수 있 습 니 다.컴 파일 러 는 반환 형식 을 추정 할 수 있 고 간략화 할 수 있 습 니 다.
fun sum(a: Int, b: Int) = a + b
표현 식 을 함수 체 로 이해 하기 위해 서 우 리 는 함수 하 나 를 만들어 두 수의 최대 치 를 얻 을 수 있 습 니 다.다음 과 같 습 니 다.
fun max1(a:Int,b:Int)=if (a>b) a else b
주의해 야 할 것 은 if 뒤에 여러 표현 식 이 있다 면 다음 과 같 습 니 다.
fun max1(a:Int,b:Int)= if (a > b) {
println(a)
a
} else {
println(b)
// println(b) b , kotlin.Unit ,
b
}
println(max1(1,3))
괄호 안의 표현 식 순 서 는 되 돌아 오 는 값 과 유형 을 결정 합 니 다.만약 우리 의 방법 체 가 인쇄 문자열 일 뿐 값 을 되 돌려 주지 않 는 다 면
fun printInt(a: Int): Unit {
println(a)
}
Unit 은 우리 자바 의 void 와 유사 합 니 다.즉,반환 값 이 없습니다.이때 우 리 는 생략 할 수 있 습 니 다.
fun printInt(a: Int) {
println(a)
}
함수 체,방법 또는 클래스 등 자바 와 마찬가지 로 수정자 도 있 습 니 다.다음 과 같 습 니 다.직접 코드 는 아래 와 같다.
// shl Int Long
var a: Int = 4
var shl: Int = a shl (1) //Java <<
var shr: Int = a shr (1) //Java >>
var ushr: Int = a ushr (3) // , 0 >>>
var and: Int = 2 and (4) // &
var or: Int = 2 or (4) // |
var xor: Int = 2 xor (6) // ^
print("
shl:" + shl + "
shr:" + shr + "
ushr:" + ushr + "
and:" + and + "
or:" + or + "
xor:" + xor)
출력 정보
shl:8
shr:2
ushr:0
and:0
or:6
xor:4
위의 일부 조작 부 호 는 논리 적 조작 부호 에 도달 할 수 있 습 니 다.우리 가 Boolean 을 사용 할 때,or()는||,and()는&,xor()와 같 습 니 다.조작 부호 양쪽 이 반대 일 때 true 이 고,그렇지 않 으 면 false,not()일 때 반 대 됩 니 다.배열 스 트 리밍 및 제어 문
배열 옮 겨 다 니 기
fun forLoop(array: Array<String>) {
// ( java foreach)
for (str in array) {
println(str)
}
//Array forEach
array.forEach {
println(it)
}
//array.indices
for (i in array.indices) {
println(array[i])
}
//( javafor(int i=0;i<arry.length;i++))
var i = 0
while (i < array.size) {
println(array[i++])
}
}
유형 판단 시 사용
fun whenFun(obj: Any) {
when (obj) {
25 -> println("25")
"Kotlin" -> println("Kotlin")
!is String -> println("Not String")
is Long -> println("Number is Long")
else -> println("Nothing")
}
}
is 와 자바 에서 인 스 턴 트 of 는 하나의 역할 로 어떤 유형 인지 판단 합 니 다.!is 즉 판단 은 어떤 유형 이 아니다.
//@ label, :i in 0..2 java for(int i=0;i<=2;i++)
loop@ for (i in 0..2) {
for (j in 0..3) {
println("i:" + i + " j:" + j)
if (j == 2)
//continue@loop// ,
break@loop // label ,
}
}
역순 출력 은 다운 투 입 니 다.
// 5 4 3 2 1 0
for (i in 5 downTo 0) {
println(i)
}
//
for (i in 1..5 step 3) print(i) // 14
//step downTo
for (i in 5 downTo 1 step 3) print(i) // 52
종류 와 매 거
/*** constructor:
* constructor ( :private) ,constructor :
* , , public
* primary constructor , init ,
*
*/
open class People private constructor(var id: String, var name: String) {
// :
var customName = name.toUpperCase() //
// , constructor , primary constructor, this
constructor( id: String, name: String, age: Int) : this(id, name) {
println("constructor")
}
init {
println(" , constructor ")
}
// open ,
open fun study() {
print("study")
}
//People ":" ,
class Student(id: String, name: String) : People(id, name) {
var test: Number = 3
private var name1: String?
get() {
return name1
}
set(value) {
name1 = value
}
//override , 。 , final
override fun study() {
super.study()
}
}
}
데이터 클래스 는 데 이 터 를 저장 하 는 데 사용 되 며,POJO 클래스 와 유사 하 며,data 키 워드 를 사용 하여 정의 합 니 다.컴 파 일 러 는 기본적으로 데이터 클래스 에 다음 과 같은 네 가지 방법 을 생 성 합 니 다.자바 구현 코드:
public class StaffJ<T> {
private String name;
private String position;
private T age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public T getAge() {
return age;
}
public void setAge(T age) {
this.age = age;
}
}
Kotlin 데이터 클래스:
data class Staff<T>(var name: String, val position: String,var age:T)
비 교 를 통 해 우 리 는 장점 을 알 수 있 고 한 줄 의 코드 가 실현 되 며 구체 적 으로 사용 되 었 다.
var staff = Staff("code4Android","Android ","22") //
이름 을 가 져 오 는 staff.name 과 같은 속성 을 가 져 오 려 면 할당 값 은 staff.name="code4Android 2"입 니 다.이렇게 할당 할 수 있다 고 했 는데 손 을 댄 동료 가 왜 제 가 잘못 보 고 했 는 지 말 했 습 니 다.다음 과 같 습 니 다.
staff.position=" "
컴 파일 이 잘못 되 었 습 니 다.앞에서 우 리 는 val 수식 의 속성 은 한 번 만 할당 할 수 있다 고 말 했 습 니 다.그러면 여기 서 val 수식 의 속성 은 다시 할당 할 수 없습니다.
fun main(arg:Array<String>){
var staff = Staff("code4Android","Android ","22") //
staff.name="code4Android2"
var staff1=staff.copy()
// copy , ","
var staff2=staff.copy(name="ccc",position = "kotlin")
println("name:${staff2.name} position:${staff2.position} age ${staff2.age}")
//staff.position="Kotiln" //val
var anotherStaff= Staff("code4Android","Android ",22) //
println("staff toString(): ${staff.toString()} anotherStaff toString(): ${anotherStaff.toString()}")
println("staff hashCode(): ${staff.hashCode()} anotherStaff hashCode(): ${anotherStaff.hashCode()}")
println("staff is equals another staff ? ${staff.equals(anotherStaff)}")
}
위 에 문자 템 플 릿 을 사 용 했 습 니 다.Kotlin 에는 두 가지 문자 템 플 릿 형식 이 있 습 니 다.$<변수>,${<변수>}
var name:String="Code4Android"
println(" $name")
println(" ${name}")
/**
* java ;kotlin , -object expressions
*/
open class KeyBord{
open fun onKeyEvent(code:Int):Unit = Unit
}
/** **/
var key=object :KeyBord(){
override open fun onKeyEvent(code:Int):Unit = Unit
}
매 거
enum class Color{
RED,BLACK,BLUE,GREEN,WHITE
}
fun display(){
var color:Color=Color.BLACK
Color.valueOf("BLACK") // name , , IllegalArgumentException
Color.values() // ,
println(color.name)////
println(color.ordinal)// ,0
}
Kotlin 에서 지원 하 는 방법 을 매 거 합 니 다.넓히다
/**
* fun receiverType.functionName(params){
*body
*}
* receiverType :
* . :
* functionName : ,
* params : ,
* , visibility modifiers
* , 。
* , , , 。
*/
class Employee(var name: String) {
fun print() {
println("Employee")
}
}
//
fun Employee.println() {
print("println:Employee name is $name")
}
/**
*
*/
fun Any?.toString1(): String {
if (this == null)
return "toString1:null"
else {
return "toString1" + toString()
}
}
/**
*
* ,
* . , .
* ,
* val var. var, ,
* , 。
*/
val Employee.lastName: String
get() {
return "get:"+name
}
쓰다
fun main(arg: Array<String>) {
var employee = Employee("Code4Android")
employee.print()
employee.println()
println(employee.toString1())
println(employee.lastName)
}
대리
**
*
*/
interface Base {
fun display()
}
/**
*
*/
open class BaseImpl : Base {
override fun display() = print("just display me.")
}
/**
* , : by
*
* class Drived(base: Base) : Base by base,BaseImpl()
*/
class Drived(base: Base) : Base by base
//
fun show() {
var b = BaseImpl()
var drived = Drived(b)
drived.display()
}
**
* :
* :Lazy
* :Delegates.observable()
* :Delegates.notNull<>()
*/
class Water {
public var weight:Int by Delegates.notNull()
/**
*
*/
public val name: String by lazy {
println("Lazy.......")
"Code4Android"
}
public var value: String by Delegates.observable("init value") {
d, old, new ->
println("$d-->$old->$new")
}
}
fun main(arg: Array<String>) {
show()
var water = Water()
println(water.name)
println(water.name)
water.value = "11111"
water.value = "22222"
water.value = "33333"
println(water.value)
println(water.value)
// IllegalStateException: Property weight should be initialized before get.
water.weight=2
print(water.weight)
}
연산 자:
val String.lastChar: Char
get() = this[this.length - 1]
class A(val p: Int)
//1, :
val c = Student::class
//2,
fun isOdd(x: Int) = x % 2 != 0
val numbers = listOf(1, 2, 3)
println(numbers.filter(::isOdd))
//3, ( main )
println(::x.get())
::x.set(2)
println(x)
//4,::x KProperty<Int> , get()
val prop = A::p
println(prop.get(A(1)))
//5,
println(String::lastChar.get("abc"))
//6, java
println(A::p.javaClass),
var f: Array<Field> = A::p.javaClass.declaredFields
반생 대상동반 대상(copanion object)은 자바 의 정적 키워드 static 와 유사 합 니 다.Kotlin 에 서 는 이 키워드 가 아 닌 동반 대상,구체 적 인 용법 이 있 습 니 다.
open class People constructor(var id: String, var name: String){
// :
var customName = name.toUpperCase() //
// constructor , primary constructor, this
constructor( id: String, name: String, age: Int) : this(id, name) {
println("constructor")
}
init {
println(" , constructor ")
}
//,Kotlin class static , companion object static ,
// platformStatic static , ,
companion object {
val ID = 1
}
}
사용 하면 바로 People.ID.단일 모드
Kotlin 에서 object 수식 류 를 사용 할 때...이 종 류 는 단일 대상 이다.
/**
* object , , , ,
* Place.doSomething() //
*/
object Singleton {
fun doSomething() {
println("doSomething")
}
}
/**
* , , ; 。
*
* object , ,
* companion , ,
* MyClass.doSomething() //
*/
class MyClass {
companion object Singleton {
fun doSomething() {
println("doSomething")
}
}
}
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!원본 다운로드:http://xiazai.jb51.net/201705/yuanma/KotlinForAndroid(jb51.net).rar
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.