Skip to content

Instantly share code, notes, and snippets.

@eutkin
Created October 19, 2021 16:37
Show Gist options
  • Save eutkin/f84b11460dce4a9eb386f43fe93cc1fb to your computer and use it in GitHub Desktop.
Save eutkin/f84b11460dce4a9eb386f43fe93cc1fb to your computer and use it in GitHub Desktop.
Task 2
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