SlideShare una empresa de Scribd logo
1 de 44
Polyglot  Programming  in the JVM Or how I Learned to Stop Worrying and  Love  the JVM Andres Almiray | Canoo Engineering AG
About the speaker ,[object Object],[object Object],[object Object],[object Object],[object Object]
Some facts about Java ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
However... ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],late 2010 early 2011?
More so... ,[object Object],[object Object],[object Object]
Truth or myth? ,[object Object]
Truth or myth? ,[object Object]
Truth or myth? ,[object Object]
The  JVM  is a  great  place to work however Java makes it  painful  sometimes...
What can we do about it?!
 
Disclaimer (this is not a bash-the-other-languages talk)
Reduced Verbosity
Standard Beans p ublic   class  Bean { private  String name; public  String getName() { return  name; } public   void  setName(String name) { this .name = name; } }
Standard Beans p ublic   class  Bean { private  String name; public  String getName() { return  name; } public   void  setName(String name) { this .name = name; } }
Standard Beans p ublic   class  Bean { private   String name ; public  String getName() { return  name; } public   void  setName(String name) { this .name = name; } }
Standard Beans class  Bean { String name }
Standard Beans class  Bean( var  name:String) class  Bean { @scala.reflect.BeanProperty var  name: String }
Standard Beans ( defstruct  Bean :name)
Closures (or Functions) public   i nterface  Adder { int add(int a, int b); } p ublic   class  MyAdder implements Adder { public  int add(int a, int b) { return  a + b; } }
Closures (or Functions) // JDK7 Lambdas proposal #(int a, int b)( a + b ) #(int a, int b) {  return a + b;  }
Closures (or Functions) d ef  adder = { a , b ->  a + b  }
Closures (or Functions) val  adder = (a:Int, b:Int) =>  a + b
Closures (or Functions) ( defn  adder [a b] ( + a b ))
Enhanced switch c har  letterGrade(int grade) { if (grade >= 0 && grade <= 60)  return   ‘F‘; if (grade > 60 && grade <= 70)  return   ‘D‘; if (grade > 70 && grade <= 80)  return   ‘C‘; if (grade > 80 && grade <= 90)  return   ‘B‘; if (grade > 90 && grade <= 100)  return  ‘A‘; throw new  IllegalArgumentException(“invalid grade “+grade); }
Enhanced Switch d ef  letterGrade(grade) { switch (grade) { case  90..100:  return   ‘A‘ case  80..<90:  return   ‘B‘ case  70..<80:  return   ‘C‘ case  60..<70:  return   ‘D‘ case  0..<60:  return   ‘F‘ case  ~&quot;[ABCDFabcdf]&quot;:  return   grade.toUpperCase() } throw new  IllegalArgumentException(‘invalid grade ‘+grade) }
Enhanced Switch val  VALID_GRADES = Set(&quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;D&quot;, &quot;F&quot;) def  letterGrade(value: Any):String = value match { case  x:Int  if  (90 to 100).contains(x) => &quot;A&quot; case  x:Int  if  (80 to 90).contains(x) => &quot;B&quot; case  x:Int  if  (70 to 80).contains(x) => &quot;C&quot; case  x:Int  if  (60 to 70).contains(x) => &quot;D&quot; case  x:Int  if  (0 to 60).contains(x) => &quot;F&quot; case  x:String  if  VALID_GRADES(x.toUpperCase) => x.toUpperCase() }
Enhanced Switch ( defn  letter-grade [grade] (cond (in grade 90 100) &quot;A&quot; (in grade 80 90) &quot;B&quot; (in grade 70 80) &quot;C&quot; (in grade 60 70) &quot;D&quot; (in grade 0 60) &quot;F&quot; (re-find #&quot;[ABCDFabcdf]&quot; grade) (.toUpperCase grade)))
Java Interoperability
All of these are true ,[object Object],[object Object],[object Object],[object Object]
Ok, so...  What else can these languages do?
All of them  ,[object Object],[object Object],[object Object],[object Object],[object Object]
Groovy ,[object Object],[object Object],[object Object],[object Object]
Scala ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Clojure ,[object Object],[object Object],[object Object],[object Object]
Demo
Other places where you‘ll find Polyglot Programming
Web app development ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Next-Gen datastores (NoSQL) ,[object Object],[object Object],[object Object],[object Object]
Build systems ,[object Object],[object Object],[object Object]
Parting thoughts ,[object Object],[object Object],[object Object],[object Object]
Resources
Q & A
Thank you!

Más contenido relacionado

La actualidad más candente

Introduction To Groovy
Introduction To GroovyIntroduction To Groovy
Introduction To Groovy
manishkp84
 
Swift and Kotlin Presentation
Swift and Kotlin PresentationSwift and Kotlin Presentation
Swift and Kotlin Presentation
Andrzej Sitek
 
functional groovy
functional groovyfunctional groovy
functional groovy
Paul King
 
Kotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developersKotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developers
Bartosz Kosarzycki
 

La actualidad más candente (20)

Introduction To Groovy
Introduction To GroovyIntroduction To Groovy
Introduction To Groovy
 
Introduction to kotlin + spring boot demo
Introduction to kotlin + spring boot demoIntroduction to kotlin + spring boot demo
Introduction to kotlin + spring boot demo
 
Swift and Kotlin Presentation
Swift and Kotlin PresentationSwift and Kotlin Presentation
Swift and Kotlin Presentation
 
Scala vs Ruby
Scala vs RubyScala vs Ruby
Scala vs Ruby
 
functional groovy
functional groovyfunctional groovy
functional groovy
 
Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...
Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...
Groovy DSLs, from Beginner to Expert - Guillaume Laforge and Paul King - Spri...
 
Taking Kotlin to production, Seriously
Taking Kotlin to production, SeriouslyTaking Kotlin to production, Seriously
Taking Kotlin to production, Seriously
 
Kotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projectsKotlin Developer Starter in Android projects
Kotlin Developer Starter in Android projects
 
Xtext Webinar
Xtext WebinarXtext Webinar
Xtext Webinar
 
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
JavaFX Your Way: Building JavaFX Applications with Alternative LanguagesJavaFX Your Way: Building JavaFX Applications with Alternative Languages
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
 
Coding for Android on steroids with Kotlin
Coding for Android on steroids with KotlinCoding for Android on steroids with Kotlin
Coding for Android on steroids with Kotlin
 
Clean coding-practices
Clean coding-practicesClean coding-practices
Clean coding-practices
 
Develop your next app with kotlin @ AndroidMakersFr 2017
Develop your next app with kotlin @ AndroidMakersFr 2017Develop your next app with kotlin @ AndroidMakersFr 2017
Develop your next app with kotlin @ AndroidMakersFr 2017
 
Introduction To Groovy 2005
Introduction To Groovy 2005Introduction To Groovy 2005
Introduction To Groovy 2005
 
Little Helpers for Android Development with Kotlin
Little Helpers for Android Development with KotlinLittle Helpers for Android Development with Kotlin
Little Helpers for Android Development with Kotlin
 
Java Full Throttle
Java Full ThrottleJava Full Throttle
Java Full Throttle
 
Kotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developersKotlin advanced - language reference for android developers
Kotlin advanced - language reference for android developers
 
Scala vs Java 8 in a Java 8 World
Scala vs Java 8 in a Java 8 WorldScala vs Java 8 in a Java 8 World
Scala vs Java 8 in a Java 8 World
 
Introduction to kotlin
Introduction to kotlinIntroduction to kotlin
Introduction to kotlin
 
Kotlin @ Coupang Backend 2017
Kotlin @ Coupang Backend 2017Kotlin @ Coupang Backend 2017
Kotlin @ Coupang Backend 2017
 

Similar a Polyglot Programming in the JVM

Polyglot Programming @ Jax.de 2010
Polyglot Programming @ Jax.de 2010Polyglot Programming @ Jax.de 2010
Polyglot Programming @ Jax.de 2010
Andres Almiray
 
Evolving The Java Language
Evolving The Java LanguageEvolving The Java Language
Evolving The Java Language
QConLondon2008
 
Polyglot Programming @ CONFESS
Polyglot Programming @ CONFESSPolyglot Programming @ CONFESS
Polyglot Programming @ CONFESS
Andres Almiray
 
GTAC Boosting your Testing Productivity with Groovy
GTAC Boosting your Testing Productivity with GroovyGTAC Boosting your Testing Productivity with Groovy
GTAC Boosting your Testing Productivity with Groovy
Andres Almiray
 
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with GroovyBoosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
James Williams
 

Similar a Polyglot Programming in the JVM (20)

Polyglot Programming @ Jax.de 2010
Polyglot Programming @ Jax.de 2010Polyglot Programming @ Jax.de 2010
Polyglot Programming @ Jax.de 2010
 
Polyglot Programming in the JVM - 33rd Degree
Polyglot Programming in the JVM - 33rd DegreePolyglot Programming in the JVM - 33rd Degree
Polyglot Programming in the JVM - 33rd Degree
 
Polyglot Programming in the JVM - Øredev
Polyglot Programming in the JVM - ØredevPolyglot Programming in the JVM - Øredev
Polyglot Programming in the JVM - Øredev
 
Evolving The Java Language
Evolving The Java LanguageEvolving The Java Language
Evolving The Java Language
 
Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007Groovy Update - JavaPolis 2007
Groovy Update - JavaPolis 2007
 
What's New in Groovy 1.6?
What's New in Groovy 1.6?What's New in Groovy 1.6?
What's New in Groovy 1.6?
 
2007 09 10 Fzi Training Groovy Grails V Ws
2007 09 10 Fzi Training Groovy Grails V Ws2007 09 10 Fzi Training Groovy Grails V Ws
2007 09 10 Fzi Training Groovy Grails V Ws
 
Svcc Groovy Testing
Svcc Groovy TestingSvcc Groovy Testing
Svcc Groovy Testing
 
Polyglot Programming @ CONFESS
Polyglot Programming @ CONFESSPolyglot Programming @ CONFESS
Polyglot Programming @ CONFESS
 
GTAC Boosting your Testing Productivity with Groovy
GTAC Boosting your Testing Productivity with GroovyGTAC Boosting your Testing Productivity with Groovy
GTAC Boosting your Testing Productivity with Groovy
 
Introduction to Oracle Groovy
Introduction to Oracle GroovyIntroduction to Oracle Groovy
Introduction to Oracle Groovy
 
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with GroovyBoosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
 
Javaone2008 Bof 5101 Groovytesting
Javaone2008 Bof 5101 GroovytestingJavaone2008 Bof 5101 Groovytesting
Javaone2008 Bof 5101 Groovytesting
 
Clojure And Swing
Clojure And SwingClojure And Swing
Clojure And Swing
 
Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008
 
Real life-coffeescript
Real life-coffeescriptReal life-coffeescript
Real life-coffeescript
 
Go 1.10 Release Party - PDX Go
Go 1.10 Release Party - PDX GoGo 1.10 Release Party - PDX Go
Go 1.10 Release Party - PDX Go
 
Groovy Basics
Groovy BasicsGroovy Basics
Groovy Basics
 
Kotlin Language Features - A Java comparison
Kotlin Language Features - A Java comparisonKotlin Language Features - A Java comparison
Kotlin Language Features - A Java comparison
 
Eclipsecon08 Introduction To Groovy
Eclipsecon08 Introduction To GroovyEclipsecon08 Introduction To Groovy
Eclipsecon08 Introduction To Groovy
 

Más de Andres Almiray

Más de Andres Almiray (20)

Creando, creciendo, y manteniendo una comunidad de codigo abierto
Creando, creciendo, y manteniendo una comunidad de codigo abiertoCreando, creciendo, y manteniendo una comunidad de codigo abierto
Creando, creciendo, y manteniendo una comunidad de codigo abierto
 
Liberando a produccion con confianza
Liberando a produccion con confianzaLiberando a produccion con confianza
Liberando a produccion con confianza
 
Liberando a produccion con confidencia
Liberando a produccion con confidenciaLiberando a produccion con confidencia
Liberando a produccion con confidencia
 
OracleDB Ecosystem for Java Developers
OracleDB Ecosystem for Java DevelopersOracleDB Ecosystem for Java Developers
OracleDB Ecosystem for Java Developers
 
Softcon.ph - Maven Puzzlers
Softcon.ph - Maven PuzzlersSoftcon.ph - Maven Puzzlers
Softcon.ph - Maven Puzzlers
 
Maven Puzzlers
Maven PuzzlersMaven Puzzlers
Maven Puzzlers
 
Oracle Database Ecosystem for Java Developers
Oracle Database Ecosystem for Java DevelopersOracle Database Ecosystem for Java Developers
Oracle Database Ecosystem for Java Developers
 
JReleaser - Releasing at the speed of light
JReleaser - Releasing at the speed of lightJReleaser - Releasing at the speed of light
JReleaser - Releasing at the speed of light
 
Building modular applications with the Java Platform Module System and Layrry
Building modular applications with the Java Platform Module System and LayrryBuilding modular applications with the Java Platform Module System and Layrry
Building modular applications with the Java Platform Module System and Layrry
 
Going Reactive with g rpc
Going Reactive with g rpcGoing Reactive with g rpc
Going Reactive with g rpc
 
Building modular applications with JPMS and Layrry
Building modular applications with JPMS and LayrryBuilding modular applications with JPMS and Layrry
Building modular applications with JPMS and Layrry
 
Taking Micronaut out for a spin
Taking Micronaut out for a spinTaking Micronaut out for a spin
Taking Micronaut out for a spin
 
Apache Groovy's Metaprogramming Options and You
Apache Groovy's Metaprogramming Options and YouApache Groovy's Metaprogramming Options and You
Apache Groovy's Metaprogramming Options and You
 
What I wish I knew about Maven years ago
What I wish I knew about Maven years agoWhat I wish I knew about Maven years ago
What I wish I knew about Maven years ago
 
What I wish I knew about maven years ago
What I wish I knew about maven years agoWhat I wish I knew about maven years ago
What I wish I knew about maven years ago
 
The impact of sci fi in tech
The impact of sci fi in techThe impact of sci fi in tech
The impact of sci fi in tech
 
Gradle Ex Machina - Devoxx 2019
Gradle Ex Machina - Devoxx 2019Gradle Ex Machina - Devoxx 2019
Gradle Ex Machina - Devoxx 2019
 
Creating Better Builds with Gradle
Creating Better Builds with GradleCreating Better Builds with Gradle
Creating Better Builds with Gradle
 
Interacting with the Oracle Cloud Java SDK with Gradle
Interacting with the Oracle Cloud Java SDK with GradleInteracting with the Oracle Cloud Java SDK with Gradle
Interacting with the Oracle Cloud Java SDK with Gradle
 
Gradle ex-machina
Gradle ex-machinaGradle ex-machina
Gradle ex-machina
 

Último

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Último (20)

The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 

Polyglot Programming in the JVM

  • 1. Polyglot Programming in the JVM Or how I Learned to Stop Worrying and Love the JVM Andres Almiray | Canoo Engineering AG
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9. The JVM is a great place to work however Java makes it painful sometimes...
  • 10. What can we do about it?!
  • 11.  
  • 12. Disclaimer (this is not a bash-the-other-languages talk)
  • 14. Standard Beans p ublic class Bean { private String name; public String getName() { return name; } public void setName(String name) { this .name = name; } }
  • 15. Standard Beans p ublic class Bean { private String name; public String getName() { return name; } public void setName(String name) { this .name = name; } }
  • 16. Standard Beans p ublic class Bean { private String name ; public String getName() { return name; } public void setName(String name) { this .name = name; } }
  • 17. Standard Beans class Bean { String name }
  • 18. Standard Beans class Bean( var name:String) class Bean { @scala.reflect.BeanProperty var name: String }
  • 19. Standard Beans ( defstruct Bean :name)
  • 20. Closures (or Functions) public i nterface Adder { int add(int a, int b); } p ublic class MyAdder implements Adder { public int add(int a, int b) { return a + b; } }
  • 21. Closures (or Functions) // JDK7 Lambdas proposal #(int a, int b)( a + b ) #(int a, int b) { return a + b; }
  • 22. Closures (or Functions) d ef adder = { a , b -> a + b }
  • 23. Closures (or Functions) val adder = (a:Int, b:Int) => a + b
  • 24. Closures (or Functions) ( defn adder [a b] ( + a b ))
  • 25. Enhanced switch c har letterGrade(int grade) { if (grade >= 0 && grade <= 60) return ‘F‘; if (grade > 60 && grade <= 70) return ‘D‘; if (grade > 70 && grade <= 80) return ‘C‘; if (grade > 80 && grade <= 90) return ‘B‘; if (grade > 90 && grade <= 100) return ‘A‘; throw new IllegalArgumentException(“invalid grade “+grade); }
  • 26. Enhanced Switch d ef letterGrade(grade) { switch (grade) { case 90..100: return ‘A‘ case 80..<90: return ‘B‘ case 70..<80: return ‘C‘ case 60..<70: return ‘D‘ case 0..<60: return ‘F‘ case ~&quot;[ABCDFabcdf]&quot;: return grade.toUpperCase() } throw new IllegalArgumentException(‘invalid grade ‘+grade) }
  • 27. Enhanced Switch val VALID_GRADES = Set(&quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;D&quot;, &quot;F&quot;) def letterGrade(value: Any):String = value match { case x:Int if (90 to 100).contains(x) => &quot;A&quot; case x:Int if (80 to 90).contains(x) => &quot;B&quot; case x:Int if (70 to 80).contains(x) => &quot;C&quot; case x:Int if (60 to 70).contains(x) => &quot;D&quot; case x:Int if (0 to 60).contains(x) => &quot;F&quot; case x:String if VALID_GRADES(x.toUpperCase) => x.toUpperCase() }
  • 28. Enhanced Switch ( defn letter-grade [grade] (cond (in grade 90 100) &quot;A&quot; (in grade 80 90) &quot;B&quot; (in grade 70 80) &quot;C&quot; (in grade 60 70) &quot;D&quot; (in grade 0 60) &quot;F&quot; (re-find #&quot;[ABCDFabcdf]&quot; grade) (.toUpperCase grade)))
  • 30.
  • 31. Ok, so... What else can these languages do?
  • 32.
  • 33.
  • 34.
  • 35.
  • 36. Demo
  • 37. Other places where you‘ll find Polyglot Programming
  • 38.
  • 39.
  • 40.
  • 41.
  • 43. Q & A