V语言

V语言学习笔记-08流程控制

2020-05-19  本文已影响0人  lydiandy

if 条件语句

a := 10
b := 20
if a < b {
    println('$a < $b')
} else if a > b {
    println('$a > $b')
} else {
    println('$a == $b')
}

if表达式:

num := 777
s := if num % 2 == 0 {
    'even'
}
else {
    'odd'
}
println(s) // "odd"

match 分支/匹配语句

match要求包括所有可能,所以基本都要带上else语句

os:='macos'
match os {
    'windows' {
        println('windows')
    }
    'linux' {
        println('linux')
    }
    'macos' {
        println('macos')
    }
    else  {
     println('unknow')
    }
}

匹配的值也可以多个,用逗号分隔:

os:='macos'
match os {
    'windows' {
        println('windows')
    }
    'macos','linux' {
        println('macos or linux')
    }
    else  {
     println('unknow')
    }
}

match表达式:

os:='macos'
price:=match os {
    'windows' {
        100
    }
    'linux' {
        120
    }
    'macos' {
        150
    }
    else {
        0
    }
}
println(price) //输出150

match的同时,加上var ,可以修改匹配变量,通常是配合for in 语句结合使用

//参考代码
    for stmt in file.stmts {
            match mut stmt {
                ast.ConstDecl {
                    c.stmt(*it)
                }
                else {}
            }
        }

使用match判断联合类型的具体类型

module main

struct User {
    name string
    age int
}
pub fn (m &User) str() string {
    return 'name:$m.name,age:$m.age'
}

type MySum= int|string|User //联合类型声明

pub fn (ms MySum) str() string {
    match ms { //如果函数的参数或者接收者是联合类型,可以使用match进一步判断类型
        int { //会在这个代码块中,自动生成一个类型为int,名为it的变量,可以直接使用
            return it.str()
        }
        string { 
            return it //it的类型是string
        }
        User { 
            return it.str() //it的类型是User
        }
        else {
            return 'unknown'
        }
    }
}

for 循环语句

for的四种形式:

  1. 传统的:for i=0;i<100;i++ {}
   for i := 0; i < 10; i++ { 
    //跳过6
    if i == 6 {
        continue
    }
    println(i)
   }

为了简洁的目的,for里面的i默认就是var可变的,不需要特别声明为var,如果声明了编译器会报错

  1. 替代while:for i<100 {}
   mut sum := 0
   mut i := 0
   for i <= 100 {
    sum += i
    i++
   }
   println(sum) // 输出"5050"
  1. 无限循环:for {}
mut num := 0
   for {
    num++
    if num >= 10 {
        break
    }
   }
   println(num) // "10"
  1. 遍历:for i in xxx {}

    for in可以用来遍历字符串,数组,字典这三种类型

遍历字符串:

   str:='abcdef'
   //遍历value
   for s in str {
       println(s.str())
   }
   //遍历index和value
   for i,s in str {
       println('index:$i,value:${s.str()}')
   }   

遍历数组:

numbers := [1, 2, 3, 4, 5]
for num in numbers {
    println('num:$num')
}
for i,num in numbers {
    println('i:$i,num:$num')
}
//或者这种区间的写法也可以
for i in 0..numbers.len {
    println('num:${numbers[i]}')
}

遍历字典:

m:={"name":"jack","age":"20","desc":"good man"}

for key,value in m {
    println('key:$key,value:$value')
}

goto语句

关键字有看到还保留着goto,但是还没有看到具体的使用例子

上一篇下一篇

猜你喜欢

热点阅读