·所有的value都会被初始化成“预设值”。
·原因是在以太坊的空间上,所有未初始化的空间,都是0,换言之就是每个型态被迪定义的“预设置”。
·Key并不会被存在mapping型态里,因此使用者没办法从mapping中取得所有的Key
·那他是怎么查询的呢?
·keccak256(Key)→Value
·因此,mapping没有办法记录长度、大小、在没有key的情况下也不能列出所有的value
Example:学号与成绩
·建立一份合约class
·建立一个映射,将学号映射到成绩中:
·学号uint
·成绩uint
·提供一个函数update来更新学生成绩
·update(uint student_id,uint score)
·提供一个函数getScore来取得学生成绩
·get(uint students_id) → uint score
代码示例:
六、循环体:
控制结构
Control Structure
前言:在程序中会遇见同一件事情需要用很多次,需要重复很多次,这时不可能将代码复制很多次,就需用“控制结构”进行控制。
·关键词:if
·当满足“条件”的时候,则执行“{}内的代码”
·条件必须是个“布尔值”
·也就是逻辑判断,如:未满十八岁、是否高于最低薪资、论文有无抄袭、参考资料有无正确引用等。
若“000”,则“XXX”,否则“ZZZ”
if(条件){/*做点事儿*/} else{/*做点儿别的事儿*/}
·关键字:if-else
·当满足“条件”的时候,则执行“{}内的代码”
·若不满足“条件”则执行“else{}内的代码”
很多条件的情况
if(条件A){} else if (条件B){}……
·关键字:if-(else-if)*-else
·当有多个条件时,可以排序多个条件,else不一定要有
Example:成绩计算(if)
重复做事 for
for (宣告;条件;事后修改的事) {/*做点事儿*/}
·关键字:for( ; ; ){}
·在满足条件下,重复执行{}内的代码。
·宣告:
·循环事实上就是计数器,因此宣告是为了帮助我们制造出计数器的变数,计数器不一定是整数,只要能被利用在“条件判断中”的型态都可以使用。
·要遍历阵列的所有元素:for (uint index; ; ) {……}
·条件:同if
·事后修改的事:比如说增加计数器等修改的行为。
·若“条件”没写,则为一个“无限循环”是停不下来的。
Example:统计学生成绩(for)
重复做事 while
·关键字:while( ) { }
·在特定条件下,重复执行{ }内的代码。
·条件:同if
·若“条件”没写,则为一个“无限循环”是停不下来的。
Example:统计成绩(while)
离开当前循环 break
break
·关键字:break
· 跳出当前循环
·若嵌套状态,如for( ){for( ){for( ){ } } },就需要三个break。
跳出本次循环 continue
continue
·关键字:continue;
·跳过本次循环
·在“for”时,跳过以后会执行“事后修改的事”;
·在“while”时,就会跳回条件判断
·当执行到continue的时候,会无条件跳过continue后的代码。