Реализация функции - Kotlin - PullRequest
0 голосов
/ 14 июля 2020

Прежде всего, я новичок в мире программирования. В настоящее время я прохожу несколько онлайн-курсов, чтобы помочь мне изучить программирование в Kotlin. На одном из курсов я как бы наткнулся на преграду. Я не могу продолжить, пока не решу проблему. Я знаю, что проблема, предположительно, не так уж и сложна, но мне трудно понять, в чем проблема на самом деле . Я вот уже 2 дня ломаю голову над проблемой, искал по inte rnet безрезультатно. (Возможно, это потому, что я действительно не понимаю, что искать)

Наконец я решил, что попробую задать вопрос здесь. (Я использую этот веб-сайт как один из моих go сайтов, чтобы помочь мне решить проблему программирования, которую я получил на курсе)

Итак, вот проблема:

Вот этот класс:

class Site(val address: String, val foundationYear: Int)

Реализуйте функцию makeReddit(), которая возвращает Site с адресом reddit.com и годом основания 2005 .

Вот моя попытка решить проблему:

class Site(val address: String, val foundationYear: Int) {
    fun makeReddit(address: String, foundationYear: Int): Site {
        return reddit
    }
    private val reddit = makeReddit("reddit.com", 2005)
}

Спасибо.

1 Ответ

2 голосов
/ 14 июля 2020

Вот почему ваш код не имеет смысла. У вас есть класс с именем Site, который предположительно можно использовать для описания любого веб-сайта. Таким образом, у него не должно быть свойства для указанного c сайта с именем reddit, потому что тогда каждый отдельный экземпляр класса несет свойство reddit.

Ваша функция makeReddit не должна иметь параметров для адреса и года, потому что это для создания указанного c сайта "reddit.com" с указанием c 2005 года.

Кроме того, ваша функция возвращает значение свойства, но свойство инициализируется вызовом этой функции, так что это циклическая зависимость. И функция, и свойство просто вернут null. Вы никогда не вызываете конструктор сайта нигде, поэтому экземпляр сайта никогда не создается.

И поскольку функция не делает ничего внутреннего по отношению к какому-либо конкретному c Site, а вместо этого создает новый экземпляр сайта, он не должен быть определен внутри класса Site.

Чтобы сделать шаг назад и определить проблему, вам нужна функция, которая создает сайт с определенными c значениями адреса и года (не входными параметрами). Поскольку он создает Site, он не должен быть функцией-членом Site, поэтому он должен быть определен на верхнем уровне (он также может быть в сопутствующем объекте, но пока не беспокойтесь об этом).

Итак, это должно выглядеть так:

class Site(val address: String, val foundationYear: Int)

fun makeReddit(): Site {
    return Site("reddit.com", 2005)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...