forked from yole/idiomatic-kotlin
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
40 changed files
with
322 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) { | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) { | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) { | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() } | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
package t09_OmitReturnTypes; | ||
|
||
/** | ||
* @author yole | ||
*/ | ||
public interface IJavaInterface { | ||
String getJavaValue(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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("|") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 = "|") | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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}") | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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") | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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}") | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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") | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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()) } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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() | ||
} |