Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 14 additions & 23 deletions src/main/kotlin/ru/otus/homework/homework/Coffee.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,32 +20,23 @@ class SimpleCoffee : Coffee {
override fun description() = "Простой кофе"
}

class MilkDecorator(private val coffee: Coffee) : Coffee {
override fun cost(): Int {
TODO("Not yet implemented")
}

override fun description(): String {
TODO("Not yet implemented")
}
abstract class CoffeeDecorator(private val coffee: Coffee) : Coffee {
protected val base: Coffee = coffee
override fun cost() = base.cost()
override fun description() = base.description()
}

class SugarDecorator(private val coffee: Coffee) : Coffee {
override fun cost(): Int {
TODO("Not yet implemented")
}

override fun description(): String {
TODO("Not yet implemented")
}
class MilkDecorator(coffee: Coffee) : CoffeeDecorator(coffee) {
override fun cost(): Int = base.cost() + 50
override fun description(): String = base.description() + ", молоко"
}

class VanillaDecorator(private val coffee: Coffee) : Coffee {
override fun cost(): Int {
TODO("Not yet implemented")
}
class SugarDecorator(coffee: Coffee) : CoffeeDecorator(coffee) {
override fun cost(): Int = base.cost() + 20
override fun description(): String = base.description() + ", сахар"
}

override fun description(): String {
TODO("Not yet implemented")
}
class VanillaDecorator(coffee: Coffee) : CoffeeDecorator(coffee) {
override fun cost(): Int = base.cost() + 70
override fun description(): String = base.description() + ", ваниль"
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@ import kotlin.reflect.KProperty
/**
* Delegate that allows to set non-empty string value
*/
class NonEmptyStringDelegate() {
operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
TODO("Implement `getValue` function")
}
class NonEmptyStringDelegate(initialValue: String ="") {
private var value = initialValue

operator fun getValue(thisRef: Any?, property: KProperty<*>): String = value

operator fun setValue(thisRef: Any?, property: KProperty<*>, newValue: String) {
TODO("Implement `setValue` function")
if (newValue.isBlank()) {
return
}
value = newValue
}
}
32 changes: 30 additions & 2 deletions src/main/kotlin/ru/otus/homework/homework/UserProfile.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

package ru.otus.homework.homework

import kotlin.properties.Delegates

/**
* Профиль пользователя
*/
Expand Down Expand Up @@ -37,8 +39,27 @@ interface UserProfile {
* Creates user profile with logging
*/
fun createWithLogging(fullName: String, email: String): UserProfile.Logging {
TODO("Implement `createWithLogging` function")
val profile = ProfileImplementation(fullName, email)

return object : UserProfile.Logging {
private val log = mutableListOf<String>()
override var fullName: String
get() = profile.fullName
set (value) {
log.add("Changing `fullName` from '${profile.fullName}' to '$value'")
profile.fullName = value
}
override var email: String
get() = profile.email
set(value) {
log.add ("Changing `email` from '${profile.email}' to '$value'")
profile.email = value
}

override fun getLog(): List<String> = log.toList()
}
}

}
}

Expand All @@ -50,4 +71,11 @@ private val emailRegex = Regex("^[A-Za-z](.*)([@])(.+)(\\.)(.+)")
/**
* Реализация простого [UserProfile].
*/
private class ProfileImplementation(override var fullName: String, override var email: String): UserProfile
private class ProfileImplementation(fullName: String, email: String) : UserProfile {
override var fullName: String by Delegates.vetoable(fullName) { _, _, new ->
new.isNotBlank()
}
override var email: String by Delegates.vetoable(email) { _, _, new ->
emailRegex.matches(new)
}
}
14 changes: 7 additions & 7 deletions src/main/kotlin/ru/otus/homework/homework/processList.kt
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package ru.otus.homework.homework

inline fun processList(list: List<Int>, action: (Int) -> Unit) {
for (item in list) {
action(item)
inline fun processList(list: List<Int>, action: (Int,Int) -> Unit) {
for ((index, item) in list.withIndex()) {
action(index, item)
}
}

fun skipThreeAndPrint(list: List<Int>) {
processList(list) {
if (it == 3) return
println("Processing $it")
processList(list) { index, value ->
if (index == 2) return@processList
println("Processing $value")
}
}
}