Перейти к содержанию

🗒 Задача

Реализуй extension функцию для класса String, которая будет возвращать количество гласных букв в строке. Назови функцию vowelCount. Например, для строки "hello" функция должна вернуть 2.

❌ Ошибки

✏️ Комментарии

Попробуй более короткий вариант с помощью `return this.count { it in vowels }`

this — это ключевое слово, которое ссылается на текущий объект, в контексте которого выполняется код. Через него можно обращаться к свойствам и методам этого объекта.

this в контексте экстеншн метода ссылается на строку (текущий объект String), для которого вызван метод vowelCount.

`this.count { it in vowels }` означает, что мы вызываем метод count у текущей строки (this), то есть у строки, для которой был вызван метод vowelCount.
Класс String обычно не создают просто так, применяй экстеншн прямо к строке) Строка и есть экземпляр класса, для которого нужно сделать расширение.
Попробуй провалиться в джавадок и посмотреть что и как принимает (и возвращает) extension метод `count` в классе _Strings. Можно написать более короткую форму, сразу возвращая результат без цикла, передавая лямбду со списком гласных букв.
Функция должна вернуть число, а не распечатать его. Логика внутри не должна пересекаться с интерфейсом пользователя.
Обрати внимание, сейчас ты возвращаешь просто количество символов. Но еще этот метод может принимать лямбду. Это значит, что передавая лямбду `count {}` внутри нее можно добавить проверку на наличие символа в списке гласных букв (что соответствует ТЗ).

https://user-images.githubusercontent.com/34489023/282231400-e59d0f7b-badc-431e-b873-b06d232f5130.png // можно нажать ПКМ, скопировать изображение и вставить в комментарий через ctrl + V

🧾 Решение

fun String.vowelCount(): Int {
    val vowels = listOf('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U')
    return this.count { it in vowels }
}

fun main() {
    val word = "hello"
    println(word.vowelCount())
}
fun String.vowelCount(): Int {
    return count { it in "aeiou" }
}

fun main() {

    val string = "hello"
    println(string.vowelCount())

}