SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
  Programming Language Nerd

  Co-founder & CTO, Infinitely Beta

  Clojure programmer since the early
   days

  Curator of Planet Clojure

  Author of “Clojure in Practice” (ETA
   Sep, 2011)
  History             Metadata

  Data Structures     Java Inter-op

  Syntax              Concurrency

  Functions           Multi-methods

  Sequences           Macros

  Namespaces          Clojure Contrib
  Created by Rich Hickey in
   2007
  Open Sourced in 2008
  First large deployment in Jan,
   2009

  Second in Apr, same year
  We’ve come a long way since
   then!
  Programming languages      OO is overrated
   haven’t really changed
   much                       Polymorphism is good

  Creating large-scale,      Multi-core is the future
   concurrent software is
   still hard                 VMs are the next-gen
                               platforms
  Functional Programming
   rocks                      Ecosystem matters

  Lisp is super power        Dynamic development
  Numbers 1	
  3.14	
  22/7	
       Characters a	
  b	
  c	
  
  Booleans true	
  false	
          Comments ;;	
  Ignore	
  

  Strings “foobar”	
                Nothing nil	
  
  Symbols thisfn	
  

  Keywords :this	
  :that	
  
  RegEx Patterns #“[a-­‐zA-­‐
    Z0-­‐9]+”	
  
  Lists (1	
  2	
  3)	
  (list	
  “foo”	
  “bar”	
  “baz”)	
  

  Vectors [1	
  2	
  3]	
  (vector	
  “foo”	
  “bar”	
  “baz”)	
  

  Maps {:x	
  1,	
  :y	
  2}	
  (hash-­‐map	
  :foo	
  1	
  :bar	
  2)	
  

  Sets #{a	
  e	
  i	
  o	
  u}	
  (hash-­‐set	
  “cat”	
  “dog”)	
  
  There is no other syntax!
  Data structures are the code
  No other text based syntax, only different
   interpretations
  Everything is an expression (s-exp)
  All data literals stand for themselves, except symbols &
   lists
  Function calls (function	
  arguments*)	
  


(def	
  hello	
  (fn	
  []	
  “Hello,	
  world!”))	
  
-­‐>	
  #’user/hello	
  
(hello)	
  
-­‐>	
  “Hello,	
  world!”	
  

(defn	
  hello	
  
	
  	
  ([]	
  (hello	
  “world”))	
  
	
  	
  ([name]	
  (str	
  “Hello,	
  ”	
  name	
  “!”)))	
  
“It is better to have 100 functions operate on one data structure
             than 10 functions on 10 data-structures.”
                          Alan J. Perlis
  An abstraction over traditional Lisp lists

  Provides an uniform way of walking through different
   data-structures

  Sample sequence functions seq	
  first	
  rest	
  filter	
  
    remove	
  for	
  partition	
  reverse	
  sort	
  map	
  reduce	
  doseq
  Analogous to Java packages, but with added dynamism

  A mapping of symbols to actual vars/classes

  Can be queried and modified dynamically

  Usually manipulated via the ns macro
  Data about data

  Can annotate any symbol or collection

  Mainly used by developers to mark data structures with
   some special information

  Clojure itself uses it heavily

(def	
  x	
  (with-­‐meta	
  {:x	
  1}	
  {:source	
  :provider-­‐1}))	
  
-­‐>	
  #’user/x	
  
(meta	
  x)	
  
-­‐>	
  {:source	
  :provider-­‐1}	
  
  Wrapper free interface to Java
  Syntactic sugar makes calling Java easy & readable
  Core Clojure abstractions are Java interfaces (will
   change)
  Clojure functions implement Callable & Runnable
  Clojure sequence lib works with Java iterables
  Near native speed
(ClassName.	
  args*)	
  
(instanceMember	
  instance	
  args*)	
  
(ClassName/staticMethod	
  args*)	
  
ClassName/STATIC_FIELD	
  

(.toUpperCase	
  “clojure”)	
  
-­‐>	
  “CLOJURE”	
  
(System/getProperty	
  “java.vm.version”)	
  
-­‐>	
  “16.3-­‐b01-­‐279”	
  
Math/PI	
  
-­‐>	
  3.14…	
  
(..	
  System	
  (getProperties)	
  (get	
  “os.name”))	
  
-­‐>	
  “Mac	
  OS	
  X”	
  
  A technique of doing structural binding in a function
   arg list or let binding



(defn	
  list-­‐xyz	
  [xyz-­‐map]	
  
	
  	
  (list	
  (:x	
  xyz-­‐map)	
  (:y	
  xyz-­‐map)	
  (:z	
  xyz-­‐map)))	
  

(list-­‐xyz	
  {:x	
  1,	
  :y	
  2	
  :z	
  3})	
  
-­‐>	
  (1	
  2	
  3)	
  
//	
  From	
  Apache	
  Commons	
  Lang,	
  http://commons.apache.org/lang/	
  
	
  	
  public	
  static	
  int	
  indexOfAny(String	
  str,	
  char[]	
  searchChars)	
  {	
  
	
  	
  	
  	
  	
  	
  if	
  (isEmpty(str)	
  ||	
  ArrayUtils.isEmpty(searchChars))	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  -­‐1;	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  for	
  (int	
  i	
  =	
  0;	
  i	
  <	
  str.length();	
  i++)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  char	
  ch	
  =	
  str.charAt(i);	
  
	
  	
  	
  	
  	
  	
  	
  	
  for	
  (int	
  j	
  =	
  0;	
  j	
  <	
  searchChars.length;	
  j++)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  if	
  (searchChars[j]	
  ==	
  ch)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  i;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  return	
  -­‐1;	
  
	
  	
  }	
  
(defn	
  indexed	
  [coll]	
  (map	
  vector	
  (iterate	
  inc	
  0)	
  coll))	
  
(defn	
  indexed	
  [coll]	
  (map	
  vector	
  (iterate	
  inc	
  0)	
  coll))	
  

(defn	
  index-­‐filter	
  [pred	
  coll]	
  
	
  	
  	
  	
  (for	
  [[idx	
  elt]	
  (indexed	
  coll)	
  :when	
  (pred	
  elt)]	
  
	
  	
  	
  	
  	
  	
  idx))	
  
(defn	
  indexed	
  [coll]	
  (map	
  vector	
  (iterate	
  inc	
  0)	
  coll))	
  

(defn	
  index-­‐filter	
  [pred	
  coll]	
  
	
  	
  	
  	
  (when	
  pred	
  	
  
	
  	
  	
  	
  	
  	
  (for	
  [[idx	
  elt]	
  (indexed	
  coll)	
  :when	
  (pred	
  elt)]	
  idx)))	
  

(index-­‐filter	
  #{a	
  e	
  i	
  o	
  o}	
  "The	
  quick	
  brown	
  fox")	
  
-­‐>	
  (2	
  6	
  12	
  17)	
  

(index-­‐filter	
  #(>	
  (.length	
  %)	
  3)	
  ["The"	
  "quick"	
  "brown"	
  "fox"])	
  
-­‐>	
  (1	
  2)	
  
for	
   doseq	
   if	
   cond	
   condp	
   partition	
   loop	
   recur	
   str	
   map	
  
reduce	
   filter	
   defmacro	
   apply	
   comp	
   complement	
  	
  
defstruct	
   drop	
   drop-­‐last	
   drop-­‐while	
   format	
   iterate	
  
juxt	
   map	
   mapcat	
   memoize	
   merge	
   partial	
   partition	
  
partition-­‐all	
   re-­‐seq	
   reductions	
   reduce	
   remove	
   repeat	
  
repeatedly	
  zipmap	
  
  Simultaneous execution

  Avoid reading; yielding inconsistent data

                      Synchronous    Asynchronous
      Coordinated     ref	
  
      Independent     atom	
         agent	
  
      Unshared        var	
  
  Generalised indirect dispatch

  Dispatch on an arbitrary function of the arguments

  Call sequence
     Call dispatch function on args to get dispatch value
     Find method associated with dispatch value
        Else call default method
        Else error
  Encapsulation through closures

  Polymorphism through multi-methods

  Inheritance through duck-typing
(defmulti	
  interest	
  :type)	
  
(defmethod	
  interest	
  :checking	
  [a]	
  0)	
  
(defmethod	
  interest	
  :savings	
  [a]	
  0.05)	
  

(defmulti	
  service-­‐charge	
  	
  
	
  	
  	
  	
  (fn	
  [acct]	
  [(account-­‐level	
  acct)	
  (:tag	
  acct)]))	
  
(defmethod	
  service-­‐charge	
  [::Basic	
  ::Checking]	
  	
  	
  [_]	
  25)	
  	
  
(defmethod	
  service-­‐charge	
  [::Basic	
  ::Savings]	
  	
  	
  	
  [_]	
  10)	
  
(defmethod	
  service-­‐charge	
  [::Premium	
  ::Checking]	
  [_]	
  0)	
  
(defmethod	
  service-­‐charge	
  [::Premium	
  ::Savings]	
  	
  [_]	
  0)	
  
  A facility to extend the compiler with user code

  Used to define syntactic constructs which would
   otherwise require primitives/built-in support


 (try-­‐or	
  
 	
  	
  (/	
  1	
  0)	
  
 	
  	
  (reduce	
  +	
  [1	
  2	
  3	
  4])	
  
 	
  	
  (partition	
  (range	
  10)	
  2)	
  
 	
  	
  (map	
  +	
  [1	
  2	
  3	
  4]))	
  	
  
  clojure.contrib.http.agent

  clojure.contrib.io

  clojure.contrib.json

  clojure.contrib.seq-utils

  clojure.contrib.pprint

  clojure.contrib.string
  Compojure          Cascalog

  ClojureQL          Enlive

  Incanter           Congomongo

  Leiningen          Pallet

  FleetDB            Many more!

  clojure-hadoop
  Clojure http://clojure.org

  Clojure group http://bit.ly/clojure-group

  IRC #clojure on irc.freenode.net

  Source http://github.com/clojure

  Wikibook http://bit.ly/clojure-wikibook
http://infinitelybeta.com/jobs/
Pune Clojure Course Outline
Pune Clojure Course Outline

Weitere ähnliche Inhalte

Was ist angesagt?

Demystifying functional programming with Scala
Demystifying functional programming with ScalaDemystifying functional programming with Scala
Demystifying functional programming with ScalaDenis
 
Scala - where objects and functions meet
Scala - where objects and functions meetScala - where objects and functions meet
Scala - where objects and functions meetMario Fusco
 
If You Think You Can Stay Away from Functional Programming, You Are Wrong
If You Think You Can Stay Away from Functional Programming, You Are WrongIf You Think You Can Stay Away from Functional Programming, You Are Wrong
If You Think You Can Stay Away from Functional Programming, You Are WrongMario Fusco
 
Clojure for Data Science
Clojure for Data ScienceClojure for Data Science
Clojure for Data ScienceMike Anderson
 
From Lisp to Clojure/Incanter and RAn Introduction
From Lisp to Clojure/Incanter and RAn IntroductionFrom Lisp to Clojure/Incanter and RAn Introduction
From Lisp to Clojure/Incanter and RAn Introductionelliando dias
 
Hey! There's OCaml in my Rust!
Hey! There's OCaml in my Rust!Hey! There's OCaml in my Rust!
Hey! There's OCaml in my Rust!Kel Cecil
 
The Easy-Peasy-Lemon-Squeezy, Statically-Typed, Purely Functional Programming...
The Easy-Peasy-Lemon-Squeezy, Statically-Typed, Purely Functional Programming...The Easy-Peasy-Lemon-Squeezy, Statically-Typed, Purely Functional Programming...
The Easy-Peasy-Lemon-Squeezy, Statically-Typed, Purely Functional Programming...John De Goes
 
All Aboard The Scala-to-PureScript Express!
All Aboard The Scala-to-PureScript Express!All Aboard The Scala-to-PureScript Express!
All Aboard The Scala-to-PureScript Express!John De Goes
 
Functional Algebra: Monoids Applied
Functional Algebra: Monoids AppliedFunctional Algebra: Monoids Applied
Functional Algebra: Monoids AppliedSusan Potter
 
Optimizing Tcl Bytecode
Optimizing Tcl BytecodeOptimizing Tcl Bytecode
Optimizing Tcl BytecodeDonal Fellows
 
Spark 4th Meetup Londond - Building a Product with Spark
Spark 4th Meetup Londond - Building a Product with SparkSpark 4th Meetup Londond - Building a Product with Spark
Spark 4th Meetup Londond - Building a Product with Sparksamthemonad
 
Clojure for Data Science
Clojure for Data ScienceClojure for Data Science
Clojure for Data Sciencehenrygarner
 
Making an Object System with Tcl 8.5
Making an Object System with Tcl 8.5Making an Object System with Tcl 8.5
Making an Object System with Tcl 8.5Donal Fellows
 
Haskell in the Real World
Haskell in the Real WorldHaskell in the Real World
Haskell in the Real Worldosfameron
 

Was ist angesagt? (20)

Demystifying functional programming with Scala
Demystifying functional programming with ScalaDemystifying functional programming with Scala
Demystifying functional programming with Scala
 
Scala - where objects and functions meet
Scala - where objects and functions meetScala - where objects and functions meet
Scala - where objects and functions meet
 
If You Think You Can Stay Away from Functional Programming, You Are Wrong
If You Think You Can Stay Away from Functional Programming, You Are WrongIf You Think You Can Stay Away from Functional Programming, You Are Wrong
If You Think You Can Stay Away from Functional Programming, You Are Wrong
 
Clojure for Data Science
Clojure for Data ScienceClojure for Data Science
Clojure for Data Science
 
From Lisp to Clojure/Incanter and RAn Introduction
From Lisp to Clojure/Incanter and RAn IntroductionFrom Lisp to Clojure/Incanter and RAn Introduction
From Lisp to Clojure/Incanter and RAn Introduction
 
Enter The Matrix
Enter The MatrixEnter The Matrix
Enter The Matrix
 
MTL Versus Free
MTL Versus FreeMTL Versus Free
MTL Versus Free
 
Hey! There's OCaml in my Rust!
Hey! There's OCaml in my Rust!Hey! There's OCaml in my Rust!
Hey! There's OCaml in my Rust!
 
Collections forceawakens
Collections forceawakensCollections forceawakens
Collections forceawakens
 
Clojure class
Clojure classClojure class
Clojure class
 
The Easy-Peasy-Lemon-Squeezy, Statically-Typed, Purely Functional Programming...
The Easy-Peasy-Lemon-Squeezy, Statically-Typed, Purely Functional Programming...The Easy-Peasy-Lemon-Squeezy, Statically-Typed, Purely Functional Programming...
The Easy-Peasy-Lemon-Squeezy, Statically-Typed, Purely Functional Programming...
 
All Aboard The Scala-to-PureScript Express!
All Aboard The Scala-to-PureScript Express!All Aboard The Scala-to-PureScript Express!
All Aboard The Scala-to-PureScript Express!
 
Functional Algebra: Monoids Applied
Functional Algebra: Monoids AppliedFunctional Algebra: Monoids Applied
Functional Algebra: Monoids Applied
 
Optimizing Tcl Bytecode
Optimizing Tcl BytecodeOptimizing Tcl Bytecode
Optimizing Tcl Bytecode
 
Spark 4th Meetup Londond - Building a Product with Spark
Spark 4th Meetup Londond - Building a Product with SparkSpark 4th Meetup Londond - Building a Product with Spark
Spark 4th Meetup Londond - Building a Product with Spark
 
Clojure for Data Science
Clojure for Data ScienceClojure for Data Science
Clojure for Data Science
 
Making an Object System with Tcl 8.5
Making an Object System with Tcl 8.5Making an Object System with Tcl 8.5
Making an Object System with Tcl 8.5
 
Comparing JVM languages
Comparing JVM languagesComparing JVM languages
Comparing JVM languages
 
Sneaking inside Kotlin features
Sneaking inside Kotlin featuresSneaking inside Kotlin features
Sneaking inside Kotlin features
 
Haskell in the Real World
Haskell in the Real WorldHaskell in the Real World
Haskell in the Real World
 

Ähnlich wie Pune Clojure Course Outline

Getting started with Clojure
Getting started with ClojureGetting started with Clojure
Getting started with ClojureJohn Stevenson
 
ClojureScript for the web
ClojureScript for the webClojureScript for the web
ClojureScript for the webMichiel Borkent
 
Exploring Clojurescript
Exploring ClojurescriptExploring Clojurescript
Exploring ClojurescriptLuke Donnet
 
Introduction to clojure
Introduction to clojureIntroduction to clojure
Introduction to clojureAbbas Raza
 
The Curious Clojurist - Neal Ford (Thoughtworks)
The Curious Clojurist - Neal Ford (Thoughtworks)The Curious Clojurist - Neal Ford (Thoughtworks)
The Curious Clojurist - Neal Ford (Thoughtworks)jaxLondonConference
 
ClojureScript loves React, DomCode May 26 2015
ClojureScript loves React, DomCode May 26 2015ClojureScript loves React, DomCode May 26 2015
ClojureScript loves React, DomCode May 26 2015Michiel Borkent
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with ClojureDmitry Buzdin
 
(map Clojure everyday-tasks)
(map Clojure everyday-tasks)(map Clojure everyday-tasks)
(map Clojure everyday-tasks)Jacek Laskowski
 
(first '(Clojure.))
(first '(Clojure.))(first '(Clojure.))
(first '(Clojure.))niklal
 
Scala clojure techday_2011
Scala clojure techday_2011Scala clojure techday_2011
Scala clojure techday_2011Thadeu Russo
 
Introduction to R
Introduction to RIntroduction to R
Introduction to Ragnonchik
 
Real Time Big Data Management
Real Time Big Data ManagementReal Time Big Data Management
Real Time Big Data ManagementAlbert Bifet
 
Леонид Шевцов «Clojure в деле»
Леонид Шевцов «Clojure в деле»Леонид Шевцов «Clojure в деле»
Леонид Шевцов «Clojure в деле»DataArt
 
Clojure made-simple - John Stevenson
Clojure made-simple - John StevensonClojure made-simple - John Stevenson
Clojure made-simple - John StevensonJAX London
 
(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?Tomasz Wrobel
 

Ähnlich wie Pune Clojure Course Outline (20)

Full Stack Clojure
Full Stack ClojureFull Stack Clojure
Full Stack Clojure
 
Getting started with Clojure
Getting started with ClojureGetting started with Clojure
Getting started with Clojure
 
ClojureScript for the web
ClojureScript for the webClojureScript for the web
ClojureScript for the web
 
Exploring Clojurescript
Exploring ClojurescriptExploring Clojurescript
Exploring Clojurescript
 
Introduction to clojure
Introduction to clojureIntroduction to clojure
Introduction to clojure
 
The Curious Clojurist - Neal Ford (Thoughtworks)
The Curious Clojurist - Neal Ford (Thoughtworks)The Curious Clojurist - Neal Ford (Thoughtworks)
The Curious Clojurist - Neal Ford (Thoughtworks)
 
ClojureScript loves React, DomCode May 26 2015
ClojureScript loves React, DomCode May 26 2015ClojureScript loves React, DomCode May 26 2015
ClojureScript loves React, DomCode May 26 2015
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
(map Clojure everyday-tasks)
(map Clojure everyday-tasks)(map Clojure everyday-tasks)
(map Clojure everyday-tasks)
 
(first '(Clojure.))
(first '(Clojure.))(first '(Clojure.))
(first '(Clojure.))
 
Scala clojure techday_2011
Scala clojure techday_2011Scala clojure techday_2011
Scala clojure techday_2011
 
Introduction to R
Introduction to RIntroduction to R
Introduction to R
 
Java
JavaJava
Java
 
Real Time Big Data Management
Real Time Big Data ManagementReal Time Big Data Management
Real Time Big Data Management
 
Clojure intro
Clojure introClojure intro
Clojure intro
 
Леонид Шевцов «Clojure в деле»
Леонид Шевцов «Clojure в деле»Леонид Шевцов «Clojure в деле»
Леонид Шевцов «Clojure в деле»
 
Clojure And Swing
Clojure And SwingClojure And Swing
Clojure And Swing
 
Clojure made-simple - John Stevenson
Clojure made-simple - John StevensonClojure made-simple - John Stevenson
Clojure made-simple - John Stevenson
 
(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?
 
C# programming
C# programming C# programming
C# programming
 

Kürzlich hochgeladen

Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 

Kürzlich hochgeladen (20)

Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 

Pune Clojure Course Outline

  • 1.
  • 2.
  • 3.   Programming Language Nerd   Co-founder & CTO, Infinitely Beta   Clojure programmer since the early days   Curator of Planet Clojure   Author of “Clojure in Practice” (ETA Sep, 2011)
  • 4.   History   Metadata   Data Structures   Java Inter-op   Syntax   Concurrency   Functions   Multi-methods   Sequences   Macros   Namespaces   Clojure Contrib
  • 5.   Created by Rich Hickey in 2007   Open Sourced in 2008   First large deployment in Jan, 2009   Second in Apr, same year   We’ve come a long way since then!
  • 6.   Programming languages   OO is overrated haven’t really changed much   Polymorphism is good   Creating large-scale,   Multi-core is the future concurrent software is still hard   VMs are the next-gen platforms   Functional Programming rocks   Ecosystem matters   Lisp is super power   Dynamic development
  • 7.   Numbers 1  3.14  22/7     Characters a  b  c     Booleans true  false     Comments ;;  Ignore     Strings “foobar”     Nothing nil     Symbols thisfn     Keywords :this  :that     RegEx Patterns #“[a-­‐zA-­‐ Z0-­‐9]+”  
  • 8.   Lists (1  2  3)  (list  “foo”  “bar”  “baz”)     Vectors [1  2  3]  (vector  “foo”  “bar”  “baz”)     Maps {:x  1,  :y  2}  (hash-­‐map  :foo  1  :bar  2)     Sets #{a  e  i  o  u}  (hash-­‐set  “cat”  “dog”)  
  • 9.   There is no other syntax!   Data structures are the code   No other text based syntax, only different interpretations   Everything is an expression (s-exp)   All data literals stand for themselves, except symbols & lists
  • 10.   Function calls (function  arguments*)   (def  hello  (fn  []  “Hello,  world!”))   -­‐>  #’user/hello   (hello)   -­‐>  “Hello,  world!”   (defn  hello      ([]  (hello  “world”))      ([name]  (str  “Hello,  ”  name  “!”)))  
  • 11. “It is better to have 100 functions operate on one data structure than 10 functions on 10 data-structures.” Alan J. Perlis
  • 12.   An abstraction over traditional Lisp lists   Provides an uniform way of walking through different data-structures   Sample sequence functions seq  first  rest  filter   remove  for  partition  reverse  sort  map  reduce  doseq
  • 13.   Analogous to Java packages, but with added dynamism   A mapping of symbols to actual vars/classes   Can be queried and modified dynamically   Usually manipulated via the ns macro
  • 14.   Data about data   Can annotate any symbol or collection   Mainly used by developers to mark data structures with some special information   Clojure itself uses it heavily (def  x  (with-­‐meta  {:x  1}  {:source  :provider-­‐1}))   -­‐>  #’user/x   (meta  x)   -­‐>  {:source  :provider-­‐1}  
  • 15.   Wrapper free interface to Java   Syntactic sugar makes calling Java easy & readable   Core Clojure abstractions are Java interfaces (will change)   Clojure functions implement Callable & Runnable   Clojure sequence lib works with Java iterables   Near native speed
  • 16. (ClassName.  args*)   (instanceMember  instance  args*)   (ClassName/staticMethod  args*)   ClassName/STATIC_FIELD   (.toUpperCase  “clojure”)   -­‐>  “CLOJURE”   (System/getProperty  “java.vm.version”)   -­‐>  “16.3-­‐b01-­‐279”   Math/PI   -­‐>  3.14…   (..  System  (getProperties)  (get  “os.name”))   -­‐>  “Mac  OS  X”  
  • 17.   A technique of doing structural binding in a function arg list or let binding (defn  list-­‐xyz  [xyz-­‐map]      (list  (:x  xyz-­‐map)  (:y  xyz-­‐map)  (:z  xyz-­‐map)))   (list-­‐xyz  {:x  1,  :y  2  :z  3})   -­‐>  (1  2  3)  
  • 18. //  From  Apache  Commons  Lang,  http://commons.apache.org/lang/      public  static  int  indexOfAny(String  str,  char[]  searchChars)  {              if  (isEmpty(str)  ||  ArrayUtils.isEmpty(searchChars))  {                  return  -­‐1;              }              for  (int  i  =  0;  i  <  str.length();  i++)  {                  char  ch  =  str.charAt(i);                  for  (int  j  =  0;  j  <  searchChars.length;  j++)  {                      if  (searchChars[j]  ==  ch)  {                          return  i;                      }                  }              }              return  -­‐1;      }  
  • 19. (defn  indexed  [coll]  (map  vector  (iterate  inc  0)  coll))  
  • 20. (defn  indexed  [coll]  (map  vector  (iterate  inc  0)  coll))   (defn  index-­‐filter  [pred  coll]          (for  [[idx  elt]  (indexed  coll)  :when  (pred  elt)]              idx))  
  • 21. (defn  indexed  [coll]  (map  vector  (iterate  inc  0)  coll))   (defn  index-­‐filter  [pred  coll]          (when  pred                (for  [[idx  elt]  (indexed  coll)  :when  (pred  elt)]  idx)))   (index-­‐filter  #{a  e  i  o  o}  "The  quick  brown  fox")   -­‐>  (2  6  12  17)   (index-­‐filter  #(>  (.length  %)  3)  ["The"  "quick"  "brown"  "fox"])   -­‐>  (1  2)  
  • 22. for   doseq   if   cond   condp   partition   loop   recur   str   map   reduce   filter   defmacro   apply   comp   complement     defstruct   drop   drop-­‐last   drop-­‐while   format   iterate   juxt   map   mapcat   memoize   merge   partial   partition   partition-­‐all   re-­‐seq   reductions   reduce   remove   repeat   repeatedly  zipmap  
  • 23.   Simultaneous execution   Avoid reading; yielding inconsistent data Synchronous Asynchronous Coordinated ref   Independent atom   agent   Unshared var  
  • 24.   Generalised indirect dispatch   Dispatch on an arbitrary function of the arguments   Call sequence   Call dispatch function on args to get dispatch value   Find method associated with dispatch value   Else call default method   Else error
  • 25.   Encapsulation through closures   Polymorphism through multi-methods   Inheritance through duck-typing (defmulti  interest  :type)   (defmethod  interest  :checking  [a]  0)   (defmethod  interest  :savings  [a]  0.05)   (defmulti  service-­‐charge            (fn  [acct]  [(account-­‐level  acct)  (:tag  acct)]))   (defmethod  service-­‐charge  [::Basic  ::Checking]      [_]  25)     (defmethod  service-­‐charge  [::Basic  ::Savings]        [_]  10)   (defmethod  service-­‐charge  [::Premium  ::Checking]  [_]  0)   (defmethod  service-­‐charge  [::Premium  ::Savings]    [_]  0)  
  • 26.   A facility to extend the compiler with user code   Used to define syntactic constructs which would otherwise require primitives/built-in support (try-­‐or      (/  1  0)      (reduce  +  [1  2  3  4])      (partition  (range  10)  2)      (map  +  [1  2  3  4]))    
  • 27.   clojure.contrib.http.agent   clojure.contrib.io   clojure.contrib.json   clojure.contrib.seq-utils   clojure.contrib.pprint   clojure.contrib.string
  • 28.   Compojure   Cascalog   ClojureQL   Enlive   Incanter   Congomongo   Leiningen   Pallet   FleetDB   Many more!   clojure-hadoop
  • 29.   Clojure http://clojure.org   Clojure group http://bit.ly/clojure-group   IRC #clojure on irc.freenode.net   Source http://github.com/clojure   Wikibook http://bit.ly/clojure-wikibook