This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-02-17
Channels
- # admin-announcements (3)
- # announcements (1)
- # aws (3)
- # beginners (41)
- # boot (109)
- # braid-chat (2)
- # braveandtrue (5)
- # cider (11)
- # cljs-dev (38)
- # cljsjs (15)
- # cljsrn (5)
- # clojure (87)
- # clojure-berlin (16)
- # clojure-ireland (1)
- # clojure-japan (10)
- # clojure-madison (3)
- # clojure-nl (3)
- # clojure-poland (6)
- # clojure-russia (115)
- # clojure-sg (1)
- # clojurebridge (35)
- # clojured (8)
- # clojurescript (36)
- # core-async (24)
- # cursive (18)
- # datavis (1)
- # datomic (27)
- # dirac (22)
- # editors (1)
- # emacs (3)
- # events (19)
- # hoplon (149)
- # ldnclj (7)
- # lein-figwheel (1)
- # luminus (1)
- # off-topic (70)
- # om (196)
- # onyx (63)
- # parinfer (155)
- # proton (36)
- # re-frame (69)
- # reagent (2)
- # ring (2)
- # ring-swagger (1)
- # slack-help (4)
- # spacemacs (9)
- # testing (11)
Всем ассаламалейкум. насколько реально написать аналог этого прокси на кложуре? https://github.com/brcontainer/html2canvas-php-proxy
@artemyarulin: сейчас объясню на пальцах. смотри: декоратор — функция, статический конструктор — функция. класс — порождение defrecord
😄
be9: класс это хранённое состояние, что есть замыкание в функции. Но это же всё ерунда. Интересно не базовые способности языка, а удобные и понятные конструкции.
А я никогда в ооп не мог
А вот на кложе начал даже писать
@misha: Спасибо, уже использую во всю, няшная либа
@be9: Спасибо за объяснение Я просто вроде 10 лет почти оопешил на сишарпе и тока вот вчера понял что с кложурой абсолютно забыл про статичные поля и прочую фигню, причем напрочь:)
artemyarulin: умом может и забыл, а тело помнит! зайди в Visual Studio, поставь руки на клавиатуру и закрой глаза. hello_world.cs поди набьёшь 😄
Ну вот сразу не так - HelloWorld.cs! ОМГ, я помню 😄
Я чота задумался - во всяких С# синглтон делается по типу:
public class Singleton
{
private static Singleton instance;
private Singleton() {}
private static object syncRoot = new Object();
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
}
// и эти люди про скобочки лиспа чота грят...
на кложуре же тупо def и все?а неа, def будет не ленивым. А как сделать аналог? Т.е. хочу ленивый синглтон? db connection и чтоб мультипоточно работало и все такое
компонент не предлагать
@artemyarulin: Функцию сделать, которая возвращает экземпляр из атома.
а если я дерну ее из нескольких потоков?
ааа, if можно внутри swap! засунуть, я чота не думал раньше об этом
спасибо!
дада, счас то я понимаю. Я просто думал по началу про неправильный вариант типа:
(when-not (:conn @state)
(swap! state assoc :conn (new-con))
(:conn @state)
не дошло сразу что проверку надо внутрь swap! засунуть
Привет, наткнулся на yo генератор jhipster, хотел узнать есть ли чтото побное для clojure, для изучения бест практис? Готовый апп, с возможностью расширения
@artemyarulin: еще delay
, если я правильно понял
@malch: ООО, т.е. все схлопнется вообще до (def conn (delay (gen-conn))
>
(swap! conn-atom (fn [cur-conn] (if (nil? cur-conn) (generate-conn) cur-conn)))
так не стоит делать
почему?
@artemyarulin: кстати, а почему component не предлагать? офигительный набор отвёрток сразу комплект синглтонов
@be9: Ну тогда б дискуссии этой не было вообще - Как мне сделать аналог синлтона кода из С# в кложуре? - Юзай компонент - А хм, ок
@prepor: Просвяти плиз чо не так со swap!? Вроде выглядит все пучком
как правило, нельзя допускать никаких сайд эффектов внутри swap! функции, если точно не знаешь что делаешь
хм, странно - а почему функция может дернуться несколько раз? Т.е. я понимаю что детали реализации ага, но не могу просто понять почему так сделано
public Object swap(IFn f, Object arg) {
for(; ;)
{
Object v = deref();
Object newv = f.invoke(v, arg);
validate(newv);
if(state.compareAndSet(v, newv))
{
notifyWatches(v, newv);
return newv;
}
}
}
нашел.да
сорри за тупой вопрос
да, матчасть надо читать 😳
да нене, упаси господь - в моем коде такого не будет. Просто как упражнение
вон как оказалось очень полезно было, узнал много нового
How well do you know about postfix increments? Try to predict the output of the following snippet
int[] data = { 1, 2, 3 };
int i = 1;
data[i++] = data[i] + 10;
Console.WriteLine(String.Join(",", data));
а такое слабо воспроизвести на кложуре? Но тока чтобы тоже было непонятно какой ответ получится 😄warning: unsequenced modification and access to 'i' [-Wunsequenced] data[i++] = data[i] + 10;
оффтоп: http://blog.jetbrains.com/kotlin/2016/02/kotlin-1-0-released-pragmatic-language-for-jvm-and-android/
>я думаю, слабо, потому что у тебя в clj мутация в любом случае будет явной. вообще подумалось - можно ли на кложуре написать код который былоб непонятно что он вернет?
мутации все явные, приоритета операторов помнить не надо. Ну исключая конечно адский ад на 100500 строчек с кор.асинк
@andre: А в чем фишка котлина вообще?
@rm: Ну ты понял о чем я, тут понятно что рандом
@artemyarulin: котлин для тех, кто хочет ООП на jvm, но устал от Java и при этом не хочет scala. Лучше чем c# даже (если отстраниться от MS, то язык же хорош). Я два года ждал его с бета версии, кажется, так и не дождался - сначала scala попробовал, потом clojure
@abtv: А там функциональщины вообще нет?
@fxposter: Ну дада, тоже подумал про макросы
@artemyarulin: так как в clojure ты можешь делать все то же, что и в java, можешь с помощью reflection добиться сколь угодно непонятного кода
ну наверно да - это задачка из C# тоже по сути придумана. Если захотеть можно и на кложуре х сломать
http://try.kotlinlang.org/#/Examples/Hello,%20world!/An%20object-oriented%20Hello/An%20object-oriented%20Hello.kt чота не могу отличить от скалы сходу
// Return null if str does not hold a number
fun parseInt(str: String): Int? {
try {
return Integer.parseInt(str)
} catch (e: NumberFormatException) {
println("One of the arguments isn't Int")
}
return null
}
ну блин, где монадический option? фу, кака@abtv: А чем котлин лучше скалы?
я на днях читал про него дискуссию какую-то – он проще в 100 раз, по идее, чем скала. так-то с первого взгляда – одно и то же.
на нем можно, как на хаскелле писать? говорят, что у скалисты делятся на 2 лагеря – одни пишут “на хаскелле”, другие – на старой доброй джаве.
вот ага, смотрю сча примеры http://try.kotlinlang.org и чота не впечатляет
неа, монадических типов нету походу
@artemyarulin: в скале 100500 способов сделать одно и тоже, на своём опыте говорю, мне было сложно разбираться в чужом коде, в котлище такого нет (вроде бы, нет опыта с ним, просто игрался два года назад)
immutable тоже нету по ходу
val map = hashMapOf<String, Int>() ссылка сама immutable тока
data class User(val name: String, val id: Int)
val user = User("Alex", 1)
println(user.copy(id = 2))
ну хоть чотаЕщё все мапы и фильтры сразу инлайн будут в котлине, производительность не пострадает, тут верю на слово чуваку из jet brains
ну чота хз, может после жавы мб и ах этот котлин. С другой стороны проще чем скала да
ну чем больше языков для жвм тем лучше