diff --git a/syntax/02-datatypes.md b/syntax/02-datatypes.md index ed7df95..3a4984c 100644 --- a/syntax/02-datatypes.md +++ b/syntax/02-datatypes.md @@ -122,8 +122,8 @@ list.push_back(2) list.push_back(3) # 访问元素 -var first = list.front() -var last = list.back() +var first = list.front +var last = list.back # 删除元素 list.pop_back() diff --git a/syntax/04-control-flow.md b/syntax/04-control-flow.md index b81a83b..1d8a245 100644 --- a/syntax/04-control-flow.md +++ b/syntax/04-control-flow.md @@ -328,7 +328,7 @@ end ```covscript function findMax(arr) - if arr.empty() + if arr.empty return null end diff --git a/syntax/08-memory.md b/syntax/08-memory.md index 0294423..8807bf0 100644 --- a/syntax/08-memory.md +++ b/syntax/08-memory.md @@ -437,7 +437,7 @@ class ObjectPool function acquire() if this.available.size > 0 - var obj = this.available.back() + var obj = this.available.back this.available.pop_back() this.inUse.push_back(obj) return obj diff --git a/syntax/09-exceptions.md b/syntax/09-exceptions.md index 2d52083..a11cbe5 100644 --- a/syntax/09-exceptions.md +++ b/syntax/09-exceptions.md @@ -441,7 +441,7 @@ class HttpClient function get(url) try # 验证 URL - if url == null || url.empty() + if url == null || url.empty throw new InvalidArgumentException("url", "URL cannot be empty") end @@ -485,7 +485,7 @@ end ```covscript class Validator function validateEmail(email) - if email == null || email.empty() + if email == null || email.empty throw new InvalidArgumentException("email", "cannot be empty") end diff --git a/syntax/10-iterators.md b/syntax/10-iterators.md index 4858920..585aeb5 100644 --- a/syntax/10-iterators.md +++ b/syntax/10-iterators.md @@ -6,7 +6,7 @@ ### begin 和 end -使用 `.begin()` 和 `.end()` 获取容器的起始和结束迭代器。 +使用 `.begin` 和 `.end` 获取容器的起始和结束迭代器。 ```covscript # 列表迭代器 @@ -15,16 +15,16 @@ list.push_back(1) list.push_back(2) list.push_back(3) -var it = list.begin() -var itEnd = list.end() +var it = list.begin +var itEnd = list.end # 遍历列表 loop if it == itEnd break end - system.out.println(it.data()) - it = it.next() + system.out.println(it.data) + it.next() end ``` @@ -33,21 +33,21 @@ end ```covscript var arr = {10, 20, 30, 40, 50} -var it = arr.begin() -var itEnd = arr.end() +var it = arr.begin +var itEnd = arr.end loop if it == itEnd break end - system.out.println("Element: " + to_string(it.data())) - it = it.next() + system.out.println("Element: " + to_string(it.data)) + it.next() end ``` ## 2.10.2 迭代器操作 -### data() - 获取当前元素 +### data - 获取当前元素 ```covscript var list = new list @@ -55,8 +55,8 @@ list.push_back("Alice") list.push_back("Bob") list.push_back("Charlie") -var it = list.begin() -var name = it.data() # 获取当前元素 +var it = list.begin +var name = it.data # 获取当前元素 system.out.println(name) # Alice ``` @@ -64,18 +64,18 @@ system.out.println(name) # Alice ```covscript var numbers = {1, 2, 3, 4, 5} -var it = numbers.begin() +var it = numbers.begin # 获取第一个元素 -system.out.println(it.data()) # 1 +system.out.println(it.data) # 1 # 移动到下一个 -it = it.next() -system.out.println(it.data()) # 2 +it.next() +system.out.println(it.data) # 2 # 再移动 -it = it.next() -system.out.println(it.data()) # 3 +it.next() +system.out.println(it.data) # 3 ``` ### 比较迭代器 @@ -85,9 +85,9 @@ var list = new list list.push_back(10) list.push_back(20) -var it1 = list.begin() -var it2 = list.begin() -var itEnd = list.end() +var it1 = list.begin +var it2 = list.begin +var itEnd = list.end # 比较迭代器 if it1 == it2 @@ -105,8 +105,8 @@ end ```covscript function printList(list) - var it = list.begin() - var itEnd = list.end() + var it = list.begin + var itEnd = list.end system.out.print("[") var first = true @@ -121,8 +121,8 @@ function printList(list) end first = false - system.out.print(to_string(it.data())) - it = it.next() + system.out.print(to_string(it.data)) + it.next() end system.out.println("]") @@ -140,8 +140,8 @@ printList(numbers) # [1, 2, 3] ```covscript function findElement(list, target) - var it = list.begin() - var itEnd = list.end() + var it = list.begin + var itEnd = list.end var index = 0 loop @@ -149,11 +149,11 @@ function findElement(list, target) return -1 # 未找到 end - if it.data() == target + if it.data == target return index # 返回索引 end - it = it.next() + it.next() index += 1 end end @@ -177,8 +177,8 @@ list.push_back(2) list.push_back(3) # 遍历并修改 -var it = list.begin() -var itEnd = list.end() +var it = list.begin +var itEnd = list.end loop if it == itEnd @@ -186,10 +186,10 @@ loop end # 修改元素(需要通过其他方式) - var value = it.data() + var value = it.data # 对于某些容器,可能需要重新赋值 - it = it.next() + it.next() end ``` @@ -204,18 +204,18 @@ map.insert("age", 25) map.insert("city", "Shanghai") # 遍历哈希映射 -var it = map.begin() -var itEnd = map.end() +var it = map.begin +var itEnd = map.end loop if it == itEnd break end - var pair = it.data() + var pair = it.data system.out.println(pair.first + " = " + to_string(pair.second)) - it = it.next() + it.next() end ``` @@ -229,16 +229,16 @@ set.insert(30) set.insert(20) # 重复元素不会添加 # 遍历集合 -var it = set.begin() -var itEnd = set.end() +var it = set.begin +var itEnd = set.end loop if it == itEnd break end - system.out.println("Element: " + to_string(it.data())) - it = it.next() + system.out.println("Element: " + to_string(it.data)) + it.next() end ``` @@ -258,15 +258,15 @@ foreach item in list end # 等价的迭代器写法 -var it = list.begin() -var itEnd = list.end() +var it = list.begin +var itEnd = list.end loop if it == itEnd break end - var item = it.data() + var item = it.data system.out.println(item) - it = it.next() + it.next() end ``` @@ -276,8 +276,8 @@ end ```covscript function count(container) - var it = container.begin() - var itEnd = container.end() + var it = container.begin + var itEnd = container.end var cnt = 0 loop @@ -285,7 +285,7 @@ function count(container) break end cnt += 1 - it = it.next() + it.next() end return cnt @@ -303,16 +303,16 @@ system.out.println("Count: " + to_string(count(list))) ```covscript function sum(container) - var it = container.begin() - var itEnd = container.end() + var it = container.begin + var itEnd = container.end var total = 0 loop if it == itEnd break end - total += it.data() - it = it.next() + total += it.data + it.next() end return total @@ -327,20 +327,20 @@ system.out.println("Sum: " + to_string(sum(numbers))) # 15 ```covscript function filter(container, predicate) var result = new list - var it = container.begin() - var itEnd = container.end() + var it = container.begin + var itEnd = container.end loop if it == itEnd break end - var item = it.data() + var item = it.data if predicate(item) result.push_back(item) end - it = it.next() + it.next() end return result @@ -359,18 +359,18 @@ end ```covscript function map(container, mapper) var result = new list - var it = container.begin() - var itEnd = container.end() + var it = container.begin + var itEnd = container.end loop if it == itEnd break end - var item = it.data() + var item = it.data result.push_back(mapper(item)) - it = it.next() + it.next() end return result @@ -388,8 +388,8 @@ end ```covscript function reduce(container, initial, reducer) - var it = container.begin() - var itEnd = container.end() + var it = container.begin + var itEnd = container.end var accumulator = initial loop @@ -397,8 +397,8 @@ function reduce(container, initial, reducer) break end - accumulator = reducer(accumulator, it.data()) - it = it.next() + accumulator = reducer(accumulator, it.data) + it.next() end return accumulator @@ -415,64 +415,43 @@ var product = reduce(numbers, 1, [](acc, x) -> acc * x) system.out.println("Product: " + to_string(product)) # 120 ``` -## 2.10.7 自定义迭代器 +## 2.10.7 迭代器与标准容器 -为自定义容器实现迭代器。 +CovScript 的标准容器(list, array, hash_map, hash_set 等)都内置了迭代器支持。 ```covscript -class Range - var start = 0 - var end = 0 - var step = 1 +# 所有标准容器都支持迭代器 +var containers = new list + +# 列表 +var myList = new list +myList.push_back(1) +myList.push_back(2) +containers.push_back(myList) + +# 数组 +var myArray = {10, 20, 30} +containers.push_back(myArray) + +# 哈希映射 +var myMap = new hash_map +myMap.insert("key", "value") +containers.push_back(myMap) + +# 遍历所有容器 +foreach container in containers + system.out.println("Container elements:") + var it = container.begin + var itEnd = container.end - function construct(s, e, st) - this.start = s - this.end = e - this.step = st - end - - class Iterator - var current = 0 - var end = 0 - var step = 1 - - function construct(cur, e, st) - this.current = cur - this.end = e - this.step = st - end - - function data() - return this.current + loop + if it == itEnd + break end - function next() - var newIter = new Iterator(this.current + this.step, this.end, this.step) - return newIter - end - end - - function begin() - return new Iterator(this.start, this.end, this.step) - end - - function end() - return new Iterator(this.end, this.end, this.step) - end -end - -# 使用自定义迭代器 -var range = new Range(0, 10, 2) -var it = range.begin() -var itEnd = range.end() - -loop - if it.data() >= itEnd.data() - break + system.out.println(" " + to_string(it.data)) + it.next() end - - system.out.println(it.data()) - it = it.next() end ``` @@ -484,8 +463,8 @@ end # 低效:每次都复制迭代器 function inefficientSum(list) var total = 0 - for it=list.begin(),it != list.end(),it = it.next() - total += it.data() + for it=list.begin,it != list.end,it.next() + total += it.data end return total end @@ -509,22 +488,22 @@ list.push_back(1) list.push_back(2) list.push_back(3) -var it = list.begin() -var itEnd = list.end() # 缓存 +var it = list.begin +var itEnd = list.end # 缓存 loop if it == itEnd break end - system.out.println(it.data()) - it = it.next() + system.out.println(it.data) + it.next() end ``` ## 迭代器最佳实践 1. **优先使用 foreach**:更简洁和易读 -2. **缓存 end 迭代器**:避免重复调用 `.end()` +2. **缓存 end 迭代器**:避免重复访问 `.end` 3. **注意迭代器失效**:修改容器可能导致迭代器失效 4. **使用合适的容器**:根据访问模式选择容器类型 5. **避免不必要的复制**:迭代器操作可能涉及复制 @@ -548,13 +527,13 @@ for i=0,i < list.size,++i end # 需要精确控制:使用迭代器 -var it = list.begin() -var itEnd = list.end() +var it = list.begin +var itEnd = list.end loop if it == itEnd break end # 精确控制迭代过程 - it = it.next() + it.next() end ``` diff --git a/syntax/11-stdlib.md b/syntax/11-stdlib.md index 657c408..2a4631f 100644 --- a/syntax/11-stdlib.md +++ b/syntax/11-stdlib.md @@ -48,7 +48,7 @@ system.out.println("Enter text (empty line to finish):") var lines = new list loop var line = system.in.getline() - if line.empty() + if line.empty break end lines.push_back(line) @@ -636,7 +636,7 @@ function readConfig(filename) # 跳过空行和注释 var trimmed = trim(line) - if trimmed.empty() || trimmed[0] == '#' + if trimmed.empty || trimmed[0] == '#' continue end diff --git a/syntax/12-advanced.md b/syntax/12-advanced.md index 31c726e..90276f8 100644 --- a/syntax/12-advanced.md +++ b/syntax/12-advanced.md @@ -632,11 +632,11 @@ class QueryBuilder sql += " FROM " + this.table - if !this.whereClause.empty() + if !this.whereClause.empty sql += " WHERE " + this.whereClause end - if !this.orderBy.empty() + if !this.orderBy.empty sql += " ORDER BY " + this.orderBy end