Fork me on GitHub
#clojure-russia
<
2016-04-20
>
andmed06:04:42

Добрый день. Это только мне кажется что вот это вот как-то непрозрачно?

user=> (true? :a)
false

andmed06:04:54

user=> (if :a (println "true") (print "false"))
true

andmed06:04:43

в принципе вместо :a что угодно

andmed06:04:56

вроде логика булева, а тут ложь, истина, и третье получается...

fxposter06:04:05

вполне нормально

fxposter06:04:09

оно же не “true"

fxposter06:04:15

оно “truthy"

fxposter06:04:22

но не “true"

fxposter06:04:54

а ты предпочел бы, чтобы кложура в рантайме ругалась на то, что ты в if засунул не boolean?

andmed06:04:02

ok. наверно это правильно. просто я привык что if проверяет на истинность, а true? :a в таком случае было бы не единообразней выдавать тоже true ведь вроде Both nil and false are treated as "false" and everything else is treated as true

fxposter06:04:34

(true? x) == (= x true)

fxposter06:04:47

вопрос - зачем эта функция нужна - второстепенный simple_smile

fxposter06:04:51

скажу как рубист - иногда ты хочешь сделать что-то типа “on/off/custom value"

fxposter06:04:14

вот в данном случае это может быть “true/false/any string” например

fxposter06:04:44

типа - конфиг для логгера - выкл, вкл с дефолтным значением и кастомный путь

petr.myain07:04:22

Хорошую тему подняли, а функция truthy? есть?

andmed07:04:53

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

artemyarulin07:04:18

дада, лучше как в JS - строчка пустая, пустой массив, null, undefined simple_smile

andmed07:04:39

я из Javы. Шутки не понял Ж)

artemyarulin07:04:45

а в жаве как? там в if можно тока boolean expression проверять да?

andmed07:04:31

джава не при чем. речь то о жс. но если что-то приравнивается к true я бы ожидал что встроенный метод проверяющий на true? выдаст true. ну ок, согласен может у меня логика кривая

seryh08:04:37

как бы мне попроще заворачивать ответ compojure-api в jsonp если передан callback

dottedmag08:04:52

@andmed: Это потому что true? проверяет не истинность (предикат метауровня), а то, является ли проверяемое объектом true (предикат объектного уровня), как и другие X?-предикаты.

seryh09:04:11

с этой штукой ring.middleware.jsonp отлично завелся jsonp

seryh10:04:40

правд пришлось форкнуть и внести фикс который на jsonp даже в случае ошибок запроса будет возвращать 200ok

seryh10:04:01

jquery чето не понимает другие статусы

shinych10:04:08

jquery - фтопку, зачем оно? или legacy?

seryh10:04:52

ну дак jsonp подразумевает что будут подключатся всякие разные клиенты с фронта

seryh10:04:07

а большинство все еще использует jquery

misha11:04:37

@andmed:

(true? (boolean :a))
>> true
и зачем тебе true?, если есть if и when уже? )

Roman Liutikov11:04:35

Кто-нибудь делал более-менее реальный проект на Rum? Как отделить состояние от приложения, чтобы не прокидывать его по всему дереву компонентов? Есть устоявшийся подход типа re-frame?

misha11:04:07

@roman01la: датаскрипт kappa

misha11:04:53

ну или атом с кучей геттеров/сеттеров

Roman Liutikov11:04:00

датаскрип, как упоминали ранее simple_smile

misha11:04:29

я громадные вьюхи корнем подписывал на атом или датаскрипт, value сливал вниз по дереву как аргументы, писал в атом/дс, рутовое вью перерисовывало всё (ну типа реакт, совсем не всё) дерево на любое изменение

misha11:04:51

на лаптопах - моментально. на андроидах мобильных - хз

Roman Liutikov11:04:30

@misha: а как мутации делать? прямиком в атом писать?

misha11:04:33

альтернатива - подписывать каждый компонент на свой карманчик стейта и менеджить кучу вьюх и кучу атомов или чего-там, я так сейчас воркэраундю медленный датаскрипт - такой гемор, и код ветвистый слишком, фу

misha11:04:37

ну да, прямиком

Roman Liutikov11:04:05

хотелось бы отвязать атом от вьюх

misha11:04:12

или в корасинк каналы, как тебе масштабы проекта позволяют

Roman Liutikov11:04:26

точняк 😅

misha11:04:54

ну а как? функция save-some-attr, которая внутри либо в канал пишет, либо в атом. вьюха полюбому должна кого-то вызвать, а сколько индерекшена в этом ком-то - дело твое уже

misha11:04:43

там весь спектр, от напрямую, до каких-то басов с меседжами и диспатчерами и whatnot

Roman Liutikov11:04:59

ну я хотел узнать, есть ли общепринятый паттерн для Rum

misha11:04:17

ну ром тут вообще не при чем, как мне кажется

misha11:04:35

на нем и так и эдак. от ветвистости твоей приложухи зависит

misha11:04:28

но самый прямолинейный код - подписывать рут вью на атом/базу, и спускать значение вниз как аргументы

Roman Liutikov11:04:51

вот с этим и проблема для новичков, мне так кажется. В Reagent есть re-frame и тебе сразу сказано как это делать. А с тем же Rum ты не знаешь как к этому подойти, что бы потом твой проект нормально развивался.

misha11:04:00

а как там?

misha11:04:26

ок, говорю: пиши сразу в атом kappa

misha11:04:06

просто не #(swap! A update-in [:i :poneslas :жaRa :tut :ваще] %), а update-my-attr, и в нем уже свапай или в датаскрипт пиши, или на сервер звони

misha11:04:13

и в неймспейс другой сложи (но не сразу) эти update-my-attr. этого достаточно, пока не станет ясно где и как тесно

Roman Liutikov11:04:07

ок, понял. спасибо

petr.myain13:04:22

а что за две библиотеки (почему именно они) на странице http://clojure.ru/libraries.html ?

razum2um16:04:02

@petr.myain: оу, приношу свои извинения. это задумывалось как список репозиториев, где есть большая активность. т.е. метрикой интереса были не звезды (такой дайджест сам гитхаб присылает если фолливишь правильных людей), а именно заметить, что кто-то в течении недели активно коммитит в clj репо. я постараюсь починить asap

zharinov21:04:03

Господа, тут недавно был пост, в котором binding — это code smell. А я нахожу его удачным решением для i18n. Это спасает от пробрасывания переводов по всему дереву компонентов. Ну а на клиенте можно собрать js под разные языки. Как считаете, норм кейс?

misha21:04:34

@s_zharinov: ну а биндинг как ты динамически будешь менять?

zharinov21:04:23

думаю текущий язык пользователя хранить в куки, перед рендером на сервере его смотреть и подставлять нужный хэшмап

misha21:04:36

даже не знаю, как лучше хранить

(def ru {:str "a"})
(def en {:str "a"})
(def dict {:str {:ru "a" :en "a"})
(def dict {:ru {:str "a"} :en {:str "a"})

zharinov21:04:44

Пожалуй, варианты 2 и 3 удачнее

zharinov21:04:16

Но биндить всё равно буду)