0% found this document useful (0 votes)
507 views2 pages

Scala Cheatsheet

This document provides a cheat sheet on Scala concepts including: - Every value is an object and every operation is a message send. - Variables, objects, mixins, packages, imports, default values, constants, classes, generics, inner classes, methods, operators, annotations, assignments, arrays, iteration, and selection. - It also provides references for further reading on Scala concepts.

Uploaded by

lilliput
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
507 views2 pages

Scala Cheatsheet

This document provides a cheat sheet on Scala concepts including: - Every value is an object and every operation is a message send. - Variables, objects, mixins, packages, imports, default values, constants, classes, generics, inner classes, methods, operators, annotations, assignments, arrays, iteration, and selection. - It also provides references for further reading on Scala concepts.

Uploaded by

lilliput
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 2

CHEAT SHEET

Every value is an object and every operation is a message send . PACKAGE Java style:

implicit imports: the package java.lang the package scala and the object scala.Predef import anywhere inside the client Scala file, not just at the top of the file, for scoped relevance VARIABLE form: var var_name: type = init_value;
var i : int = 0;

OBJECT concrete class instance a singleton


object RunRational extends Application { // members here }

MIXIN CLASS COMPOSITION Mixin :


trait RichIterator extends AbsIterator { def foreach(f: T => Unit) { while (hasNext) f(next) } }

package com.mycompany.mypkg

default values:

applies across the entire file scope Package "scoping" approach: curly brace delimited
package com { package tedneward { package scala { package demonstration { object App { import java.math.BigInteger // just to show nested importing def main(args : Array[String]) : Unit = { System.out.println( "Howdy, from packaged code!") args.foreach((i) => System.out.println("Got " + i) ) } } } } } }

private var somevar: T = _ // _ is a default value

default value: 0 for numeric types false for the Boolean type () for the Unit type null for all object types CONSTANT prefer val over var form: val var_name: type = init_value;
val i : int = 0;

Mixin Class Composition : Note the keyword "with" used to create a mixin composition of the parents StringIterator and RichIterator. The first parent is called the superclass of Iter, whereas the second (and every other, if present) parent is called a mixin.
object StringIteratorTest { def main(args: Array[String]) { class Iter extends StringIterator(args(0)) with RichIterator val iter = new Iter iter foreach println } }

STATIC no static members, use Singleton, see Object CLASS Every class inherits from scala.Any see http://www.scala-lang.org/node/128 2 subclass categories: scala.AnyVal scala.AnyRef form: abstract class(pName: PType1, pName2: PType2...) extends SuperClass with constructor in the class definition
class Person(name: String, age: int) extends Mammal { // secondary constructor def this(name: String) { // call the "primary" constructor this(name, 1); } // members here }

GENERIC CLASS
class Stack[T] { // members here }

Usage:

object GenericsTest extends Application { val stack = new Stack[Int] // do stuff here }

note: can also define generic methods INNER CLASS


class Graph { class Node { var connectedNodes: List[Node] = Nil def connectTo(node: Node) { if (connectedNodes.find(node.equals).isEmpty) { connectedNodes = node :: connectedNodes } } } // members here }

IMPORT form:
import p._ // imports all members of p // (this is analogous to import p.* in Java) import p.x // the member x of p import p.{x => a} // the member x of p renamed // as a import p.{x, y} // the members x and y of p import p1.p2.z // the member z of p2, // itself member of p1 import p1._, p2._ // is a shorthand for import // p1._; import p2._

usage:
object GraphTest extends Application { val g: Graph = new Graph val n1: g.Node = g.newNode val n2: g.Node = g.newNode n1.connectTo(n2) // legal val h: Graph = new Graph val n3: h.Node = h.newNode n1.connectTo(n3) // illegal! }

An example is the list-consing operator ::. where, x :: y :: zs is interpreted as x :: (y :: zs). eg.


def + (other: Complex) : Complex = { //.... }

ITERATION prefer recursion over looping while loop: same as in Java for loop:
// to is a method in Int that produces a Range object for (i <- 1 to 10 if i % 2 == 0) // the leftarrow means "assignment" in Scala System.out.println("Counting " + i)

note that a node type is prefixed with its outer instance, can't mix instances METHODS Methods are Functional Values and Functions are Objects form: def name(pName: PType1, pName2: PType2...) : RetType use override to override a method
override def toString() = "" + re + (if (im < 0) "" else "+") + im + "i"

infix operator - any single parameter method can be used :


System exit 0 Thread sleep 10

unary operators - prefix the operator name with "unary_"

i <- 1 to 10 is equivalent to: for (i <- 1.to(10)) i % 2 == 0 is a filter, optional for (val arg <- args) maps to args foreach (arg => ...)

def unary_~ : Rational = new Rational(denom, numer)

The Scala compiler will try to infer some meaning out of the "operators" that have some predetermined meaning, such as the += operator. ARRAYS arrays are classes
Array[T] a(i)

can override as contra/covariant (different return type) '=>' separates the function's argument list from its body
def re = real // method without arguments

More to come...

access as function: MAIN

OPERATORS all operators are functions on a class operators have fixed precedences and associativities: (all letters) | ^ & < > = ! : + / % * (all other special characters) Operators are usually left-associative, i.e. x + y + z is interpreted as (x + y) + z, except operators ending in colon : are treated as right-associative.

def main(args: Array[String])

return type is unit ANNOTATIONS to come ASSIGNMENT =


protected var x = 0

REFERENCES The Busy Developers' Guide to Scala series: Don't Get Thrown for a Loop, IBM developerWorks Class action, IBM developerWorks Functional programming for the object oriented, IBM developerWorks Scala Reference Manuals: An Overview of the Scala Programming Language (2. Edition, 20 pages), scalalang.org A Brief Scala Tutorial, scala-lang.org A Tour of Scala, scala-lang.org "Scala for Java programmers", A. Sundararajan's Weblog, blogs.sun.com
This work is licensed under the Creative Commons AttributionNonCommercial-ShareAlike 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ ; or, (b) send a letter to Creative Commons, 171 2nd Street, Suite 300, San Francisco, California, 94105, USA.

<val x <- xs is a generator which produces a sequence of values SELECTION The else must be present and must result in the same kind of value that the if block does
val filename = if (options.contains("configFile")) options.get("configFile") else "default.properties"

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy