Kotlin Tutorial for Android Developers (1)

1. Kotlin overview

Kotlin is a statically typed programming language that runs on the Java virtual machine . It is mainly a programming language developed by JetBrains development team. Although Kotlin is not compatible with Java syntax , Kotlin is designed to work with Java code and reuse existing Java reference method libraries such as the Java Collection Framework. It is easy to replace or use with Java in Android projects.

Google announced at the Google I/O Conference in 2019 that Kotlin was selected as the preferred language for Android development.

1.1, Kotlin features

  1. Concise and easy to use: Kotlin provides a large number of extensions to make our code more concise and the developed framework easier to use;
  2. Safety: Avoid the entire class of errors such as null pointer exceptions;
  3. Interoperability: make full use of the existing libraries of JVM, Android and browsers;
  4. Tool-friendly: It can be built using any Java IDE or using the command line.

1.2, the meaning of learning Kotlin

  1. Time to learn: Kotlin has become the official language of choice for Android development, and it is time to learn Kotlin;
  2. Follow the trend for the future: Now, all major Internet companies, including the first and second tiers, are turning to Kotlin. Learning Kotlin now is not only to follow the trend, but also for the sake of the future;
  3. Improve development efficiency: Kotlin development is much higher than Java in terms of development efficiency.

Two, Kotlin and Java comparison

1. Print log

Java

System.out.print("hello world");
System.out.println("hello world");

Kotlin

print("hello world")
println("hello world")

2. Define constants and variables

Java

String name = "hello world";
final String name = "hello world";

Kotlin

var name = "hello world"
val name = "hello world"

3. The null statement

Java

String name;
name = null;

Kotlin

var name : String?
name = null

4. Empty judgment

Java

if (text != null) {
    
    
    int length = text.length();
}

Kotlin

text?.let {
    
    
    val length = text.length
}
// 或者
val length = text?.length

5. String splicing

Java

String firstName = "Android";
String lastName = "enginner";
String message = "My name is: " + firstName + " " + lastName;

Kotlin

val firstName = "Android"
val lastName = "enginner"
val message = "My name is: $firstName $lastName"

6. Ternary expression

Java

String text = x > 5 ? "x > 5" : "x <= 5";

Kotlin

val text = if (x > 5)
   "x > 5"
else 
   "x <= 5"

7, multiple conditions

Java

if (score >= 0 && score <= 300) {
    
     }

Kotlin

if (score in 0..300) {
    
     }

8. More flexible case statement

Java

int score = // some score;
String grade;
switch (score) {
    
    
    case 10:
    case 9:
        grade = "Excellent";
        break;
    case 8:
    case 7:
    case 6:
        grade = "Good";
        break;
    case 5:
    case 4:
        grade = "OK";
        break;
    case 3:
    case 2:
    case 1:
        grade = "Fail";
        break;
    default:
        grade = "Fail";
}

Kotlin

var score = // some score
var grade = when (score) {
    
    
    9, 10 -> "Excellent"
    in 6..8 -> "Good"
    4, 5 -> "OK"
    in 1..3 -> "Fail"
    else -> "Fail"
}

9, for loop

Java

for (int i = 1; i <= 10 ; i++) {
    
     }

for (int i = 1; i < 10 ; i++) {
    
     }

for (int i = 10; i >= 0 ; i--) {
    
     }

for (int i = 1; i <= 10 ; i+=2) {
    
     }

for (int i = 10; i >= 0 ; i-=2) {
    
     }

for (String item : collection) {
    
     }

for (Map.Entry<String, String> entry: map.entrySet()) {
    
     }

Kotlin

for (i in 1..10) {
    
     }

for (i in 1 until 10) {
    
     }

for (i in 10 downTo 0) {
    
     }

for (i in 1..10 step 2) {
    
     }

for (i in 10 downTo 0 step 2) {
    
     }

for (item in collection) {
    
     }

for ((key, value) in map) {
    
     }

10. More convenient collection operation

Java

final List<Integer> listOfNumber = Arrays.asList(1, 2, 3, 4);

final Map<Integer, String> keyValue = new HashMap<Integer, String>();
map.put(1, "Android");
map.put(2, "Ali");
map.put(3, "Mindorks");

// Java 9
final List<Integer> listOfNumber = List.of(1, 2, 3, 4);

final Map<Integer, String> keyValue = Map.of(1, "Android",
                                             2, "Ali",
                                             3, "Mindorks");

Kotlin

val listOfNumber = listOf(1, 2, 3, 4)
val keyValue = mapOf(1 to "Android",
                     2 to "Ali",
                     3 to "Mindorks")

11. Traverse

Java

// Java 7 and below
for (Car car : cars) {
    
    
  System.out.println(car.speed);
}

// Java 8+
cars.forEach(car -> System.out.println(car.speed));

// Java 7 and below
for (Car car : cars) {
    
    
  if (car.speed > 100) {
    
    
    System.out.println(car.speed);
  }
}

// Java 8+
cars.stream().filter(car -> car.speed > 100).forEach(car -> System.out.println(car.speed));

Kotlin

cars.forEach {
    
    
    println(it.speed)
}

cars.filter {
    
     it.speed > 100 }
      .forEach {
    
     println(it.speed)}

12. Method definition

Java

void doSomething() {
    
    
   // logic here
}

void doSomething(int... numbers) {
    
    
   // logic here
}

Kotlin

fun doSomething() {
    
    
   // logic here
}

fun doSomething(vararg numbers: Int) {
    
    
   // logic here
}

13, constructor Constructor

Java

public class Utils {
    
    

    private Utils() {
    
    
      // This utility class is not publicly instantiable
    }

    public static int getScore(int value) {
    
    
        return 2 * value;
    }

}

Kotlin

class Utils private constructor() {
    
    

    companion object {
    
    

        fun getScore(value: Int): Int {
    
    
            return 2 * value
        }

    }
}

// 或者
object Utils {
    
    

    fun getScore(value: Int): Int {
    
    
        return 2 * value
    }

}

14. Get Set Constructor

Java

public class Developer {
    
    

    private String name;
    private int age;

    public Developer(String name, int age) {
    
    
        this.name = name;
        this.age = age;
    }

    public String getName() {
    
    
        return name;
    }

    public void setName(String name) {
    
    
        this.name = name;
    }

    public int getAge() {
    
    
        return age;
    }

    public void setAge(int age) {
    
    
        this.age = age;
    }
}

Kotlin

data class Developer(val name: String, val age: Int)

15. Operator

Java

final int andResult  = a & b;
final int orResult   = a | b;
final int xorResult  = a ^ b;
final int rightShift = a >> 2;
final int leftShift  = a << 2;
final int unsignedRightShift = a >>> 2;

Kotlin

val andResult  = a and b
val orResult   = a or b
val xorResult  = a xor b
val rightShift = a shr 2
val leftShift  = a shl 2
val unsignedRightShift = a ushr 2

Third, use Android Studio skillfully

3.1. Add Kotlin support to existing Java-based Android projects

1. Add through AS tools

Open the existing Android project with Android Studio, and then the Tools option on the menu bar --> Kotlin-->configure kotlin in project
Add Kotlin support

2. Manually add

project/build.gradle

buildscript {
    
    
	// add
    + ext.kotlin_version = '1.3.61'
    repositories {
    
    
        google()
        jcenter()

    }
    dependencies {
    
    
        classpath 'com.android.tools.build:gradle:3.5.3'
        // add
        + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

app/build.gradle

apply plugin: 'com.android.application'
// add
+ apply plugin: 'kotlin-android-extensions'
// add
+ apply plugin: 'kotlin-android'
...
dependencies {
    
    
   ...
    // add
    + implementation "androidx.core:core-ktx:+"
    // add
    + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
repositories {
    
    
    mavenCentral()
}

3.2. Convert Java files to Kotlin files

Open a Java file, and then select CodeOptions on the menu bar -->convert java file to kotlin file

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    
    

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

After conversion:

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    
    
    override fun onCreate(savedInstanceState: Bundle?) {
    
    
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

Guess you like

Origin blog.csdn.net/weixin_38478780/article/details/108533670