Skip to content

Commit

Permalink
More examples
Browse files Browse the repository at this point in the history
  • Loading branch information
yole committed Jul 4, 2017
1 parent 90b3b82 commit 0d59d2b
Show file tree
Hide file tree
Showing 40 changed files with 322 additions and 1 deletion.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ repositories {

dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'junit', name: 'junit', version: '4.12'
}

compileKotlin {
Expand Down
4 changes: 4 additions & 0 deletions src/main/kotlin/t01_SmallClasses/bad/Address.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package t01_SmallClasses.bad

class Address(val city: String, val street: String, val zipCode: String) {
}
4 changes: 4 additions & 0 deletions src/main/kotlin/t01_SmallClasses/bad/Company.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package t01_SmallClasses.bad

class Company(val personnel: List<Person>, val address: Address) {
}
4 changes: 4 additions & 0 deletions src/main/kotlin/t01_SmallClasses/bad/Person.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package t01_SmallClasses.bad

class Person(val name: String, val address: Address) {
}
7 changes: 7 additions & 0 deletions src/main/kotlin/t01_SmallClasses/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package t01_SmallClasses

class Address(val city: String, val street: String, val zipCode: String)

class Person(val name: String, val address: Address)

class Company(val personnel: List<Person>, val address: Address)
19 changes: 19 additions & 0 deletions src/main/kotlin/t03_Lateinit/bad.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package t03_Lateinit.bad

import org.junit.Assert
import org.junit.Before
import org.junit.Test

class MyTest {
class State(val data: String)

private var state: State? = null

@Before fun setup() {
state = State("abc")
}

@Test fun foo() {
Assert.assertEquals("abc", state!!.data)
}
}
19 changes: 19 additions & 0 deletions src/main/kotlin/t03_Lateinit/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package t03_Lateinit.good

import org.junit.Assert
import org.junit.Before
import org.junit.Test

class MyTest {
class State(val data: String)

private lateinit var state: State

@Before fun setup() {
state = State("abc")
}

@Test fun foo() {
Assert.assertEquals("abc", state.data)
}
}
11 changes: 11 additions & 0 deletions src/main/kotlin/t04_Typealias/bad.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package t04_Typealias.bad

class Event

class HandlerList {
fun addOnClickHandler(handler: (Event) -> Unit) {
}

fun removeOnClickHandler(handler: (Event) -> Unit) {
}
}
11 changes: 11 additions & 0 deletions src/main/kotlin/t04_Typealias/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package t04_Typealias.good

class Event

class HandlerList {
fun addOnClickHandler(handler: (Event) -> Unit) {
}

fun removeOnClickHandler(handler: (Event) -> Unit) {
}
}
7 changes: 7 additions & 0 deletions src/main/kotlin/t05_ToplevelFunctions/bad.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package t05_ToplevelFunctions.bad

class StringUtils {
companion object {
fun isPhoneNumber(s: String) = s.length == 7 && s.all { it.isDigit() }
}
}
3 changes: 3 additions & 0 deletions src/main/kotlin/t05_ToplevelFunctions/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package t05_ToplevelFunctions.bad

fun isPhoneNumber(s: String) = s.length == 7 && s.all { it.isDigit() }
3 changes: 3 additions & 0 deletions src/main/kotlin/t06_ExtensionFunctions/bad.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package t06_ExtensionFunctions.bad

fun isPhoneNumber(s: String) = s.length == 7 && s.all { it.isDigit() }
3 changes: 3 additions & 0 deletions src/main/kotlin/t06_ExtensionFunctions/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package t06_ExtensionFunctions.good

fun String.isPhoneNumber() = length == 7 && all { it.isDigit() }
7 changes: 7 additions & 0 deletions src/main/kotlin/t07_MemberExtensionFunctions/bad.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package t07_MemberExtensionFunctions.bad

class PhoneBook {
fun String.isPhoneNumber() = length == 7 && all { it.isDigit() }

fun PhoneBook.findPhone(name: String) = "1234567"
}
7 changes: 7 additions & 0 deletions src/main/kotlin/t07_MemberExtensionFunctions/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package t07_MemberExtensionFunctions.good

class PhoneBook {
fun findPhone(name: String) = "1234567"
}

private fun String.isPhoneNumber() = length == 7 && all { it.isDigit() }
6 changes: 6 additions & 0 deletions src/main/kotlin/t08_ExtensionFunctionsAPI/bad.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package t07_MemberExtensionFunctions.bad

class Person(val firstName: String, val lastName: String) {
val fullName: String
get() = "$firstName $lastName"
}
7 changes: 7 additions & 0 deletions src/main/kotlin/t08_ExtensionFunctionsAPI/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package t07_MemberExtensionFunctions.good

class Person(val firstName: String, val lastName: String) {
}

val Person.fullName: String
get() = "$firstName $lastName"
8 changes: 8 additions & 0 deletions src/main/kotlin/t09_OmitReturnTypes/IJavaInterface.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package t09_OmitReturnTypes;

/**
* @author yole
*/
public interface IJavaInterface {
String getJavaValue();
}
9 changes: 9 additions & 0 deletions src/main/kotlin/t09_OmitReturnTypes/bad.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package t09_OmitReturnTypes.bad

import t09_OmitReturnTypes.IJavaInterface

class KtImpl : IJavaInterface {
fun getName(): String = "Foo"

override fun getJavaValue() = System.getProperty("java.value")
}
9 changes: 9 additions & 0 deletions src/main/kotlin/t09_OmitReturnTypes/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package t09_OmitReturnTypes.good

import t09_OmitReturnTypes.IJavaInterface

class KtImpl : IJavaInterface {
fun getName() = "Foo"

override fun getJavaValue(): String? = System.getProperty("java.value")
}
14 changes: 14 additions & 0 deletions src/main/kotlin/t10_Overloads/bad.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package t10_Overloads.bad

class Phonebook {
fun print() {
print(",")
}

fun print(columnSeparator: String) {
}
}

fun main(args: Array<String>) {
Phonebook().print("|")
}
13 changes: 13 additions & 0 deletions src/main/kotlin/t10_Overloads/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package t10_Overloads.good

import t10_Overloads.bad.Phonebook

class Phonebook {
fun print(columnSeparator: String = ",") {
}
}

fun main(args: Array<String>) {
Phonebook().print(columnSeparator = "|")
}

9 changes: 9 additions & 0 deletions src/main/kotlin/t11_ReturnMultipleValues/bad.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package t11_ReturnMultipleValues.bad

fun returnMultipleValues(): Pair<Int, String> = 1 to "one"

fun main(args: Array<String>) {
val pair = returnMultipleValues()
val number = pair.first
val name = pair.second
}
9 changes: 9 additions & 0 deletions src/main/kotlin/t11_ReturnMultipleValues/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package t11_ReturnMultipleValues.good

data class NamedNumber(val number: Int, val name: String)

fun returnMultipleValues() = NamedNumber(1, "one")

fun main(args: Array<String>) {
val (number, name) = returnMultipleValues()
}
11 changes: 11 additions & 0 deletions src/main/kotlin/t12_DestructuringList/bad.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package t12_DestructuringList.bad

data class NameComponents(val name: String, val ext: String?)

fun splitNameAndExtension(filename: String): NameComponents {
if ('.' in filename) {
val parts = filename.split('.', limit = 2)
return NameComponents(parts[0], parts[1])
}
return NameComponents(filename, null)
}
11 changes: 11 additions & 0 deletions src/main/kotlin/t12_DestructuringList/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package t12_DestructuringList.good

data class NameComponents(val name: String, val ext: String?)

fun splitNameAndExtension(filename: String): NameComponents {
if ('.' in filename) {
val (name, ext) = filename.split('.', limit = 2)
return NameComponents(name, ext)
}
return NameComponents(filename, null)
}
9 changes: 9 additions & 0 deletions src/main/kotlin/t13_WhenAsExpressionBody/bad.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package t13_WhenAsExpressionBody.bad

fun parseEnglishNumber(number: String): Int? {
when (number) {
"one" -> return 1
"two" -> return 2
else -> return null
}
}
7 changes: 7 additions & 0 deletions src/main/kotlin/t13_WhenAsExpressionBody/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package t13_WhenAsExpressionBody.good

fun parseEnglishNumber(number: String) = when (number) {
"one" -> 1
"two" -> 2
else -> null
}
10 changes: 10 additions & 0 deletions src/main/kotlin/t14_TryAsExpressionBody/bad.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package t14_TryAsExpressionBody.bad

fun tryParseInt(number: String): Int? {
try {
return Integer.parseInt(number)
}
catch (e: NumberFormatException) {
return null
}
}
9 changes: 9 additions & 0 deletions src/main/kotlin/t14_TryAsExpressionBody/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package t14_TryAsExpressionBody.good

fun tryParseInt(number: String) =
try {
Integer.parseInt(number)
}
catch (e: NumberFormatException) {
null
}
12 changes: 12 additions & 0 deletions src/main/kotlin/t15_ReturnInElvis/bad.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package t15_ReturnInElvis.bad

class Person(val name: String?, val age: Int?)

fun processPerson(person: Person) {
if (person.name == null)
throw IllegalArgumentException("Person must have a name")
if (person.age == null) return

println("${person.name}: ${person.age}")
}

11 changes: 11 additions & 0 deletions src/main/kotlin/t15_ReturnInElvis/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package t15_ReturnInElvis.good

class Person(val name: String?, val age: Int?)

fun processPerson(person: Person) {
val name = person.name ?:
throw IllegalArgumentException("Person must have a name")
val age = person.age ?: return

println("$name: $age")
}
3 changes: 3 additions & 0 deletions src/main/kotlin/t16_Range/bad.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package t16_Range.bad

fun isLatinUppercase(c: Char) = c >= 'A' && c <= 'Z'
3 changes: 3 additions & 0 deletions src/main/kotlin/t16_Range/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package t16_Range.good

fun isLatinUppercase(c: Char) = c in 'A'..'Z'
9 changes: 9 additions & 0 deletions src/main/kotlin/t17_CoerceIn/bad.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package t17_CoerceIn.bad

fun updateProgress(value: Int) {
val actualValue = when {
value < 0 -> 0
value > 100 -> 100
else -> value
}
}
5 changes: 5 additions & 0 deletions src/main/kotlin/t17_CoerceIn/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package t17_CoerceIn.good

fun updateProgress(value: Int) {
val actualValue = value.coerceIn(0, 100)
}
7 changes: 7 additions & 0 deletions src/main/kotlin/t18_DestructuringInLoops/bad.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package t18_DestructuringInLoops.bad

fun printMap(map: Map<String, String>) {
for (item in map.entries) {
println("${item.key} -> ${item.value}")
}
}
7 changes: 7 additions & 0 deletions src/main/kotlin/t18_DestructuringInLoops/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package t18_DestructuringInLoops.good

fun printMap(map: Map<String, String>) {
for ((key, value) in map) {
println("$key -> $value")
}
}
8 changes: 8 additions & 0 deletions src/main/kotlin/t19_Optional/bad.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package t19_Optional.bad

import java.util.*

fun processOptional(x: Optional<String>) {
val s = x.orElse("Unknown")
val firstChar = x.flatMap { Optional.ofNullable(it.firstOrNull()) }
}
6 changes: 6 additions & 0 deletions src/main/kotlin/t19_Optional/good.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package t19_Optional.good

fun processOptional(x: String?) {
val s = x ?: "Unknown"
val firstChar = x?.firstOrNull()
}

0 comments on commit 0d59d2b

Please sign in to comment.