1. 如何調(diào)試程序
a. 語法錯(cuò)誤
語法錯(cuò)誤指的是不符合程序語言的語法,這樣的程序無法執(zhí)行
const draw = function(l) {
//變量len未定義
len = l + 20
log('draw, len', len)
forward(len)
}
draw(100)
//運(yùn)行結(jié)果:
運(yùn)行時(shí)有錯(cuò)誤產(chǎn)生,函數(shù)調(diào)用情況:
C:\Users\jixia\Documents\快編程\lesson03\lesson.gua | 第 161 行 | 全局
draw(100)
C:\Users\jixia\Documents\快編程\lesson03\lesson.gua | 第 156 行 | draw
len = l + 20
變量未定義: <len>
b. 邏輯錯(cuò)誤
邏輯錯(cuò)誤指的是程序可以運(yùn)行缘缚,但是得到的不是預(yù)期的結(jié)果
const draw = function(l) {
//要打印變量l的值料饥,錯(cuò)寫成數(shù)字1
log('draw, l', 1)
forward(1)
}
draw(100)
//運(yùn)行結(jié)果:
draw, l 1 //預(yù)期結(jié)果為100
c. 調(diào)試程序的兩個(gè)難點(diǎn)
1.程序的運(yùn)行路徑你不知道,要想去辦法讓它顯示出來
- 程序的運(yùn)行狀態(tài)(變量的值)你不知道届案,要去看到它
PS:因此可以使用log()來進(jìn)行調(diào)試屠列,使用log()函數(shù)時(shí)一定要標(biāo)記輸出值的含義啦逆,否則會(huì)混淆
2.數(shù)組
a. array 可以存儲(chǔ)很多元素, 每個(gè)元素的值、類型都可以不同
var demoArray = function() {
// array(數(shù)組)常用操作
// 創(chuàng)建數(shù)組
// 使用 [] 符號(hào), 每個(gè)元素用逗號(hào)分隔
var a = [1, 3, 4, 5]
// 現(xiàn)在 a 是一個(gè) array, 擁有 4 個(gè)元素
// 可以用 .length() 的方式得到 array 的長度
log('求 array 長度', a.length())
// 使用 .length() 可以求出數(shù)組的長度(數(shù)組中元素的個(gè)數(shù))
// 值可以用變量接住
var length = a.length()
log('a.length() ', length)
// 訪問元素
// 對(duì)于數(shù)組中的每個(gè)元素, 可以通過下標(biāo)訪問
// 下標(biāo)就是元素在數(shù)組中的序號(hào), 從 0 開始
// 下標(biāo)訪問語法是 [] 中括號(hào)
log('用下標(biāo)訪問 array 中的元素')
log('a[0]', a[0])
log('a[1]', a[1])
log('a[2]', a[2])
log('a[3]', a[3])
// 因?yàn)橐还仓挥?4 個(gè)元素, 所以訪問不存在的下標(biāo)會(huì)出錯(cuò)
// log(a[4])
// 手動(dòng)訪問元素當(dāng)然是低效的
// 可以用循環(huán)來訪問元素, 這個(gè)過程叫 遍歷
log('循環(huán)訪問 array 所有元素')
var i = 0
//這里a.length()在每次循環(huán)時(shí)笛洛,都要計(jì)算一次蹦浦,可以先將a.length賦值給一個(gè)變量,再使用
while(i < a.length()) {
log('a[i]', a[i])
i = i + 1
}
}
//運(yùn)行結(jié)果:
求 array 長度 4
a.length() 4
用下標(biāo)訪問 array 中的元素
a[0] 1
a[1] 3
a[2] 4
a[3] 5
循環(huán)訪問 array 所有元素
a[i] 1
a[i] 3
a[i] 4
a[i] 5
b.可以用數(shù)組的 push 函數(shù)往列表末尾插入一個(gè)元素撞蜂,并且, 這個(gè)新元素可以是任意類型, 這里是一個(gè)字符串 ,數(shù)組類型的變量可以用 .函數(shù)() 的方式來進(jìn)行操作
var demoArrayAdd = function() {
var a = [1, 3, 4, 5]
a.add('新元素')
log('a push ', a)
// [1, 3, 4, 5, '新元素']
a.add(0)
log('a.add(0)', a)
// [1, 3, 4, 5, '新元素', 0]
// 多添加幾個(gè)元素
a.add(12)
a.add(34)
a.add(56)
log('a.add 12 34 56', a)
}
//運(yùn)行結(jié)果:
a push [1, 3, 4, 5, '新元素']
a.add(0) [1, 3, 4, 5, '新元素', 0]
a.add 12 34 56 [1, 3, 4, 5, '新元素', 0, 12, 34, 56]
3. 字符串
a. 串可以判斷相等侥袜、可以相加拼接蝌诡,可以用加號(hào)進(jìn)行拼接,或者使用字符串有一個(gè) .format 函數(shù)可以替換其中的 {}
var name = 'gua'
var hello = '{}, 你好'.format(name)
// 簡單說來, 就是 {} 會(huì)被變量 name 替換形成新字符串
log('format dmeo ', name)
//運(yùn)行結(jié)果:
format dmeo gua
b. 字符串相當(dāng)于一個(gè) array, 可以用下標(biāo)訪問枫吧,也可以使用循環(huán)進(jìn)行遍歷,字符串不能使用下標(biāo)來賦值,只能拼接起來生成一個(gè)新的字符串
c. 字符串可以用 .cut 函數(shù)來獲取子字符串, array 也可以這樣切片,可以省略結(jié)束下標(biāo)參數(shù), 表示取到底
PS: cut 操作不會(huì)影響原來的字符串