Lesson 3: Contracts, Domain, and Range


Contracts provide a way for students to better understand and discuss functions. Through this lesson, students will look at known functions and come up with the contracts that describe those functions.


Getting Started



Anchor Standard

Common Core Math Standards

  • F.IF.1 - Understand that a function from one set (called the domain) to another set (called the range) assigns to each element of the domain exactly one element of the range. If f is a function and x is an element of its domain, then f(x) denotes the output of f corresponding to the input x. The graph of f is the graph of the equation y = f(x).


Students will be able to:

  • Describe a function in terms of its name, domain, and range.
  • Create contracts for arithmetic and image-producing functions.


Heads Up! Please make a copy of any documents you plan to share with students.

For the Teacher

For the Students


  • Contract - A statement of the name, domain, and range of a function.
  • Domain - The type of data that a function expects.
  • Range - The type of data that a function produces.


Report a Bug

Teaching Guide

Getting Started

What's in a Function?

You’ve already seen several functions that take in two Numbers, such as +, and -. Other functions like "star", take in a Number and two Strings. Different functions take in different inputs, and we need a way to keep track of the requirements for each function.

  • What does the '+' function do?
    • What does it take as input?
    • What does it return as output?
  • How about the 'triangle' function?
  • What do these different functions have in common?

Let's look at a simple way to describe any function, it's called a "contract"

  • What is a Contract?
    • A formal agreement
    • A description of expected behavior
  • What do Contracts tell us?
    • What a function should do
    • What inputs a function needs
    • What a function returns

Encourage students to think about contracts in the real world. What purpose do they serve? If a contract is signed, do we expect it to be followed?

Contracts have three distinct parts

  1. Name
  2. Domain
  3. Range

The Name of a function briefly describes what the function does.

The Domain of a function is the data that the function expects.

The Range of a function is the data that the function produces.

By keeping a list of all the functions in a language, and their Domains, programmers can easily look up how each function is used. However, it’s also important to keep track of what each function produces! For example, a program wouldn’t use "star" if they were trying to produce a Number, because star only produces Images.

Domains and Ranges help programmers write better code, by preventing silly mistakes and giving themselves hints about what to do next. A programmer who wants to use "star" can look up the Domain and immediately know that the first input has to be a Number (like 100), without having to remember it each time. Instead of writing a single value there, a programmer could write a whole expression, like (25 * 4). We know this code will return an appropriate value (Number) by looking at the Range for *; therefore, the result of * can be used in place of any Number value.

When programmers write down the Domains and Ranges of each function, they write what are called contracts, to keep track of what each function needs.


Keep up your Contracts

As you continue programming, make sure that you document a contract for every new function you encounter or write. In the next unit, you’ll learn how to create your own functions to save work in writing expressions (this will turn out to be an essential part of writing a game). You’ll also start customizing your game with images for the elements in your game design.


Reading Contracts

Let's look at a few example contracts - for each contract we'll identify the Name, Domain, and Range

  • +: Number Number -> Number
  • add function
  • triangle: Number String String -> Image
  • triangle function
  • rotate: Number Image -> Image
  • rotate function

Writing Contracts

Let's see if we can come up with contracts for some of the functions you've already seen. You'll want to make sure that you've got your Contract Log - Worksheet, as this is where you'll keep a running document of all contracts you write - both for existing functions and ones of your own creation.

  • We'll start with contracts for simple arithmetic functions
  • +, -, *, /

Those were pretty easy as arithmetic functions only deal in Numbers. When it comes to writing functions that deal with multiple data types, looking at the Evaluation Block can give us some helpful clues.

  • The Name of each function is at the top
  • There will be a slot for each Domain element
  • The color of each slot tells you Domain type
  • The color of the whole block tells you Range
  • Color codes: Number String Image

Lesson Tip

Common mistakes when students first write down contracts include: writing values (such as "red") instead of types (such as "String") and forgetting arguments. Read your students’ contracts carefully, as they often indicate misconceptions that will persist and affect them later on.

Display each of the following Evaluation Blocks and ask students:

  • What is the Name of this function?
  • What is the Domain of this function?
  • What is the Range of this function?
  • Add this function's contract to your reference

rectangle function
string-append function
text function

  • Levels
  • 1
  • (click tabs to see student view)
View on Code Studio

Student Instructions

Standards Alignment

View full course alignment

Common Core Math Standards

EE - Expressions And Equations
  • 6.EE.9 - Use variables to represent two quantities in a real-world problem that change in relationship to one another; write an equation to express one quantity, thought of as the dependent variable, in terms of the other quantity, thought of as the independent va
  • 7.EE.4 - Use variables to represent quantities in a real-world or mathematical problem, and construct simple equations and inequalities to solve problems by reasoning about the quantities.
F - Functions
  • 8.F.1 - Understand that a function is a rule that assigns to each input exactly one output. The graph of a function is the set of ordered pairs consisting of an input and the corresponding output.1
  • 8.F.2 - Compare properties of two functions each represented in a different way (algebraically, graphically, numerically in tables, or by verbal descriptions). For example, given a linear function represented by a table of values and a linear function represented
IF - Interpreting Functions
  • F.IF.1 - Understand that a function from one set (called the domain) to another set (called the range) assigns to each element of the domain exactly one element of the range. If f is a function and x is an element of its domain, then f(x) denotes the output of f c
  • F.IF.2 - Use function notation, evaluate functions for inputs in their domains, and interpret statements that use function notation in terms of a context.
  • F.IF.3 - Recognize that sequences are functions, sometimes defined recursively, whose domain is a subset of the integers. For example, the Fibonacci sequence is defined recursively by f(0) = f(1) = 1, f(n+1) = f(n) + f(n-1) for n ≥ 1.
MP - Math Practices
  • MP.1 - Make sense of problems and persevere in solving them
  • MP.2 - Reason abstractly and quantitatively
  • MP.3 - Construct viable arguments and critique the reasoning of others
  • MP.4 - Model with mathematics
  • MP.5 - Use appropriate tools strategically
  • MP.6 - Attend to precision
  • MP.7 - Look for and make use of structure
  • MP.8 - Look for and express regularity in repeated reasoning
NS - The Number System
  • 6.NS.8 - Solve real-world and mathematical problems by graphing points in all four quadrants of the coordinate plane. Include use of coordinates and absolute value to find distances between points with the same first coordinate or the same second coordinate.
OA - Operations And Algebraic Thinking
  • 5.OA.1 - Use parentheses, brackets, or braces in numerical expressions, and evaluate expressions with these symbols.
  • 5.OA.2 - Write simple expressions that record calculations with numbers, and interpret numerical expressions without evaluating them. For example, express the calculation “add 8 and 7, then multiply by 2” as 2 × (8 + 7). Recognize that 3 × (18932 + 921) is three t
Q - Quantities
  • N.Q.1 - Use units as a way to understand problems and to guide the solution of multi-step problems; choose and interpret units consistently in formulas; choose and interpret the scale and the origin in graphs and data displays.
  • N.Q.2 - Define appropriate quantities for the purpose of descriptive modeling.
SSE - Seeing Structure In Expressions
  • A.SSE.1 - Interpret expressions that represent a quantity in terms of its context.
  • A.SSE.2 - Use the structure of an expression to identify ways to rewrite it. For example, see x4 – y4 as (x2)2 – (y2)2, thus recognizing it as a difference of squares that can be factored as (x2 – y2)(x2 + y2).