Ma toute première application Scala

Ma découverte de ce langage fut un petit déclic ! On peut dire que Apache Spark a été le précurseur à tout cela bien évidemment. Pour rappel,  Scala est un langage de programmation multi-paradigme conçu à  l’École polytechnique fédérale de Lausanne, en Suisse. Elle connait actuellement un envol dans le secteur des analyse des données et le Big Data.

Il existe déjà quelques références sur toute l’historique de ce langage, que je vous invite à découvrir sur internet.

Comme tout débutant sur cette techno, Je vais commencer par écrire un petit programme qui affiche “Hello World”, un classique.

Mon environnement de développement

A ce jour, il faut au minimum Java 8 pour pouvoir développer sur Scala sur Windows. Donc si vous ne savez pas votre version Java, sur Windows, faites

java – version

Vous pouvez télécharger Java sur le lien suivant : https://www.java.com/

Apres avoir fini de télécharger et d’installer Scala, ouvrez une ligne de commande et faites

Pour voir si l’installation s’est bien passée, avec les variables environnements bien définis, faites

scala – version

scala

Si vous voyez “Scala code runner…”, l’installation s’est bien passée, sinon désinstaller et réessayer.

Maintenant que vous avez Scala, bien installé, vous pouvez commencer à jouer un peu avec quelques lignes de code !

Notepad++ n’a a ce jour pas Scala comme syntaxe prédéfini. Donc, pour pouvoir avoir les avantages liés a un éditeur de code, je vous conseille de télécharger le fichier scala.xml disponible sur le lien suivant.

<NotepadPlus>
<UserLang name="Scala" ext="scala" udlVersion="2.0">
<Settings>
<Global caseIgnored="no" allowFoldOfComments="no" forceLineCommentsAtBOL="no" foldCompact="no" />
<Prefix Keywords1="no" Keywords2="no" Keywords3="yes" Keywords4="no" Keywords5="no" Keywords6="no" Keywords7="no" Keywords8="no" />
</Settings>
<KeywordLists>
<Keywords name="Comments" id="0">00// 01 02 03/* 04*/</Keywords>
<Keywords name="Numbers, additional" id="1"></Keywords>
<Keywords name="Numbers, prefixes" id="2">0x</Keywords>
<Keywords name="Numbers, extras with prefixes" id="3">a b c d e f A B C D E F</Keywords>
<Keywords name="Numbers, suffixes" id="4">F f D d L l</Keywords>
<Keywords name="Operators1" id="5">: = =&gt; &lt;&lt;: &lt;% &gt;: # @ &#x21D2; &#x2190; | ^ &amp; &lt; &gt; ! + – * / % ; , . ( )</Keywords>
<Keywords name="Operators2" id="6"></Keywords>
<Keywords name="Folders in code1, open" id="7">{ [</Keywords>
<Keywords name="Folders in code1, middle" id="8"></Keywords>
<Keywords name="Folders in code1, close" id="9">} ]</Keywords>
<Keywords name="Folders in code2, open" id="10"></Keywords>
<Keywords name="Folders in code2, middle" id="11"></Keywords>
<Keywords name="Folders in code2, close" id="12"></Keywords>
<Keywords name="Folders in comment, open" id="13"></Keywords>
<Keywords name="Folders in comment, middle" id="14"></Keywords>
<Keywords name="Folders in comment, close" id="15"></Keywords>
<Keywords name="Keywords1" id="16">abstract case catch class def do else extends false final finally for forSome if implicit import lazy match new null object override package private protected return sealed super this throw trait try true type val var while with yield _</Keywords>
<Keywords name="Keywords2" id="17">Any AnyRef AnyVal App Application Array Boolean Byte Char Cloneable Console DelayedInit deprecated deprecatedName Double Dynamic Enumeration Equals FallbackArrayBuilding Float Function Function1 Function2 Immutable inline Int language languageFeature Long LowPriorityImplicits MatchError Mutable native noinline None Nothing NotImplementedError NotNull Null Option PartialFunction Predef Product Product1 Product2 Proxy remote Responder ScalaObject ScalaReflectionException Serializable SerialVersionUID Short Some Specializable specialized StringContext Symbol throws transient Tuple1 Tuple2 unchecked UninitializedError UninitializedFieldError Unit volatile</Keywords>
<Keywords name="Keywords3" id="18">\&apos;</Keywords>
<Keywords name="Keywords4" id="19">ArrowAssoc Class DummyImplicit Ensuring Function Manifest Map OptManifest Pair Set String Triple $scope: TopScope.type ???: NoManifest assert assume classOf identity implicitly locally manifest optManifest print printf println readBoolean readByte readChar readDouble readFloat readInt readLine readLong readShort readf readf1 readf2 readf3 require</Keywords>
<Keywords name="Keywords5" id="20">Boolean2boolean Boolean2booleanNullConflict Byte2byte Byte2byteNullConflict Character2char Character2charNullConflict Double2double Double2doubleNullConflict Float2float Float2floatNullConflict Integer2int Integer2intNullConflict Long2long Long2longNullConflict Short2short Short2shortNullConflict StringCanBuildFrom any2ArrowAssoc any2Ensuring any2stringadd any2stringfmt arrayToCharSequence augmentString boolean2Boolean boolean2BooleanConflict booleanArrayOps booleanWrapper byte2Byte byte2ByteConflict byteArrayOps byteWrapper char2Character char2CharacterConflict charArrayOps charWrapper conforms double2Double double2DoubleConflict doubleArrayOps doubleWrapper exceptionWrapper fallbackStringCanBuildFrom float2Float float2FloatConflict floatArrayOps floatWrapper genericArrayOps genericWrapArray int2Integer int2IntegerConflict intArrayOps intWrapper long2Long long2LongConflict longArrayOps longWrapper refArrayOps seqToCharSequence short2Short short2ShortConflict shortArrayOps shortWrapper tuple2ToZippedOps tuple3ToZippedOps unaugmentString unitArrayOps unwrapString wrapBooleanArray wrapByteArray wrapCharArray wrapDoubleArray wrapFloatArray wrapIntArray wrapLongArray wrapRefArray wrapShortArray wrapString wrapUnitArray</Keywords>
<Keywords name="Keywords6" id="21"></Keywords>
<Keywords name="Keywords7" id="22"></Keywords>
<Keywords name="Keywords8" id="23"></Keywords>
<Keywords name="Delimiters" id="24">00&quot; 01\ 02&quot; 03` 04 05` 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23</Keywords>
</KeywordLists>
<Styles>
<WordsStyle name="DEFAULT" styleID="0" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="COMMENTS" styleID="1" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="256" />
<WordsStyle name="LINE COMMENTS" styleID="2" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="NUMBERS" styleID="3" fgColor="8080FF" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="KEYWORDS1" styleID="4" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="1" nesting="0" />
<WordsStyle name="KEYWORDS2" styleID="5" fgColor="0080FF" bgColor="FFFFFF" fontName="" fontStyle="1" nesting="0" />
<WordsStyle name="KEYWORDS3" styleID="6" fgColor="808080" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="KEYWORDS4" styleID="7" fgColor="0080C0" bgColor="FFFFFF" fontName="" fontStyle="1" nesting="0" />
<WordsStyle name="KEYWORDS5" styleID="8" fgColor="0080C0" bgColor="FFFF80" fontName="" fontStyle="3" nesting="0" />
<WordsStyle name="KEYWORDS6" styleID="9" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="KEYWORDS7" styleID="10" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="KEYWORDS8" styleID="11" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="OPERATORS" styleID="12" fgColor="0000A0" bgColor="FFFFFF" fontName="" fontStyle="1" nesting="0" />
<WordsStyle name="FOLDER IN CODE1" styleID="13" fgColor="0000A0" bgColor="FFFFFF" fontName="" fontStyle="1" nesting="0" />
<WordsStyle name="FOLDER IN CODE2" styleID="14" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="FOLDER IN COMMENT" styleID="15" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS1" styleID="16" fgColor="808080" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS2" styleID="17" fgColor="808000" bgColor="FFFFFF" fontName="" fontStyle="2" nesting="0" />
<WordsStyle name="DELIMITERS3" styleID="18" fgColor="808040" bgColor="FFFFFF" fontName="" fontStyle="2" nesting="0" />
<WordsStyle name="DELIMITERS4" styleID="19" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS5" styleID="20" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS6" styleID="21" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS7" styleID="22" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
<WordsStyle name="DELIMITERS8" styleID="23" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" nesting="0" />
</Styles>
</UserLang>
</NotepadPlus>
view raw scala.xml hosted with ❤ by GitHub

Sur Notepad++, définissez le langage Scala en suivant les étapes suivantes.

Après l’import, vous devriez avoir un message “Import réussi” ou ’’Import Successfull’’

Maintenant on va commencer à pouvoir jouer un peu avec un petit program “Hello World”

[code language="scala"] object HelloWorld {
     def main(args: Array[String]) {
           println("Hello, world!")
               }
             } [/code]

Sur notepad++, definissez scala comme langage.

Maintenant vous avez la syntaxe qui est correctement défini.

scala6

Sauvegardez le fichier dans un répertoire

N’oubliez pas l’extension      ” .scala  “

Sur ligne de commande, lancez la compilation en exécutant la commande suivante.

scalac HelloWorld.scala

Ensuite, executez le program en lancant

scala classpath . HelloWorld

scala8.pngFélicitations, vous avez réussi à compiler votre premier programme Scala !

Il vous reste maintenant à commencer à explorer toutes les facettes intéressantes de ce langage, par example  son interaction facile avec du code Java. Toutes les classes de java.lang sont importes par défaut. Le fait que Scala offre de reels capacités d’interopérabilité avec Java font qu’il n’y ai pas besoin d’implementer des classes équivalentes dans les bibiliotheques Scala. Nous pouvons simplement importer les packages java correspondants.

[code language="scala"]
import java.util.{Date, Locale}
import java.text.DateFormat
import java.text.DateFormat._

object AffichageDateFrancais {
def main(args: Array[String]) {
val now = new Date
val df = getDateInstance(LONG, Locale.FRANCE)
println(df format now)
}
}
[/code]

Ensuite, recompilez et ré-exécuter :-

scalac AffichageDateFrancais.scala

scala -classpath . AffichageDateFrancais

scala10

A bientôt !

Laisser un commentaire

%d blogueurs aiment cette page :