Created
October 19, 2021 16:37
-
-
Save eutkin/f84b11460dce4a9eb386f43fe93cc1fb to your computer and use it in GitHub Desktop.
Task 2
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
fun main() { | |
// val --> неизменяемая ссылка на объект (в нашем случае объект типа Function | |
// transformer --> имя переменной aka имя ссылки на объект | |
// : --> разделяет имя переменной и ее тип | |
// (Int) -> String --> тип переменной, функция, принимающая (в скобочках) целое число (тип Int) и возвращающая (после стрелочки) строковый тип (String) | |
// = --> оператор присвоения значения переменной | |
// { .. } --> содержат функцию целиком | |
// element : Int --> аргумент функции с именем element и типом Int | |
// -> --> разделяет аргументы функции с телом функции | |
// "a$element" --> тело функции, в данном случае преобразование element в строку | |
val transformer: (Int) -> String = { element: Int -> "a$element" } | |
println(transformer(1)) | |
run { | |
val container: Container<Double> = Container(listOf(1.0, 2.0, 3.0)) | |
fun transformInto(container: Container<Double>): Container<String> { | |
return container | |
// 1.0, 2.0, 3.0 | |
.map { element -> element.toInt() } | |
// 1, 2, 3 | |
.map { element -> element * 15 } | |
// 15, 30, 45 | |
.map { element -> "number$element" } | |
} | |
// Должно вывести на экран следующее: | |
// [number15, number30, number45] | |
transformInto(container).println() | |
} | |
run { | |
val container = Container(listOf("hello", "hi", "wow")) | |
fun transformInto(container: Container<String>): Container<Double> { | |
} | |
// Должно вывести на экран следующее: | |
// [25.0, 4.0, 9.0] | |
transformInto(container).println() | |
} | |
run { | |
val container: Container<String> = Container(listOf("10", "2", "6")) | |
fun transformInto(container: Container<String>): Container<Int> { | |
} | |
// Должно вывести на экран следующее: | |
// [wow0, wow-8, wow-4] | |
transformInto(container).println() | |
} | |
run { | |
val container: Container<Double> = Container(listOf(1.0, 2.0, 3.0)) | |
fun transformInto(container: Container<Double>): Container<Int> { | |
} | |
// Должно вывести на экран следующее: | |
// [21, 28, 47] | |
transformInto(container).println() | |
} | |
// далее придумать свои задачки подобного толка и написать около 50 раз каждую. | |
// прошлую домашнюю работу написать еще 30 раз, но в случае оператора равен использовать опциональный тип (с ?) | |
} | |
/** | |
* Контейнер для хранения списка значений. | |
* | |
* @param T обобщенный параметр, хранящегося значения. Точную форму принимает после создания объекта из этого класса | |
* @param list список значений для хранения с типом T | |
*/ | |
class Container<T>(private var list: List<T>) { | |
/** | |
* Функция высшего порядка. Отличается от обычной функции тем, | |
* что принимает как аргумент другую функцию. | |
* | |
* В данном случае, используется для изменения каждого элемента в контейнере, | |
* не давая доступ к приватному полю list. | |
* @param U обобщенный тип (как и T), в который будет преобразован с помощью transformer каждый элемент внутри контейнера | |
* @param transformer функция, преобразующая каждое значение типа T в тип U | |
* @return новый контейнер, который хранит преобразованные значения | |
*/ | |
fun <U> map(transformer: (T) -> U): Container<U> { | |
val buffer = mutableListOf<U>() | |
for (element in this.list) { | |
buffer += transformer(element) | |
} | |
return Container(buffer) | |
} | |
/** | |
* Печатает экран содержимое контейнера. | |
*/ | |
fun println() { | |
println(this.list) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment