粉丝139获赞561

dot 是 一门类型安全的通用编程语言,专为构建高性能的多平台应用而生。它由谷歌开发,二零一一年首次亮相, 最初的目标是取代 javascript, 用自家的虚拟机在浏览器里直接跑应用,但一开始并不顺利,没能真正打动 web 开发社区,直到被 flutter 采用后强势回归,如今已是行业里最受欢迎的语言之一。它的独特之处在于多目标编意。 移动端可以翻译成 r 和 x 六四机器码, web 端可以翻译成 java script, 桌面端还能为 windows、 mac os、 linux 生成字包含的可执行文件配合即时编辑器 jet, 可将原代码即时编辑为机器码带来热、重、载等能力,大幅提升开发效率, 尤其在 flutter 开发中表现突出。所有 dart 代码都运行在一个隔离区 isovik 里,它就像一个待单线城市件循环的内存块。它支持异步的后台操作,你也可以生成多个隔离区并行执行代码。语言层面, dart 是 类型安全的,变量的值始终与其静态类型匹配,通常能减少生产环境的运行时错误。同时类型系统很灵活, 必要时可以使用动态类型和运行时检查。它还提供空安全,除非你明确允许值,不能为 now 进一步降低运行时异常。语法上, dart 常被形容为融合了 java 和 java script 的 元素。 程序总是从一个不返回值的 main 函数开始,所以它被标注为 void 函数体里。我们可以用法声明一个变量, 并赋值为负串。 dart 会自动推断出自符串类型。你也可以直接把 vr 换成显示的类型。能放进变量的任何东西都是对象,每个对象都是某个类的实力。在 dart 中,唯一不是对象的就是 no。 这位多种编程范式打开了大门,函数是一等公民,既能做函数式编程,也能定义代混入 mixin 继承的类,写出面向对象的模式。另外, dart 还有名为 pop 的 包管理器,提供成千上万的开元包,帮你更快完成任务, 三分钟带你了解 dart。 想看更多这样的短视频,记得点赞和关注,感谢观看,我们下次再见!

大家好,那上个视频我们已经把国际的 ai 项目算是已经做完了,是吧?那现在我预计想用阿特尔去开发一个关于 ai 的 一个项目,那因为普拉特这边我之前没有去认真的学习过,所以说从现在开始开始 先过一遍基础语法,也是了解一下他们的一些如何去使用,我们再从头去开发这个 ai 项目。好吧, 那我先说一下我的计划,其实是我们去开发一个类似于这种用 u n f 也能开发的一套东西,但是为什么不想用拉特去开发?因为它是一个能够兼容多平台,而且我感觉对自己的技术也有很多帮助,所以说 采用拉特这个技术去开发,所以说这里一个入门去学习一下拉特。那首先第一步还是呃搭建一个本地环境, 那本地环境搭建的话其实有两种官方推荐了,一种是安装,我们首先需要去学习这个 data 的 一个语法,那它呢?首先根据官方文档来说,我们需要去安装一个 data s t, 那 采用的就是这个东西,那首先的话,它意思就是说你要去安装这个 data 之后,我们在 windows 环境下要去执行这一命令。但是有一个问题,这个东西它其实很麻烦,必须 他这个东西是必须去代理,那对于国内的话,其实开代理一个是要费二,一个就是开了代理之后他的网速也不一定好,所以说我个人推荐第二种,我们可以去清华大学园,这里就说你点击我们去预览一下, 到清华大学园里边,大家可以看一下这里边有一些说这些东西,比如说我这里就是 future, 那 future 的 话你进来看,我们比如说选这个二五年十月二十五号这个本点进来,这个是最新的码,我们找到 dot s d k, 比如说你像 windows, 对 吧? link 这些都有,我们所以说就可以从这里直接去进行一个下载,它的速度也是呃极其快的。下载完成之后我们需要去把它,比如说因为你第一步的时候, 如果说你用过 chocolate, 那 就可以知道。比如说我们随便找一个地方, 比如说我是在一盘一盘我装了一个创建了一个福拉特的一个文件包,里边有大包,把下载下来的这个 sdk 放在这里,这样就行了。比如说我们可以采用,我这边采用的是这个翠,作为一个开发的一个环境,它也可以采用这个 v s code, 好 吧?这个东西其实也是一样,你把这个文件打开之后,我们需要去装一个插件, 大家可以在突然间里面去搜索一下这个插件啊,这样搜索完成之后,我们要点击一个安装,是吧?安装完成之后,我们比如说你去创建,可以去创建一些新文件,比如说我们叫测试语 言,就是以大的结尾,你创建完成之后我们就可以去看到这些东西,我们的这个项目就可以基础的一个环境就已经搭建好了,好吧,大概就是这个样子。

hello, 大家好,今天给大家分享的是如何用 dart 语言编程实现远程控制电器开关。这是一台智能插座十 a, 它支持公网和局域网私有化,支持 http 接口 对接的时候,只需构造一个简单的 http 请求就可以实现对设备的远程控制,所以它几乎支持所有的编程语言。 在公网可以直接请求开放平台提供的接口,在局域网也可以直接请求设备自己开放的接口,非常灵活。 核心代码就是用 dot 语言构造一个设备接口的 h t p 请求是不是很简单,需要完整代码的小伙伴可以联系我。最后这是设备支持的功能说明,这是设备的外观图片, 这是设备支持的命令列表,今天就给大家分享到这里,祝大家代码向星辰,照亮未来。

flatter, 一个构建苹果安卓网站的界面框架。 flatter 是高性能 c 加加和 doctor 语言的结合,使用 doctor 语言进行开发。 dart 提供类型安全检查和有状态热加载,可以帮助你构建可靠的应用。在生产环境中, dart 会编译成本地机器码,意味着界面可以在任何平台上漂亮的显示,然后运行 flutter creat 的创建应用。现在打开 main dart 等键,你就在这里编写代码。布局就像一棵树, 框架提供百余种内件组建,向动画滚动布局等。你可以通过继承无状态的组建构建自己的组建,然后重写 biu 函数。 有个重点是在发扯中任何东西都是 vj, 这个函数返回 vj, 他的子 vjj 返回 vj。 这 这样我们就得到一个声明式的组建结构,这样你可以使用 flatter 的工具查看组建。当组建输入数据改变时,会自动调用 built 函数重建界面。不状态组建是不可变的,并且没有内部状态。当你需要根据用户输入改变内部状态的组建时,你可以继承 safe v j 定义。在这个类中的属性是响应式的,比如这里的 count 属性。然后在 beer 的函数中有个巴特组建,当巴特被按压后,会调用 state 的更新 count 属性进行递增, state 告诉框架状态有更新,需要重新绘制界面。 现在你可以在甄姬中运行福阿特应用。现在我们对此组建做下改动。对这个按钮加一个居中并修改颜色。无需编写代码,仅需点击巴特的同时按住 control shift r 后选择 三特,然后改变巴特的颜色,并且左边会显示当前的颜色,然后在命令行输入二将会存在应用,仅需几百毫秒的时间就可重新构建新版应用,并且注意 ctrl 状态并没有被更新,这就是 fat 带给我们舒适的开发体验。 如果大家喜欢请点赞、关注、评论,这将极大的帮助我输出更多的视频,谢谢大家,我们下个视频见。


hello, 同学们好,这节课我们来学习 dart 语言的基础语法。 dart 呢,是一种非常有趣且功能强大的语言,它在 web 和移动应用开发中扮演着重要的角色啊,尤其呢是作为 flatter 框架的核心啊,我们今天就从基础开始,嗯,逐步的去学习这个 dart 语言啊,然后我们就更进一步的去学习 flatter。 好 啊,首先呢,我们介绍一下这个 dart 啊,为何而来,那在二零一一年呢,在这个谷歌,嗯,他们公司的内部, 由于一些外部开发的业务,他们发现呢啊,这个 javascript 里有诸多的一些缺点啊,于是呢就研发了大体语言,初衷呢就是为了构建前端的用户界面,特别是在浏览器中啊,或者说我们 现在使用的设备当中,电脑当中提供一种更结构化,更高效的编程方式,它比 javascript 呢更高效,解决了 javascript 当中的诸多限制。我们可以看到右边的一张图片,右边的一张图片, 那 that 相对 javascript 的一个比较重要的特性就是右边这张图啊,就是在开发的时候使用 g i t 模式,开发的时候使用 g i t 模式,在 deploy 啊,正式交付到用户手上运行的时候使用 a o t 模式,那 g i t 模式呢,就是 类似于 javascript 解释器那样逐行解释,那 a o t 呢,就是把代码编译为机器码,然后再运行 a o t 呢,更加的高效, j i t 呢,更加方便开发者进行开发,实现代码热更新之类的效果。 好,我们来写我们的第一个道尔程序,首先类似于 c c 加加法一样,我们需要一个入口函数,一个 man 方法,首先是一个 void, 是一个函数的返回类型,然后函数名 man, 一个大括号里面是函数题, 然后我们第一个城市应该是 hello world, 所以说我们使用一个函数 print, 然后传入一个参数,一个字符串的 hello world, 然后我们点击这个运行, 在这个控制台呢,就会有一个输出来的 hard world, 你尝试去修改一下这个字符串当中的内容,比如说改成一个 emoji 的字符串, 再次点击运行啊,可以看到现在的输入呢,输出呢,已经是我们修改过后的值了。 接下来呢,我们要来介绍一下 door 当中的一些基础的概念。第一个呢是 door 当中的变量写在这个上面, 那 dutch 当中呢?定音变量有几种方式,最简单的一种是使用 y 关键字,我们试着定义一个 y, n 等于小明啊,这就定义了一个 name, 一个名字为 name 的变量啊,是一个字不串的类型。我们把这个鼠标呀移动到 name 上面啊,发现这是一个字不串的类型,我们没有手动标注它是为字不串类型,所以说这个是自动类型推导 啊,那除了自动类型推导呢,我们还 可以进行手动的类型标注,比如说我们这个时候写一个 int h 等于十八诶,这就是手动的去标注它的类型,我们再次把鼠标移动到这个 in 这个 h 上,发现这是一个 int 类型,是个整形,这个是 手动类型标注。你知道 dart 呢,它是一个 o o p 的语言,是一个面相对象的语言,然后 类似瑜伽吧,它的它的所有类型啊,像我们的 name 的 string, 或者说 age 的 int, 它都有一个基础的类型,就是它的鸡类叫做 object, 我们试着重新定义一下 name, 我们使用 object name 还是叫小明啊,这时候我们把 把第一行的这个给注视掉,这样也可以去定义我们的字符 tar 变量,我们试着输出一下这个变量,我们来修改慢函数 直接运行,他发现输出了小明,这个时候呢,我们来输出一下这个 name, 它具体的运行的时候,它的这个变量的类型究竟是什么?我们试着输出 run time type, 哎,我们发现其实它是一个字符串,虽然我们标注了 object, 因为 object 它是所有类型的基础类型,所有类型呢,也都是继承了 object 啊,类似瑜伽吧里面的这个概念。 好,我们介绍了几种定义变量的方式,一个是自动类型推的,一个是手动 类型标注,还有一个是使用 object 进行类型标注啊,接下来呢,我们的接下来我们要来介绍袋当中的 空安全 low safety, 我们假设一种场景啊,把上面的都注视掉,我们还是定义一个 stream name 的变量, 这次叫一个 bob, 然后假,然后假如啊,我们的程序啊,在进行处理当中,我们需要获取这个 name 的长度来进行一些判断和处理的时候, named lens, 我们写在这个慢函数里面,就在这儿 你听一下,假如说我们需要去使用这个这个名字,这个变量,它的字符串长度的时候哈,但是由于一些意外的情况呢, 我们这个 name 啊,他没有值,他会,他是一个 low, 一个空值啊,怎么办呢?那这个时候相当于我们就去调用到了 low, 第二 nance, 这个时候呢程序就会报错,因为 nance 这个对象呢,他只存在于这个字不串上啊。所以为了避免这样的情况呢,我们大致是一个公安全的语言,他有一些公安全的特性, 比如说我们在定义 name 变量的时候,我们我们已经标注了它是一个 screen 的类型,所以说我们可以让 name, 比如说从 bob 变成 tom, 但是这个要写在慢函数里面,但是我们不能让,但是我们不能让 name 等于 now, 这是不被允许的,也就是说一个空值是不可以被复制到一个不能为空值的, 并到内形上。这个是在编译阶段,我们的 dark 编译器为我们确保不会发生这样的意外,不会发生加法当中比较传统的, 嗯,空指针异常。那接下来呢?如果我们需要定义一个名字,就这个名字,我们让他可以为空,怎么办呢?我们只要在这个 string 后面加一个问号就可以了。这种情况 name 可以为 tom, 可以为或者其他任何的这个字符串,比如说 tom 二、 tom 三都是没有问题的,他同时呢也可以被命,他同时呢也可以被复制为这个空啊。然后在这个时候我们去使用这个 name 上面的成员的时候,就需要注意到, 我们不能直接使用点 nins 这样的方式去掉,我们需要在点前面加一个问号,我们可以来看一下效果,比如现在我们把它,我们把这个 name 复制为呢, 之后运行的结果就是一个啊,运行结果就是一个空,一个空的支付串长度肯定是一个空啊。现在我们来试着把这个等于 not 这一行给它注射掉,我们可以知道它是 tom。 三, 所以说我们这个时候应该输出的结果是四,这个就是我们大体里面变量的内容,来看一下变量,首先是我们学习了自动类型推导变量,然后还有一个手动类型标注, 以及所有类的积累 object 来标注类型啊,然后另外呢,是一个空安全的一些特性。除此之外呢,我们大神里面还有常亮,有两种常亮的模式啊, 第一种呢是 final, 我们来这儿写常亮而不变亮 有两种模式,第一种是 final, 来试着写一下 final, 先把上面的注视掉吧。 final them, tom 啊,叫 tom。 这个时候呢啊,我们之前是可以去写 name, 我们之前是可以去给 name 重新复制的,比如说叫 bob 是吧?但是由于这儿使用的 final 就是不能重新复制了,我们把这个鼠标放上去, 有报错是吧? can't be used as a theater because it's final, 对不对?如果我们把 final 换成 var, 就可以被重新复制了,好,这是第一种常量和不变量 final 去定义它。而第二种呢是 const, 这里写成 a g, 好吧是吧, const 跟这个 final 同理啊,也同样也不能对 const 电影的变量进行重新复制,比如说我们让它等于二十。哎,这里又有一个报错是 constant variables can be assigned a value, 就是说一个常量值不可以再被复制了, 那这个 const 和 final 都可以定义常量和不变量,那它们之间到底有什么区别呢?诶,这 const 呢,相对于 final 它更加的严格一些 哎,因为它的值呢,都是在我们的这个编译的时候被算出来的,比如说我们可以把 const 用于一些常量的定义,比如说,呃,数学上的太三点一四, 这是没有问题的,哎,我们也可以去定一个新的变量,比如说叫拍二,我们让他等于拍的两倍,哎,这样进行一些简单的运算也是没有问题的,但是注意到有个点,因为我们的 cons 上他更加的严格 其直,哎,只能在 只能在编译的时候计算啊,所以说啊,有些情况它是不可以使用 consta 的。我们来举个例子啊,比如说我们简单的去写一个函数 啊,后面我们会详细的去讲函数是怎么写的啊,这里我们先简单写一个叫 int, 然后这个函数接收两个参数,一个是 a, 一个是 b, 好返回的类型也是一个 in, 它非常简单,反馈一下 a 加 b 的和啊,这个时候呢,我们 const 一个 t 吧, 我想让这个 t 的值是等于这个一和三的和,哎,我们发现是不可以的,我们来看一下啊,他的报错情况是啥?说的是 master can be invoked in constant experience, 这意思说是在这个常量表达式里面,我们是不可以用函数运行的,为啥呢?因为这个函数运行他是在运,他是在程序运行的时候去求的结果的,而不是在变异的时候计算的,所以这个时候用 cons 是不行的,这种时候呢,只能去使用 final。 我们可以来说出一下 final 的值, final 定义的这个变量 t 的值, 我们发现了输出了四,刚好是一和三的和好,到这里为止呢,就是 dart 定义变量的内容。好,接下来呢,我们有一个新的目标,我们的目标是写一个,我们的目标是使用 dart 写一个猜数字的小游戏, 我们还是先写一个,嗯,入口函数 man 函数 print 一个,欢迎来到猜数字小游戏, 用一个 emoji, 我们来运行一下,哎,那这个猜数字的小游戏如何开始呢?我们知道猜数字的小游戏呢,有这么几步,第一步肯定是生成一个随机 机数字,哎,然后进入一个循环,然后在循环内部去获取用户的输入,然后判断用户输入和随机数字,哎,对比吧, 就对比用户输入和随机数字,然后进行相应的输出提示,然后最后 输出结果啊,猜对了,或者说是猜错了,或者说是在指定的次数里,或者说是在指定的次数里面啊,没有猜对,我们我们一步一步的来,首先是生成一个随机数字, 那么在大图里我们如何定义一个随机数字呢?我们来定义一个变量,叫做 random 随心数字,我们需要引用一个 dart 里面的内置的函数,或者说是方法叫 random, 它来自于这个 dart math 这个包啊,这已经被我们的这个 vesco 的自动引入了, 让我们去调用它下面的一个函数 next int, 然后这个它接收一个参数,代表最大的数字,我们试一下,我们填个一百啊,然后我们去输出一下这个 random num 的值,记得打分号逆行,发现是四十四, 再运行八十五,哎,三十二,五十五,二十四。其实呢,这个 next in 代表是什么呢?代表我们可以点进去看他的文档,发现啊,他的说明就是啊,生成一个不为负的啊,就是是零或者正数的一个随 基整数啊,然后这个 max 的意思就是说我们从零到一百去生成,那如果我们是五十呢?哎,那就是我们生成的随机数的范围就是零到五十,我们这里使用一百吧。啊,欢迎来到猜数字小游戏,我们再加一个提示, 请请请猜一个 零到一百的整数,整数,哎,哎呦,整数, 这样我们来提升一下,我们用户去输入一个整数,那所以我们的下一步呢,就是去获取用户的输入,对不对?好,这里呢,我们使用另外一个袋提供 的方法哈,我们使用一个对象叫做 s, t, d, in, 点儿 read, line, think, 我们试着去输出一下它的值,叫做 input, 还是使用 print 去调用一下, 点击 run, 哎,我们发现这个时候程序没有退出啊,它正在运行当中,我们可以去输入一个值,比如我们输入一个一百,哎,报错了啊,这里我们换个方式进行运行,我们这里使用 dart game。 好,这里我们发现程序并没有退出,我们试着输出一个啊,我们随意输入一个数字一百,然后这里就可以去这个 print 函数就可以,嗯,输出出来,用户输入了,到底 是什么?我们可以这样让这个咱们城市更加清晰一点,用 pro 的输入式, 我们输入一个啊,五十吧,四十吧,哎,用户的输入是四十啊,这样就可以了,所以接下来我们要做的其实就是进入一个循环,你在每次的循环里面使用 s, t, d, e 这样的方式来对比用户输入和随机数字,然后输入提示 好,首先呢循环,这个循环呢应该是一个死循环,对吧?啊,因为只有当这个用户输入正确或者说失败的次次数啊,过多的时候他才会退出这个循环。使用一个 while well, 就是 跟这个 c c 加加系列的这个语言也是类似的一个循环的语法,这是进入一个循环, 然后我们在这个群块里面获取用户的输入 to var ensor, 用户的回答等于这个 s g d in realign think, 然后这个时候我们来对比一下这个数字,啊,对,这里呢我们需要注意一个事情,就是我们首先来输出一下用户的输,用户的回答,然后我们再输出一下用户的回答,他的类型。我们之前讲过一个 run time tap 来运行一下这个程序, 这输入一个五十 am, 发现我们即使输入的是一个数字呢,但是最后返回出来的是一个字不串类型,哎,因为这个时候我们没有把它解析为数字类型,所以这是不行的, 我们试着把它解析为一个数字类型,使用一个方法 int 它从一个,它从一个支付串作为一个参数去解析出一个数字,一个整形 的,然后这依旧有报错,报错是就 the argument type, 就是说,哎,我们可以来看一下 redline think, 里面的反馈词是一个 string 加上一个问号, 这意思是 redline think 它可以读取得到,用户的输入是一个 strengths of charity, 也可能读取不到,可能是一个 now。 我们这里简单起见,我们使用一个,我们使用一个感叹号,这感叹号的意思呢,就是我们确保啊,这个可控值啊,绝对不会为空啊,当然这种是不太安全的做法啊,这里 只是简单起见吗?好,我们现在获取了用户的回答,我们再次来打印一下用户的回答以及用户回答这个变量啊,他的 run time type 究竟是什么?再次运行一下, 比如说我们猜是五十,哎,现在已经为 ink 了,哎,为 ink 呢,就是说明我们就已经可以开始啊,对比这个 用户的回答和咱们真正的这个答案呢,这个时候我们可以使用条件控制流程控制 if, 假如啊,第一步,假如用户的回答比咱们这个生成的数字要小,怎么办呢?我们说 if user answer 小于,诶,这个 random number 怎么办?说 print 太小了,然后如果太大了怎么办呢? else if 是不是 user an answer 大于 random none 怎么办? print 太大了。 还有一种情况呢,就是不小也不大,就刚好等于直接 als, 或者太大就刚刚好 print。 恭喜您加个 emoji, 猜对了,猜对了该怎么办呢?啊,我们还记得哈,我们在一个 vlog 的循环里面,猜对了我们就 break 掉,我们跳出这个循环,输出结果,哎,我们说游戏结束 好,到这里为止呢,我们就已经成功的去写了一个猜数字的小游戏,我们把它缩小一点,我们来看一下这个程序, 首先第一步呢,是生成一个随机数字啊,零到一百,然后我们告诉用户猜一个零到一百整数。然后第二步呢,进入一个死循环,然后在这个循环当中去获取用户的输入,并使用 in the departs 把它翻译为一个整形,而不是字符串, 然后根据这个对比的情况,然后告诉用户这个是小了还是大了,然后最后如果刚刚好呢,就恭喜用户猜对了,然后跳出这个循环,最后输出这个结果,我们来试一下这个运行的效果。 好,我们来试一下,比如我们猜一个五十太大,那四十呢?太小了,四十五太小了,四十七太大了,那就只有四十 六了,哎,就是猜对了,按游戏结束就刚刚好,好这里呢,然后在这个程序当中呢,我们使用的 does 定义变量的啊语法,我们也使用了两个新的函数, 或者说是 dart 的 api, 一个是 random 点 next int 是生成水随机数来自一个包 dart math, 我们还使用了一个 s t d 应获取用户输入 来自 dart i o, 我们使用了这两个 dart 提供的 a p i 啊,而这里我们也要提到一下我们 dart 里面的 import 与 语法,这 import 语法呢,是可以导入外部的包,这里是这里,我们导入的包是袋的提供的,所以就是一个袋的一个冒号,它的 io 包,它的 mas 包,哎,以后呢,我们也可能会使用到 啊,你看这有有很多大的提供的包啊,或者说是一些其他的第三方的包,包括我们的 flatter 包也是一样通过 import 一句去引入啊,这里没有关系啊,我们 我们如果使用 dartpad 的话,我们照着这样写就可以,如果我们使用 vs code 或者其他 id 的话,我们让这个编辑器帮我们自动导入的是我们要关注的是我们的麦函数里面的内容,它的具体的流程,它的写法是什么样子的?它的逻辑是什么样子的 啊?其实这里呢,我们还可以继续去优化我们的这个程序啊,我们之前讲变量的时候,我们说这个 var 定义的变量它是可 变的,比如说这里我们生成了一个随之数,哎,但是我们这个是还是可以让他等于五十,哎,等于六十。但这个程序里面,我们这个逻辑里面这个 random num 啊,实际上是 定义了之后就不再会变了。所以说我们应该把这个 find, 这个 va 使用一个常量定义会更好。我们可以使用 final, 哎,那我们可不可以使用 const 呢?不行,为啥?因为 cons 它只能是在变异的时候 计算出值了。这个 random next game 它相当于是调用了一个函数,函数是在运行的时候才会求出值,所以这里我们不能使用 cost, 不能使用 final。 好,我们来看一下还有没有什么地方是可以继续被优化的。 同样这个 user answer 也是可以使用 find 的,因为我们并不会对它进行重新复制。好。到目前为止,我们优化了两个点,把 二关键字改成了翻译呢,那这个要优化的点呢?我们来加一个新的功能啊,我们不能让他,我们不能让这个用户一直猜啊。我们来设一个条件,就是说当用户猜了五次之后,还没有成功,咋办呢?就说你失败了,哎,对,所以这个时候我们需要来记录一个 变量,他说 why try and count 就是尝试的次数,写一个注射, 然后呢,这里我们获取到用户的输入,用户输入一次代表呢?我们就是尝试一次让 try count 等于 try count 加一,当然跟其他的编程元一样呢,我这里可以简写为加等于一,然后我们然后我们再定义一个长量, 就是这里我们可以使用 cost max try 就是我们最大的尝试次数,假设是个五, 因为这个 max trinion 它的值是在变异的时候就已经确定了是五,或者说是六十三十四,哎,都可以,所以这里我们使用 cons 就会比使用 final 要更好一些啊。 然后我们来关注逻辑的部分,现在我们把这个用户的输入啊加一了之后,我们来看 这个 if 语句里面前两个分支啊,用户猜小了,猜大了,其实都是失败对不对?如果失败了再输出碗太小了之后,哎,我们就要告诉用户, 我们就要来对比啊,如果这个 try count 是大于了,咱们这个 max try 怎么办呢?就是说首先要 跳出这个循环对不对?那让用户继续猜了,然后我们要告诉用户 print 你失败了 啊,就是在用户猜小的情况下,我们要判断用户是不是这个猜的次数大于了最大的尝试的次数,我们同样呢,猜大了,我们也需要一个这样的语句,好, 到目前为止,我们来试一下这个效果啊,为了我们测试呢,我们把这个最大的尝试次数改成三,好,我们来猜一个一百,哎,太大了怎么办?我们猜七十,太小了,你猜八十, 哎,已经尝试了三次了对不对?但这里还是没有告诉我们游戏结束,这咋办呢?我们试一下啊,再说个八十吧,哎,其实我们这拆了四次才让 我们的程序啊,才告诉我已经失败了,说明我们的逻辑其实上是有一点问题,问题在哪呢?问题就在于这,这是说,哎,用户已经猜完了之后,假设不对,太小了,然后我们来判断 try count 是不是大于 max try, 但如果是第三次猜测, 那就是这个 try count 就等于三的时候啊, try count 等于三的时候是意味着用户已经拆了,拆了, 拆了三次,那它是否大于 max try 呢?是不会的对不对?所以这不应该使用大于啊,应该使用你的大于等于符号,这样就可以了。好, 接下来我们再来运行一下,看一下效果,猜一百,猜到猜九十九,九十八,哎,就已经告诉我失败了,游戏结束。那为了我们更好的去说明这个情况呢?我们会说,为什么失败了,猜测次数过多, 再来试一次,一百九十九,九十八,嗯, test 次数过多,游戏结束。好,我们可以发现这里呢,有一个问题,就是 ager 这二十九到三十二行,还有三十六行到三十九行是一模一样的代码,这里我们需要优化一下。怎么优化呢?我们发现这个义父啊,他的条件分支语句,哎,第一,第一个分支是不是用户猜错了,第二个分支也是用户猜错了,其实呢,他可他们可以被合并为同一个情。 那具体我们怎么来优化呢?我们来看一下啊,我们首先把这给他注视掉,我们不要,我们重新来写,写一个更加优秀的版本。我们这首先判断, 首先判断 use their answer 是不是跟咱们这个 random noun 相等呢?如果相等怎么办呢?就是说猜对了能跳出循环, 而我们知道,假如用户猜对了,走进这个分支之后, break 已经跳出循环了,所以下面的代码是不会再继续执行的了。 但是如果代码一旦执行到下面,说明啊,咱们用户没有猜对,这个时候我们可以来告诉用户,猜大了或者猜小了 of neck 格式, 发一下咱们的代码。哎,这有一个注视。 那首先呢,第一步是不是等于,哎,等于就是猜对了,那下面全是什么是猜测失败的?那对于猜测失败,无论是猜大了还是猜小了,我们都要执行一个逻辑,那就是对比尝试的次数是不是大于咱们配置的最差的这个尝试次数。 我们来格式化一下代码。好,这个是我们写的一个更加优化的版本,去除了重复代码。这样呢,这个判断尝试次数是不是大于最大尝试次数的代码呢?就只有一次了。 好,我们来运行一下,看看是不是符合我们的预期啊,我们还是差一百九十九,九十八,哎,我们发现这个程序执行的依然是正确的。好,我们在这个程序当中 中呢,除了我们运用到了我们最开始学的这个 dart 变量,还有长量,然后我们运用到了这两个 dart 提供的函数和方法,我们还学到了什么 dart 里面的循环和条件分支 这些内容呢?是相对比较简单的,但是基于这些比较简单的内容呢,我们也可以啊,容易的写出一个完整的程序,比如说这样一个猜数字的小游戏。嗯,那到目前为止呢,我们就介绍了一些 delt 当中最基础的概念和语法。

想体验 flatter 超级好用的节点就来抄 t i d 一 把,支持接近五百个原声组建,你可能说节点单屏拖拽不能完成一些复杂开发,针对特殊开发需求,我们正在优化之中。并且我们还支持大绿源直接转为蓝图, 蓝图直接转为袋,实现无缝衔接,来满足大家所有的开发需求,无限 diy 让你爽玩到爆炸! 还支持全平台打包,不管是安卓还是 ios 或者 windows, 哪怕 macloud 又或者是最新鸿蒙都能满足。所以快来体验这个把 platter 当一部游戏的 x p i d e 吧!

最近我感觉纯粹说大实话的实时评论越来越难做了,除非你愿意给自己的文章加点粉红色,否则说寸步难行也并不为过。 这印照出的其实是一种非常不健康的、极度缺乏自信的生态。 就拿我自己的实际情况来举例吧,我有三分之一的作品根本就发不出来, 而发出来的另外三分之二,又有将近一半是被屏蔽或半屏蔽状态,有的完全就是零阅读,有的限制为互关可见,有的限制为粉丝可见。正常状态的视频不足三分之一, 而且发视频审核的时间特别长,有时候审核的时间长达数小时。我不禁感慨, 小女子何德何能承蒙如此重点关照。这种现象我也想学着用几个成语来表达。草木皆兵杯弓蛇影惊弓之鸟。 一只本身病弱到极点的鸟,看到有人随手摆弄一下弹工会把他吓得够呛,听见拨弄弓弦的声音会把他吓得半死。而在雄鹰的法则里,射向他的箭只是为他测量风骨的标尺。 有个情况想和大家沟通一下,我有很多视频是在发出来几个小时甚至一两天后再被屏蔽的, 开始我还不明白是怎么回事,最近弄清楚了,可能是因为评论区出现了较多违规评论,导致视频被屏蔽,所以拜托大家评论区尽量合规交流。 我非常理解有些话题大家有话想说,但是我们还是尽量克制吧,同屏的人连沉默都是摩斯密码,一点就通,感谢有您!

