penguin
#swift #ios #programowanie

func sumOfPositives (_ numbers: [Int] ) -> Int {
let positiveNum = numbers.flatMap{$0 > 0 ? $0 : 0}
var sum = 0
positiveNum.flatMap{sum += $0}
return sum
}

Wykonując ten kod dostaje dobre wyniki + error:

solution.swift:4:13: warning: result of call to 'flatMap' is unused
positiveNum.flatMap{sum += $0}

I teraz proszę powiedzcie mi jak mam traktować takie coś - czy to duży błąd?
  • Najlepsze
  • Wszystkie komentarze
Pan_Qcek
_ = positiveNum.flatMap{sum += $0} i error zniknie. ale nie powinienes uzywać tutaj flatMapy.

https://www.hackingwithswift.com/example-code/language/how-to-sum-an-array-of-numbers-using-reduce
j.....l
j.....l
@penguin: let x = [1,-1,2,-2,3,-3]
let result = x.reduce(0) { $0 + max($1, 0) }
wujo17
wujo17
@penguin: tutaj powinno byc uzyte reduce, flatMap nie do tego
wujo17
wujo17
@penguin: a zamiast tego:
let positiveNum = numbers.flatMap{$0 > 0 ? $0 : 0}

lepsze bedzie
let positiveNum = numbers.filter{$0 > 0 }
Pan_Qcek
@penguin: no lepiej zeby ich nie było, samochód tez bedzie jeździł z zapalonym CHECK ENGINE. Jak Ci kompilator sypie warning to uzywasz czegoś nie tak jak trzeba.
j.....l
j.....l
@penguin: flatMap używa się w określonym celu, i ponieważ twórcy języka nie dodali atrybutu @discardableResult to Ty używasz go źle. Pytania o sztywnego trzymania się braku błędów nie rozumiem - myślałem, że to jest fundament programowania, żeby nie było błędów.
wujo17
wujo17
@penguin: jest to błąd, może nie jakiś bardzo duży, bo ostatecznie rezultat jest taki jak powinien być ale można to zrobić lepiej. Jakbym robił review takiego kodu to na pewno bym tego nie przepuścił.
penguin
penguin Autor
0
@Pan_Qcek: @wujo17: Wiem, że można to załatwić filter i reduce, ale pytanie raczej dotyczy błędów Swifta - czy sztywno trzymacie się tego by ich nie było?
j.....l
j.....l
@penguin: chociaż faktycznie czytelniejsza byłaby opcja z filter

let x = [1,-1,2,-2,3,-3]
let pos = x.filter { $0 > 0 }
let result = pos.reduce(0, +)
penguin
penguin Autor
0
@jabl: Czy macie listę takich "funkcji" do zrobienia na danym obiekcie? Wydaje mi się, że sama dokumentacja swifta nie jest do końca najczytelniejsza. Chciałbym czegoś bardziej w stylku MDN lub nawet W3schools.
wujo17
wujo17
@penguin: nie ma tego az tak duzo, to sa funkcje wyzszego rzedu z Array, z pamieci: filter, map, flatMap, compactMap, reduce, sort. Jest mnostwo tutoriali jak z nich korzytac, na pewno znajdziesz taki, ktory Ci dobrze to rozjasni.
DomowyPaker
DomowyPaker
@penguin Tutaj raczej chodzi o fakt niewykorzystania flatMapa. Zwykły map by starczył