simplify frontend

with

clojurescript

clojurescript

me :

github.com/vehas

fb.me/vehas

ex:

react-native, redux,

redux-saga, styled-component

current:

clojure  job seeker

clojure and clojurescript

host-independent

immutable

lisp

macro

fast

functional programming

runtime polymorphishm

data first

 clojurescript vs Javascript

immutable

functional programming

runtime polymorphism

 

 

lisp

-macro

-simply

-extensible

immutable.js

lodash.js

monkey patch (extend prototype)

-binding expresstion

-proxy, reflex

 clojurescript vs Javascript

repl

 

hot-reload via webpack

 

 clojurescript vs Javascript

simple data with macro (reagent)

 

jsx : new language extension

problem : declarative view (aka: React )

(defn acceptedCard
    [title long-text]
    [:div.container
        [:div.text long-text]
        [:div.button title]])
const acceptedCard =
  ({title, longText}) =>
    <div className="container">
    <div className="text">
    {longText}
    </div>
    <div className="button">
       {title}
    </div>
</div>

 clojurescript vs Javascript

build in

 

immutable.js 

 

problem : immutable data structure

(def group-a
    [ "manee" "vichai"])
(def group-b
    [ "predee" "vela"])
(def all-group-name
    (concat group-a group-b))
const { List } =
    require('immutable');
const groupA =
    List([ "name1", "name2" ]);
const groupB =
    List([ "name3", "name4" ]);
const group =
    List.concat(groupA, groupB);

 clojurescript vs Javascript

macro

 

sweet.js

problem : macro

(defmacro backwards
    [form]
    (reverse form))
syntax hi = function (ctx) { 
  return #`console.log('hello!')`; 
}
hi

babel 

 

export default function ({Plugin, types: t}) {
  return new Plugin('ast-transform', {
    visitor: {
      Identifier(node) {
        return t.identifier(node.name
            .split('').reverse().join(''));
      }
    }
  });
}

 clojurescript vs Javascript

repl,  fig wheel

hot reload -webpack 

problem : live coding

 clojurescript vs Javascript

google closure compiler

uglify

minify

extern

explicit export

webpack

+ tons of plug ins

problem : dead code elimination

 clojurescript interop Javascript

problem : work with js codebase

js => clojurescript

cljs => js

js global

 

js module with extern, or cljsjs

;clojurescript
(ns my-name-space)
(defn ^:export add-numbers [a b]
  (+ a b))
// js
my_name_space.core.add_numbers(1,2);
(. js/window (hello))
(.somemodule some-lib some-input)

 clojurescript interop Javascript

dev tool

chrome dev tool

source map

repl 

debugger

chrome dev tool

source map (for es.next)

browser console

debugger

problem: i want to try clojurescript 

learning interactively

online IDE: http://nightcoders.net/

 

NOW!

simplify frontend with clojurescript

By Veha Suwatphisankij

simplify frontend with clojurescript

  • 300