Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Homework #3 #1

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open

Homework #3 #1

wants to merge 3 commits into from

Conversation

maerman13
Copy link
Owner

No description provided.

* Реализовать метод printIfAny, который будет печатать значение, если оно есть
*/

def printIfAny: Unit = this match {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

второй кейс лучше указать, иначе получите match error в рантайме, что в случае с Option не очень ожидаемо

* Реализовать метод zip, который будет создавать Option от пары значений из 2-х Option
*/

def zip[A1 >: T, B](option2: Option[B]): Option[(T, B)] = {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

здесь тоже, если один из Option пустой, мы получим ошибку в рантайме. Фишка Option в том, что он дает нам безопасный API с точки зрения падений в рантайме, за исключением одного небезопасного метода - это get, его использовать не рекомендуется, за исключением случаев, когда мы предварительно убедились, что он не пуст. Подумайте, как реализовать безопасно.

*/

def filter(p: T => Boolean): Option[T] = {
if (!this.isEmpty) this

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

здесь у вас не используется предикат p который вы приняли в качестве аргумента. Здесь для реализации хорошо подойдёт pattern matching

* Nil - пустой список
* Cons - непустой, содердит первый элемент (голову) и хвост (оставшийся список)
*/
def get(): T = {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

на списках такой метод обычно называют head, и здесь тоже лучше отрабатывать явно кейс пустого списка, бросая конкретный Exception, например - new Exception("head on empty list"), в противном случае будет просто match error


trait List[+T]{
def getNext[TT >: T](): List[T] = {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

такое на списках обычно называют tail. null возвращать не стоит, в scala мы в целом стараемся избегать подобных историй. Этот метод можно делать безопасным. Что мы можем вернуть в качестве хвоста если список пустой?


def ::[TT >: T](elem: TT): List[TT] = ???
def getPrevious[TT >: T](): List[T] = {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

не очень понял, чем этот метод отличается от предыдущего?


case class A(var a: String)
def mkString(delimeter: String): String = {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Решение рабочее. Однако для реализации этого и методов ниже, я бы рекомендовал воспользоваться рекурсией. Так же здесь неплохо будет смотреться pattern matching


def reverse[TT >: T](): List[T] = {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

см. коммент к mkString

* Метод mkString возвращает строковое представление списка, с учетом переданного разделителя
*
*/
def map[TT >: T](func: T => TT): List[T] = {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

см. коммент к mkString

*
* Реализовать метод reverse который позволит заменить порядок элементов в списке на противоположный
*/
def filter[TT >: T](p: T => Boolean): List[T] = {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

см. коммент к mkString

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants