和文科妹子学编程-第2课-条件语句

程序猿买西瓜

老婆给当程序员的老公打电话:“下班顺路买一斤包子带回来,如果看到卖西瓜的,买一个。”当晚,程序员老公手捧一个包子进了家门。老婆怒道:“你怎么就买了一个包子?!”老公答曰:“因为看到了卖西瓜的。”

此段子的出现出一度刷爆了程序猿们的朋友圈,将我等码农呆瓜,木纳的本质表现的淋漓尽致,不可谓不妙,究其原因,是因为这个倒霉的小哥分析需求时不细致。

老婆的意思,应该是这样:

 
 
  1. 买一斤包子

  2. if (看到卖西瓜的){

  3.    买一个西瓜

  4. }

可是小哥理解成:

 
 
  1. let n = 1

  2. if (看到卖西瓜的){

  3.    n = 1

  4. }

  5. n份包子

如此理解,人不被打死,键盘也得跪坏了。 那么在这里,有我们本次要学习的概念,条件执行,更专业的说话,叫做 控制流

程序就是一系列指令。但编程真正的力量不仅在于运行(或“执行”)一条接一条的指令,就像周末的任务清单那样。根据表达式求值的结果,程序可以决定跳过指令,重复指令,或从几条指令中选择一条运行。实际上,你几乎永远不希望程序从第一行代码开始,简单地执行每行代码,直到最后一行。“控制流语句”可以决定在什么条件下执行哪些语句。

在javascript 里,控制流主要有if ,if-else,switch 这三种种结构。

tips 需求————程序员们编程时时要完成的任务。

if

if的语法定义如下:

 
 
  1. if (条件)

  2.    语句A

即,当条件为时,会执行语句A。 试试下面的程序:

 
 
  1. let a = 1

  2. if (a > 0)

  3.    consol.log('a > 0')

写到这,我们要重点介绍一下javascript 里的boolean类型与表达式

boolean 类型和string等数据类型一样,是我们各种数据类型中的一种,但是他只有两种类型,真和假,即true 和 flase,我们可以直接以常量的形式进地赋值。

 
 
  1. let true_val = true

  2. let false_val = false

  3. console.log(true_val)

  4. console.log(false_val)

但是显然这些东西并没有什么真正的实用价值 ,我们要进行判断时,这个值是通过一系列的表达式计算出来的。

表达式的百度定义如下:

表达式 表达式,是由数字、算符、数字分组符号(括号)、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合。约束变量在表达式中已被指定数值,而自由变量则可以在表达式之外另行指定数值。

简单来讲,表达式就是一系列常量,变量,操作符的组合,他们通过一系列的计算,会得到一个确定的值.

常量,变量,我们之前已经介绍过了,那么操作符是什么呢,简单讲,操作符可以将两个或多个确定值联在一起,返回一个新的确定值,对,加,减,乘,除就是其中一种。我们之前用的将两个字符串拼到一起的+也是操作符。

javascript中操作符主要有:

  • 标准数学操作符,+,-,*(乘),/(除)

  • %取模——一个非常有意思的操作符,a%b表示的是 a除以b得到余数,如

    100 % 100 = 0 11 % 7 = 4

tips 理解取模操作是编程入门一个非常重要的过程。

  • 各种比较运算,如>, >=, <, <= 这些值会返回真或假,也就是boolean值。

  • 三元操作符a?b:c,这个的意思是,如果a为真,则返回b的值,否则返回c的值。

  • 非常重要的bool操作符, 有一元操作符,非(!),即 !false 是 true,!true是false, 还有且(&&,对,就是and),或(|| or),这些操作符的参考可以如下:

    // !运算 ! true -> flase ! false -> true //&& 运算 true && true -> true true && false -> false false && true -> false false && false -> false //||运算 true || true -> true true || false -> true false || true -> true false || false -> true

简单来说,当a,b都为true,a&&b才为true,否则为false ,当a,b都为flase时,a||b为false ,否则为true

  • 嗯,还有 相等 (=\==) 和不等 (!==),

    1 === 1 -> true 1 === 9 -> false 1 !== 1 -> false 1 !== 9 -> true

其实相等分为相等(==)和全等(=\==)两种,不等也是类似 (!= 和 !=\=),为了不塞太多,我们只讨论前两者。

同时,javascript 中的表达式也是支持括号来约束优先级的,如:

 
 
  1. (1>2)&&(4<=4)

  2. (!true)||('hello'=='Hello')

有了表达式,我们可以通过上述的 if 判断去实现自己的逻辑了。 如,随机取一个 0到1之间的数,如果比0.5大,就输出:

 
 
  1. let r = Math.random()

  2. if(r>0.5){

  3.    console.log('r>0.5')

  4. }

这里面用了 javascript的标准库 Math, Math 里有很多现成的与数学有关的函数,可以参考课后的连接。。

注意,同时,在上面的语句里,我们还用到了{ } ,这里, {} 内的语句表示一起执行。

试验一下如下语句的区别。

A

 
 
  1. let r = Math.random()

  2. if (r>0.5){

  3.    console.log('r>0.5')

  4.    console.log(r)

  5. }

B

 
 
  1. let r = Math.random()

  2. if (r>0.5){

  3.    console.log('r>0.5')

  4.    console.log(r)

  5. }

当 if 后只需要执行一条语句时,其实加不加{} 是相同的,但是为了代码的可读性,我们还是习惯加上,也就是说。

 
 
  1. let r = Match.random()

  2. //这种写法很好

  3. if ( r> 0.5){

  4.    console.log('r>0.5')

  5. }

  6. //这么写会被 diss

  7. if (r>0.5)

  8.    console.log('r>0.5')

if - else

与 if 的定义类似,if-else 的定义是

 
 
  1. if (条件) A else B

即,如果条件为真,则执行语句 A,否则执行语句 B ,像是这样。

 
 
  1. let r = Math.random()

  2. if (r>0.5){

  3.    console.log('r>0.5')

  4. }else{

  5.    console.log('r<=0.5')

  6. }

语句和语句之间自然是可以组合嵌套的,所以,我们会有类似的代码:

 
 
  1. let name = "jin"

  2. if (name === "jin"){

  3.    console.log("this is jin")

  4. }else {

  5.    console.log("oh ,not jin")

  6.    if(name ==="ge"){

  7.        console.log("this is ge")

  8.    }else {

  9.        console.log("code.")

  10.    }

  11. }

switch

除了 if ,条件判断还有 switch 这种格式,定义类似于:

 
 
  1. switch(表达式){

  2.    case 1

  3.        语句

  4.        break

  5.    case 2:

  6.        语句

  7.        break

  8.    ......

  9.    default:

  10.        语句

  11.        break

  12. }

即,当表达式为对应 case 某个值时,执行相应的语句,否则执行 default 内的语句。 例:

 
 
  1. let name = 'hello'

  2. switch (name){

  3.    case 'ge':

  4.        console.log('a coder')

  5.        break

  6.    case 'lu':

  7.        console.log('interpreter')

  8.        break

  9.    default:

  10.        console.log('not us')

  11.        break

  12. }

作业

  1. 计算从现在开始的n天内有几个星期天

  2. 考试的分数是百分制,都为整型,60以下不及格,60-80为良好,80-100为优秀,100分为完美。写程序生成一个随机分数,用一行信息输出 '分数值为: ,评价为:'的信息

  3. 下面的代码有什么问题?

    let r = Match.random() if(r>0.5){ console.log('r>0.5') }else if (r>0.4){ console.log('r>0.4') }else { console.log('r is not needed') }

  4. 随机生成一个以秒为单位的时间截,并把这个时间按小时:分:秒来进行显示。

  5. 扩展&自学 javascript 里有一个神奇的常量,叫 undefined . 尝试如下代码:

    let c console.log(c) if (!c){ console.log('!c is true??') } if (c === undefined){ console.log('c is undefined') }

学习与 undefined 有关的内容

参考

javascript 的 math 库 :http://www.w3school.com.cn/jsref/jsrefobjmath.asp


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值