From 2d128104d4c6463d7e1481e3faec441ac4474912 Mon Sep 17 00:00:00 2001 From: rdevarakonda Date: Mon, 5 Oct 2020 18:45:51 +0100 Subject: [PATCH] KTLN-153 | Examples for article + Upgrade Kotlin version to 1.4.0 (#10108) * KTLN-153 | Examples for article + Upgrade Kotlin version to 1.4.0 * KTLN-153 | UNDO Upgrade to Kotlin 1.4.0 * KTLN-153 | Update examples to match the article edits * KTLN-153 | Update examples to match the article edits - 2 Co-authored-by: tpurdeva --- .../baeldung/arguments/DefaultArguments.kt | 37 +++++++++++++++++++ .../com/baeldung/arguments/NamedArguments.kt | 28 ++++++++++++++ 2 files changed, 65 insertions(+) create mode 100644 core-kotlin-modules/core-kotlin/src/main/kotlin/com/baeldung/arguments/DefaultArguments.kt create mode 100644 core-kotlin-modules/core-kotlin/src/main/kotlin/com/baeldung/arguments/NamedArguments.kt diff --git a/core-kotlin-modules/core-kotlin/src/main/kotlin/com/baeldung/arguments/DefaultArguments.kt b/core-kotlin-modules/core-kotlin/src/main/kotlin/com/baeldung/arguments/DefaultArguments.kt new file mode 100644 index 0000000000..691b3475b4 --- /dev/null +++ b/core-kotlin-modules/core-kotlin/src/main/kotlin/com/baeldung/arguments/DefaultArguments.kt @@ -0,0 +1,37 @@ +package com.baeldung.arguments + +fun main() { + + // Skip both the connectTimeout and enableRetry arguments + connect("http://www.baeldung.com") + + // Skip only the enableRetry argument: + connect("http://www.baeldung.com", 5000) + + // Skip only the middle argument connectTimeout + // connect("http://www.baeldung.com", false) // This results in a compiler error + + // Because we skipped the connectTimeout argument, we must pass the enableRetry as a named argument + connect("http://www.baeldung.com", enableRetry = false) + + // Overriding Functions and Default Arguments + val realConnector = RealConnector() + realConnector.connect("www.baeldung.com") + realConnector.connect() +} + +fun connect(url: String, connectTimeout: Int = 1000, enableRetry: Boolean = true) { + println("The parameters are url = $url, connectTimeout = $connectTimeout, enableRetry = $enableRetry") +} + +open class AbstractConnector { + open fun connect(url: String = "localhost") { + // function implementation + } +} + +class RealConnector : AbstractConnector() { + override fun connect(url: String) { + println("The parameter is url = $url") + } +} \ No newline at end of file diff --git a/core-kotlin-modules/core-kotlin/src/main/kotlin/com/baeldung/arguments/NamedArguments.kt b/core-kotlin-modules/core-kotlin/src/main/kotlin/com/baeldung/arguments/NamedArguments.kt new file mode 100644 index 0000000000..0cbf6f158a --- /dev/null +++ b/core-kotlin-modules/core-kotlin/src/main/kotlin/com/baeldung/arguments/NamedArguments.kt @@ -0,0 +1,28 @@ +package com.baeldung.arguments + +fun main() { + resizePane(newSize = 10, forceResize = true, noAnimation = false) + + // Swap the order of last two named arguments + resizePane(newSize = 11, noAnimation = false, forceResize = true) + + // Named arguments can be passed in any order + resizePane(forceResize = true, newSize = 12, noAnimation = false) + + // Mixing Named and Positional Arguments + // Kotlin 1.3 would allow us to name only the arguments after the positional ones + resizePane(20, true, noAnimation = false) + + // Using a positional argument in the middle of named arguments (supported from Kotlin 1.4.0) + // resizePane(newSize = 20, true, noAnimation = false) + + // Only the last argument as a positional argument (supported from Kotlin 1.4.0) + // resizePane(newSize = 30, forceResize = true, false) + + // Use a named argument in the middle of positional arguments (supported from Kotlin 1.4.0) + // resizePane(40, forceResize = true, false) +} + +fun resizePane(newSize: Int, forceResize: Boolean, noAnimation: Boolean) { + println("The parameters are newSize = $newSize, forceResize = $forceResize, noAnimation = $noAnimation") +} \ No newline at end of file