home—lects—exams—hws
D2L—breeze (snow day)
grading-guide-key
general grading guide
Some common errors, marked with greek letters (lower-case).
(See also, common proofreading marks.)
- ι (iota):
Poor indentation.
The principle is simple, across all languages:
if one line is a sub-part of another, then indent it.
If you call a function, either put the entire function call ona single line,
or put each arguments on its own line.
; good
(f a b c)
(f a
b
c)
; bad
(f a b
c)
; Horrible:
(f a
b c)
|
It is occasionally acceptable to put
two arguments on the same line if (a) they're both short,
and (b) they're related semantically:
; okay:
(overlay/align 'right 'center
(rotate -90 (triangle 20 "solid" "orange"))
(ellipse 40 20 "solid" "blue")))
|
For examples of good, readable code,
look at any code in the class notes or in the book.
- κ (kappa):
Confusing/Unclear/unhelpful comments or variable names.
An example of unhelpful commenting:
/** The lines of code below are taking in an ID and returning a boolean.
* @param id an ID.
* @return true or false
*/
static boolean isSoldByWeight( String id )
|
A more helpful description:
/** Returns whether or not a grocery-item ID is for an item which is sold by weight.
* @param An ID `number', like "1572935" or "47AGM231". Must be a valid ID.
* @return true if and only if the ID'd item is sold by weight.
*/
static boolean isSoldByWeight( String id )
|
True, it is annoying to repeat the same info twice, but often (not always)
the @return line is also a succinct overall description.
(This is a lack of a single point of control, forcing me
to have the same information cut/pasted in two places.
Really, the program which generates a web page from your
program should use the @return line as the overall description,
if an overall description isn't otherwise provided.)
- τ (tau):
Incomplete testing.
You should have test cases each method you write.
Test cases include actual inputs, and the expected result.
Some functions need more test cases than others.
-
If you include a numeric input, have a test case involving 0
(unless that makes no sense — a pizza might conceivably have
diameter 0 — but not if it's guaranteed to have a 3″ crust.)
-
Also consider fractional and negative inputs, if they make sense.
-
If your function has a String input, then include the empty
string as a test case.
-
If your code contains if statements, have a test case
to test each possible branch of that statement.
- ρ (rho):
Repeated code.
Rather than repeat code, put the common code into a method
and call the method from several places.
You might need to provide
a chunk of varying (“variant”) information,
and your new method encapsulates
that part of the task which is invariant.
The idea is that if you want to modify how the program acts in the future,
you should have to change things in only one place.
- λ (lambda):
Long-winded, verbose code:
No points taken off for this, but observe that…
-
you can condense a statement of the form
if (someCondition) {
return true;
}
else {
return false;
}
|
into the more concise
-
Similarly, if (expr == true) …
can be simplified to if (expr) ….
You can use ! (“not”) to compare against
false:
(expr == false)
is more concisely expressed as (!expr).
-
Similarly, if you use a variable to remember some result, but then only use
that result once (and on the very next line), you can probably just
omit using a variable at all. For example
SomeType someVar = someExpression;
return someVar;
|
can be tightened up to read just
If you prefer the longer versions, that's okay,
though as you get more comfortable with using values
you'll find the shorter versions more understandable.
- μ (mu)
Missing requirement:
There is a function or method requested on the homework which
you didn't provide.
(And/or, you spent a lot of time writing something which
was never actually asked for.)
Please read the handout carefully!
home—lects—exams—hws
D2L—breeze (snow day)