Difference between revisions of "Javascript1"

From FreekiWiki
Jump to navigation Jump to search
m (Added exercises, fixes)
Line 15: Line 15:
  
 
*Expressions
 
*Expressions
An expression (''EXPR'') can be:
+
**An expression (''EXPR'') can be:
** a primitive (e.g. 1)
+
*** a primitive (e.g. 1)
** a variable (e.g. x)
+
*** a variable (e.g. x)
** an operator combining smaller ''EXPR'''s (e.g. x+1, 2*(x+1))
+
*** an operator combining smaller ''EXPR'''s (e.g. x+1, 2*(x+1))
  
 
*Operators have:
 
*Operators have:
 
** keyword or symbol (''OP'')
 
** keyword or symbol (''OP'')
 
** syntax template (e.g. _ ''OP'' _)
 
** syntax template (e.g. _ ''OP'' _)
*** prefix: OP_
+
*** unary prefix: OP_
*** postfix: _OP
+
*** unary postfix: _OP
*** infix: _OP_
+
*** binary infix: _OP_
*** compound: _OP_OP_
+
*** ternary infix: _OP_OP_
 
** one or more inputs _ ("operands")
 
** one or more inputs _ ("operands")
 
** one output ("return value")
 
** one output ("return value")
Line 206: Line 206:
 
| "" || 0
 
| "" || 0
 
| 0
 
| 0
 +
|-
 +
|?:
 +
(conditional)
 +
|any
 +
|true? "yes": "no"
 +
|"yes"
 +
| any
 
|-
 
|-
 
!colspan="5"| variable assignment operators  
 
!colspan="5"| variable assignment operators  
Line 268: Line 275:
 
| 1
 
| 1
 
|}
 
|}
 
  
 
===Session 2===
 
===Session 2===

Revision as of 23:23, 13 November 2013


General Information

This course is currently running November-December 2013, Tuesdays 11:30-1:30.

Instructor: Dan Bauer (email: dsbauer at gmail)


Course Outline

Session 1

  • Firebug Console/Interpreter
  • Expressions
    • An expression (EXPR) can be:
      • a primitive (e.g. 1)
      • a variable (e.g. x)
      • an operator combining smaller EXPR's (e.g. x+1, 2*(x+1))
  • Operators have:
    • keyword or symbol (OP)
    • syntax template (e.g. _ OP _)
      • unary prefix: OP_
      • unary postfix: _OP
      • binary infix: _OP_
      • ternary infix: _OP_OP_
    • one or more inputs _ ("operands")
    • one output ("return value")
      • may be undefined
    • possible side-effects (e.g. change in variable's value)
  • Variables have:
    • a name/identifier
    • a value (initially undefined)
      • each value has a type (primitive or reference)
    • a scope
  • Other (non-expression) Statements
    • var NAME;
    • var NAME = EXPR;
    • if (EXPR) {EXPR;}
    • if (EXPR) {EXPR;} else {EXPR;}
  • Primitive Types
    • undefined
    • Number
      • same type for integers and floats (fractional)
      • special values: NaN ("not a number"), Infinity
    • String
      • wrapped in either " " or ' '
      • may contain opposite quote or other special characters
        • \t (tab)
        • \n (newline)
    • Boolean (true/false)
      • false-ish values: false,undefined,null,0,"",NaN
      • (some) true-ish values: true,1,"false","undefined","0",{} (empty object)

Some Sample Operators:

operator input type example result result type side effects
typeof NUM typeof 1 "number" STR
STR typeof "word" "string"
BOOL typeof true "boolean"
,

(sequence)

any "a", "b", "c" "c" type of

last value

(4,"3"),("two",1) 1
+

(plus)

NUM 1+1 2 NUM
+

(concatenate)

STR "1"+"1" "11" STR
mixed 1+"2" "12" STR
- * / % NUM 3-1 2 NUM
STR "3"-"1" 2
mixed "3"-1 2
< > <= >=

(comparison)

NUM 1<2 true BOOL
STR "b"<"a" false
==

(equality)

NUM 1==2 false BOOL
STR "a"=="aa" false
mixed 1=="1" true
mixed 0==false true
===

(identity)

NUM 1===2 false BOOL
STR "abc"==="abc" true
mixed 1==="1" false
mixed 1===true false
!

(not)

any !1 false BOOL
!"" true
&&

(and)

any null && "red" null first false-ish

or last input

1 && "green" "green"
||

(or)

any "yes" || null "yes" first true-ish

or last input

"" || 0 0
?:

(conditional)

any true? "yes": "no" "yes" any
variable assignment operators x is now...
=

(assignment)

any x=1 1 same as input 1
x = "blue" "blue" "blue"
+=

(incremental assignment)

NUM x=0; x+=2; 2 NUM 2
STR x="he"; x+="llo"; "hello" STR "hello"
mixed x=""; x+=2; "2" STR "2"
++

(post-increment)

NUM x=0; x++; 0 NUM 1
STR x=""; x++; 0 1
++

(pre-increment)

NUM x=0; ++x; 1 NUM 1
STR x=""; ++x; 1 1

Session 2

Nov12 in-class scratchpad

Exercises

  • Write a function to calculate, for a group of N people where everyone shakes the hand of everyone else, how many total handshakes there are.
  • Write another function to enumerate these interactions, returning a single string describing them all. People may be identified by number. For example, for N=3, it might return:

"#1 meets #2. #1 meets #3. #2 meets #3." (Hint: you may want a second "helper" function to handle a single interaction.)


  • Write a function to decide whether a given integer is prime. You may need some of these functions/operators:
    • function Math.floor(N): truncates any fractional part of a number N (i.e. returns greatest int <=N)
    • function Number.isInteger(N): returns true is N is an integer
    • modulo operator %: x%y returns 0 if x divides evenly by y


Sample Code

Nov12 in-class scratchpad