Что выведет код Junior Дженерики обновлено

Что выведет Go: обобщённые Map и Filter

Вопрос

Что выведет программа? Go 1.23, в go.mod указано go 1.23. Каждую строку вывода пишите с новой строки.

package main

import "fmt"

func Map[T, U any](s []T, f func(T) U) []U {
    r := make([]U, 0, len(s))
    for _, v := range s {
        r = append(r, f(v))
    }
    return r
}

func Filter[T any](s []T, keep func(T) bool) []T {
    var r []T
    for _, v := range s {
        if keep(v) {
            r = append(r, v)
        }
    }
    return r
}

func main() {
    words := []string{"go", "rust", "c", "java"}
    long := Filter(words, func(s string) bool { return len(s) > 2 })
    fmt.Println(long, Map(long, func(s string) int { return len(s) }))
    fmt.Println(Filter([]int{1, 2}, func(int) bool { return false }) == nil)
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: [rust java] [4 4], true. Типы T и U выводятся из аргументов.

Что выведет

[rust java] [4 4]
true

Разбор

Типы T и U выводятся из аргументов. Filter оставляет слова длиннее двух символов, Map превращает их в длины. Если ничего не прошло, r так и остаётся nil-слайсом, поэтому сравнение с nil истинно.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.