Imagining a language without booleans
8 months ago
- #programming
- #language-design
- #conditionals
- 带有'else'的'if'语句可以产生一个值,但没有'else'时,它会求值为'Option<T>'
- 泛化的'if'接受一个布尔值和'T'类型,返回'Option<T>'。若条件为真返回'Some(e)',否则返回'None'
- 'else'运算符为'Option<T>'提供默认值,类似于Rust中的'unwrap_or_else()'
- 'and'和'or'可作用于Option类型,返回Option结果。'or'取第一个'Some'或第二个Option,而'and'在第一个为'Some'时取第二个Option
- 布尔值可用'Option<()>'替代,其中'true'对应'Some(())','false'对应'None'
- Option与Result类型之间存在更深层次的等价性,由此产生'T ? E'表示'Result<T, E>'的语法
- 条件判断可使用'or if'替代'else if',这依赖于'or'比'else'具有更高的绑定优先级
- 条件语句中可用'is'进行模式绑定,类似于Rust的'if let'语法
- 循环可通过'break'带值中断,此时产生'Ok'返回值,并可与'else'子句组合使用
- 在这个假设语言中,函数无需将结果显式包装为'Ok'或'Err',从而简化代码结构