Juanito Написано Август 15, 2014 Аутор Пријави Подели Написано Август 15, 2014 То ради исто што и ово. let result = reduce(1...100, 0) { (result: Int, currentElement: Int) -> Int in if (currentElement * currentElement) % 4 == 0 { return result + currentElement } else { return result } } Кад мало боље размислим, еквивалент овог изнад је заправо: let result = reduce(1...100, 0) { ($1 * $1) % 4 == 0 ? $0 + $1 : $0 } Едитовао сам већ и пре него што одговориш, јер је сигурно боље од претходне варијанте са нулом. Онда не враћамо нулу, него или досадашњи резултат, или досадашњи резултат + тренутни број, ако број задовољи услов. Да ли је то довољно добро или мислиш да ипак треба одрадити у два корака: let filtered = filter(1...100) { ($0 * $0) % 4 == 0 } let sum = reduce(filtered, 0) { $0 + $1 } Али онда два пута пролазимо кроз низ (тј. кроз једном кроз оригинални низ и једном кроз краћи, филтрирани), што може бити незгодно ако имамо (1...1000000) или тако нешто. Link to comment Подели на овим сајтовима More sharing options...
Grizzly Adams Написано Август 15, 2014 Пријави Подели Написано Август 15, 2014 Што рече Knuth: "Premature optimization is the root of all evil"... let result = reduce(1...100, 0) { ($1 * $1) % 4 == 0 ? $0 + $1 : $0 } Мислим да је ово најбоље. Фора је у томе што овде имаш "мустру" тј. патерн који се понавља у пуно комплекснијим ситуацијама када пролазиш кроз низ објеката и над сваким обављаш операцију да би добио агрегатни резултат. И онда "подметање нул објекта" може да има непредвиђене сајд-ефекте, посебно када после модификујеш класе, а такви багови се по правилу тешко проналазе. Оћу да кажем да није само "чистунство" него стварно има оправдање. Juanito је реаговао/ла на ово 1 ΜΟΛΩΝ ΛΑΒΕ Link to comment Подели на овим сајтовима More sharing options...
Juanito Написано Август 15, 2014 Аутор Пријави Подели Написано Август 15, 2014 Што рече Knuth: "Premature optimization is the root of all evil"... let result = reduce(1...100, 0) { ($1 * $1) % 4 == 0 ? $0 + $1 : $0 } Мислим да је ово најбоље. Фора је у томе што овде имаш "мустру" тј. патерн који се понавља у пуно комплекснијим ситуацијама када пролазиш кроз низ објеката и над сваким обављаш операцију да би добио агрегатни резултат. И онда "подметање нул објекта" може да има непредвиђене сајд-ефекте, посебно када после модификујеш класе, а такви багови се по правилу тешко проналазе. Оћу да кажем да није само "чистунство" него стварно има оправдање. Па да, оно са нулом сам био баш одвалио. Да сам написао нулу у пуној if/else конструкцији, одмах бих видео каква је глупост у питању. Link to comment Подели на овим сајтовима More sharing options...
Grizzly Adams Написано Август 15, 2014 Пријави Подели Написано Август 15, 2014 У овом примеру није велика одвала, али за неки сложенији може да буде. Мада стварно кад се напише као цео if/else изгледа необично... Овако је елегантније. ΜΟΛΩΝ ΛΑΒΕ Link to comment Подели на овим сајтовима More sharing options...
nickelpower Написано Август 15, 2014 Пријави Подели Написано Август 15, 2014 Zna li neko od vas da li ce izaci neki novi MacBook Pro ove godine, sa obzirom sto su ga apdejtirali pre neki dan? Ali dizajn i specifikacije nisu se puno promenili... Link to comment Подели на овим сајтовима More sharing options...
feeble Написано Август 15, 2014 Пријави Подели Написано Август 15, 2014 I koliko to kosta, ako ima da se kupi u Srbiji? Слово Љубве Link to comment Подели на овим сајтовима More sharing options...
Crveni Baron Написано Август 16, 2014 Пријави Подели Написано Август 16, 2014 Zna li neko od vas da li ce izaci neki novi MacBook Pro ove godine, sa obzirom sto su ga apdejtirali pre neki dan? Ali dizajn i specifikacije nisu se puno promenili... Svake godine izbacuju nov ... Sada ce , u narednom mesecima ... Do bozica oni sve to renoviraju ... Svaka čast Vučiću! Spasio si Srbiju iz ruku lopova i društvenih parazita! Link to comment Подели на овим сајтовима More sharing options...
Justin Waters Написано Август 16, 2014 Пријави Подели Написано Август 16, 2014 I koliko to kosta, ako ima da se kupi u Srbiji? Ima da se kupi ali je skuplje bar 500 evra. Bolje je sjesti na wizair i sprziti do Bazela na jednu noc. Kupis tamo za 1750 evra, i od povrata poreza jedno 5-7% pokrijes avionsku kartu, i platis samo nocenje i malo procunjas gradom. Juanito, RYLAH, feeble and 1 члан је реаговао/ла на ово 4 Српски менталитет карактеришу изненадни подвизи кратког даха, понесеност која прво улије наду, али капитулира у завршници, све се то после правда вишом силом и некаквом планетарном неправдом што само на нас вреба. Link to comment Подели на овим сајтовима More sharing options...
Crveni Baron Написано Август 16, 2014 Пријави Подели Написано Август 16, 2014 I koliko to kosta, ako ima da se kupi u Srbiji?od 1130&€do 2600€ u italiji u zavisnosti od velicine , procedora, ram memorije itd feeble је реаговао/ла на ово 1 Svaka čast Vučiću! Spasio si Srbiju iz ruku lopova i društvenih parazita! Link to comment Подели на овим сајтовима More sharing options...
Иван ♪♫ Написано Август 16, 2014 Пријави Подели Написано Август 16, 2014 Решио сам да пробам мало да пискарам и ево га први текстић о Swift-у. https://medium.com/@ivicamil/higher-order-functions-in-swift-part-1-d8e75f963d13 super ti je ovo Grizzly Adams је реаговао/ла на ово 1 Link to comment Подели на овим сајтовима More sharing options...
Иван ♪♫ Написано Август 16, 2014 Пријави Подели Написано Август 16, 2014 Што рече Knuth: "Premature optimization is the root of all evil"... let result = reduce(1...100, 0) { ($1 * $1) % 4 == 0 ? $0 + $1 : $0 } Мислим да је ово најбоље. Фора је у томе што овде имаш "мустру" тј. патерн који се понавља у пуно комплекснијим ситуацијама када пролазиш кроз низ објеката и над сваким обављаш операцију да би добио агрегатни резултат. И онда "подметање нул објекта" може да има непредвиђене сајд-ефекте, посебно када после модификујеш класе, а такви багови се по правилу тешко проналазе. Оћу да кажем да није само "чистунство" него стварно има оправдање. čisto diskusije radi, razmišljam na glas: Slažem se sa primedbom. Ali što se tiče onog closure-a gore, on samo deluje kao generički kod, a u stvari nije. To je funkcija koja ima dva Int parametra, i u punom zapisu bi izgledala ovako nekako: func nekiNaziv(arg1: Int, arg2: Int) -> Int { return (arg1 * arg2) % 4 == 0 ? arg1 + arg1 : arg1 } Onaj kraći zapis je samo syntactic sugar. I s obzirom da se radi sa integer-ima, nema nikakve veze i ako se sabira nula (iako je nepotrebno). Imalo bi efekta na nekom ogromnom data set-u, ali u tom slučaju svakako ne bi koristio ovu (semi)funkcionalnu paradigmu, već bi pazio na kompleksnost. Ovaj closure nije reusable, jer se definiše na licu mesta, za nešto što ti samo tu treba i nigde više se ne koristi. Ne može ni da bude generic zato što pretpostavlja postojanje četiri operatora: *, %, == i +. Da bi postao generic: 1. njegovi parametri bi morali da budu deklarisani kao pripadnici interfejsa koji međusobno implementiraju ove operatore, ili 2. da očekuje da se operatori proslede kao parametri (kao što to generički reduce očekuje). U objc-u se preko null prelazilo bez problema, jednostavno poziv metode na null referenci ne uradi ništa. U swift-u ti pukne bad access pa gledaj šta ćeš Tako nekako Link to comment Подели на овим сајтовима More sharing options...
Grizzly Adams Написано Август 16, 2014 Пријави Подели Написано Август 16, 2014 Ево како би то изгледало у Оштром Цеју: var sum = Enumerable.Range(1, 100).Where(a => a * a % 4 == 0).Sum(); Juanito and Иван ♪♫ је реаговао/ла на ово 2 ΜΟΛΩΝ ΛΑΒΕ Link to comment Подели на овим сајтовима More sharing options...
Juanito Написано Август 16, 2014 Аутор Пријави Подели Написано Август 16, 2014 Ево како би то изгледало у Оштром Цеју: var sum = Enumerable.Range(1, 100).Where(a => a * a % 4 == 0).Sum(); Шефе, јеси ли користио Оштри Ф? Link to comment Подели на овим сајтовима More sharing options...
Grizzly Adams Написано Август 16, 2014 Пријави Подели Написано Август 16, 2014 Нажалост, јок. ΜΟΛΩΝ ΛΑΒΕ Link to comment Подели на овим сајтовима More sharing options...
Juanito Написано Август 16, 2014 Аутор Пријави Подели Написано Август 16, 2014 U objc-u se preko null prelazilo bez problema, jednostavno poziv metode na null referenci ne uradi ništa. U swift-u ti pukne bad access pa gledaj šta ćeš Зависи. class SomeClass { func doSomething() { } } class TestClass { var optionalProperty: SomeClass? } let test = TestClass() test.optionalProperty.doSomething() // Ovo se neće kompajlirati. test.optionalProperty!.doSomething() // Ovo će eksplodirati. test.optionalProperty?.doSomething() // Ovo jednostavno ne radi ništa ako je optionalProperty == nil, slično kao u Obj-C. Link to comment Подели на овим сајтовима More sharing options...
Препоручена порука