Computers have many senses -- keyboard, mouse, network card, camera, joystick, etc. Collectively, these are called INPUT.
Computers can also express themselves in many ways -- text, graphics, sound, networking, printing, etc. Collectively, these are called OUTPUT.
Input and Output together are called I/O.
the only part of your laptop that is really a computer is the CPU and the RAM; all the other parts (keyboard, trackpad, display, disk drive, etc.) are technically I/O devices
In JavaScript,
console.log
means "print a line to the terminal"In NodeJS,
process.stdin
means "input coming from the terminal"process.stdin.once('data', (chunk) => { console.log(chunk.toString()) } )
The weirdness is explained on the next slide!
process.stdin.once('data',
(chunk) => { console.log(chunk.toString()) }
)
once
is a function that takes two parameters, and its second parameter is another function
phrase | meaning |
---|---|
process.stdin |
hey terminal input, |
.once('data', ... )
|
when you get some data, |
(chunk) |
please name it chunk
|
=> |
and send it to |
{ ... }
|
this block of code |
console.log(chunk.toString()) |
convert it to a string and print it to the terminal |
The previous one-liner code is equivalent to this:
function printLine(chunk) {
console.log(chunk)
}
process.stdin.once('data', printLine);
The printLine
function itself is called a callback
(since you are asking the I/O device to call you back when it receives input).
hello.js
in your text editorChange it to contain the following code:
console.log("What is your name?");
process.stdin.once('data', (chunk) => {
let name = chunk.toString();
console.log("Hello, " + name + "!");
});
Save the file and switch back to the terminal
Run the program using node hello.js
Type in your name and press the Return key (also called Enter)
What happens? Is this what you expected?
Uh-oh! We've got trouble... what is that exclamation point doing way down there?
The first thing to do is DON'T PANIC!
You are totally going to figure this out.
And even if you don't, you haven't actually broken anything.
In fact, it's really hard to break a computer just by typing, so stay calm.
trim
to a string, it will remove all SPACES and NEWLINES from both ends console.log("What is your name?");
process.stdin.once('data', (chunk) => {
let name = chunk.toString().trim();
console.log("Hello, " + name + "!");
});
console.log("What is your name?");
process.stdin.once('data', (chunk) => {
let name = chunk.toString().trim();
console.log("Hello, " + name + "!");
process.exit();
});
Note that:
process.exit
uses the same process
object as process.stdin
process.exit()
must be inside the callback
Hint: remember slice
from the Strings lesson?
readline
readline
makes it easier to read lines, naturally :-)Warning: this code uses features we have not yet covered! Copy and paste it verbatim during the codealong below, and don't worry if it doesn't make much sense yet.
To use readline
, include the following lines in the top of your source file:
const readline = require('readline');
const readlineInterface = readline.createInterface(process.stdin, process.stdout);
function ask(questionText) {
return new Promise((resolve, reject) => {
readlineInterface.question(questionText, resolve);
});
}
This is called "boilerplate code" -- you don't need to fully understand it before using it.
code | explanation |
---|---|
const readline = require('readline'); |
load the readline package and name it readline
|
const readlineInterface = readline.createInterface({...}) |
create an interface to readline using the following settings: |
process.stdin, |
for input, use the standard input stream (i.e. terminal keyboard input) |
process.stdout |
for output, use the standard output stream (i.e. terminal console output) |
function ask(questionText) {...} |
a function named ask that uses the Promise API to asynchronously ask a question and wait for a reply |
(We will cover the Promise API in much more detail later; for now, all you really need to know is that Promises allow us to use async
and await
in the next slide.)
Codealong time! Please follow along with the instructor and enter this code into a file named quest.js
:
const readline = require('readline');
const readlineInterface = readline.createInterface(process.stdin, process.stdout);
function ask(questionText) {
return new Promise((resolve, reject) => {
readlineInterface.question(questionText, resolve);
});
}
start();
async function start() {
let name = await ask('What is your name? ');
let quest = await ask('What is your quest? ');
let color = await ask('What is your favorite color? ');
console.log('Hello ' + name + '! ' +
'Good luck with ' + quest + ', ' +
'and here is a ' + color + ' flower for you.');
process.exit();
}
node quest.js
async
/await
laterasync
and await
:1. `await` means "wait for the following thing to happen"
2. when you use `await` inside a function, you must use `async` to define that function
WARNING:
async
functions don't play nicely withfor
loops! (Fortunately, there are other ways to loop that do work well.)
name.js
that asks two things:
Then it says hello to the user by their full name.
Run the program by typing node name.js
on the command line.
You just wrote a program!
You are now officially a coder. HIGH FIVE!
name.js
so it also prints the number of characters in the user's name.For instance:
What is your first name? Grace
What is your last name? Hopper
Hello, Grace Hopper!
Your name is 11 characters long.
You may now start on the Guess the Number project.
(You will probably also need to learn about logic and loops to get it working, so don't be afraid to read ahead and to ask for help.)
/