游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

现代编程语言那些让人激动的特性

  引言
  有没有觉得,发展到现在,软件开发行业是越来越成熟了,无论是过程管理、架构方法、设计方法,还是语言、平台、框架、工具等,都发展到了一个前所未有的高度,相关思想和理念也日臻完善,我们真正进入了一个最好的时代。
  单就编程语言来说,近些年包括Scala(2003)、Groovy(2003)、Go(2009)、Kotlin(2011)、Swift(2014)等新兴编程语言如雨后春笋版涌现出来,也给我们带来了很多让人眼前一亮的编程特性,甚至Java这等老牌编程语言也是不断推陈出新,编程再也不像过去那般枯燥。
  本篇就带大家一起感受一下现代编程语言那些激动人心的特性。原型(Prototype)
  这个特性其实有点早了,但是也是很早就让人感动的语言特性了,熟悉Javascript的同学应该对它很了解。Javascript语言具有动态性,我们可以随时为类的某个实例添加方法,也可以利用动态原型,为类的所有实例添加方法,有没有感觉扩展类的实现变得非常方便了呢?声明一个Person类classPerson{constructor(name,birthdate){this。namename;this。birthdatebirthdate;}}实例化两个Person对象letperson1newPerson(张三,Date。now());letperson2newPerson(李四,Date。now());为其中一个person对象动态添加名为debug的方法,并调用person1。debugfunction(){console。debug(this);}person1。debug();利用动态原型为Person类添加名为debug的方法Person。prototype。debugfunction(){console。debug(this);}实例化一个新的Person对象,并调用其debug方法letperson3newPerson(王五,Date。now());person3。debug();扩展(Extension)
  扩展和原型很像,允许我们在不修改或继承类的情况下,将新的函数方法添加到原类中。这个特性较早见于C这门语言,目前在Kotlin、Swift中均可以看到。这里顺便说一下C,当时C出来的时候,不得不说很多特性是非常棒的,包括扩展方法、泛型、分部类等等,比Java好不要太多。像Kotlin,不仅可以扩展类的方法,还可以扩展类的属性。Java中,通过继承String类来添加capitalize方法,实现首字母大写publicclassStringCapitalizeextendsString{publicStringcapitalize(){varcharacterthis。substring(0,1)。toUpperCase();varrestthis。substring(1,this。length()1)。toLowerCase();returncharacterrest;}}Java中,通过添加工具类扩展String类publicclassStringUtils{publicstaticStringcapitalize(Stringstring){varcharacterstring。substring(0,1)。toUpperCase();varreststring。substring(1,string。length()1)。toLowerCase();returncharacterrest;}}Kotlin中,通过Extension特性,为String类添加方法。作用域内所有的String实例均有了这个方法。funString。capitalize():String{valcharactersubstring(0,1)。toUpperCase()valrestsubstring(1,length1)。toLowerCase()returncharacterrest}隐式接口实现
  前两个都是关于扩展代码的,这里再来一个。我们知道Java1。8以来,接口interface里的方法可以有自己的默认实现了,大大方便了实现类,减少了重复代码。相对于Java的这个实现是显示的,Go语言的接口实现可以是隐式的,添加隐式实现后,所有继承的结构(Go没有类,都是结构struct)都可以调用这个方法,和前面的两个特性有异曲同工之妙,下面我们对比看一下。这是Java的接口,里面默认显示实现了display方法publicinterfaceShape{floatarea();floatperimeter();defaultvoiddisplay(){System。out。println(area());}}这个类实现了上面的接口,其实例对象可以直接调用display方法publicclassRectangleimplementsShape{publicfinalfloatwidth;publicfinalfloatheight;publicRectangle(floatwidth,floatheight){this。widthwidth;this。heightheight;}。。。。。中间省略若干代码。。。publicstaticvoidmain(String。。。args){varrectnewRectangle(2。0f,3。0f);rect。display();调用接口中的默认实现}}以下为Go语言实现packagemainimport(fmt)接口定义typeshapeinterface{area()float32perimeter()float32}结构定义typerectanglestruct{widthfloat32heightfloat32}添加area、perimeter函数到rectanglestructfunc(rectrectangle)area()float32{returnrect。widthrect。height}func(rectrectangle)perimeter()float32{return2rect。width2rect。height}为shape接口隐式添加display方法及实现funcdisplay(shapeshape){fmt。Println(shape。area())}为实例调用display方法funcmain(){rect:rectangle{width:2,height:3}display(rect)}宏(Macro)
  C语言就有宏的概念,通过define定义,然后在代码中进行替换。宏作为Rust语言的高级特性,可以操作语法单元,是一种通过编写代码来生成代码的方式,被称作元编程(metaprogramming)。相对于函数,宏可以接受任意多个参数,可以减少重复代码,定义DSL。宏语法比较复杂,难以编写和调试,以至于在Rust文档中说,宏将是其最后的特性。定义一个生成函数的宏,将通过模式匹配生成函数macrorules!createfunction{(funcname:ident)(fnfuncname(){println!(function{:?}iscalled,stringify!(funcname))})}fnmain(){调用之前定义的宏createfunction!(foo);也可以这样:createfunction!〔foo〕;foo();}定义名为vector的宏,会根据第18行模式匹配的次数,重复第21行语句相同次数macrorules!vector{((x:expr),){{letmuttempvecVec::new();(tempvec。push(x);)tempvec}};}调用上面的宏生成的函数,创建一个Vectorfnmain(){letavector!〔1,2,4,8〕;println!({:?},a);}相当于执行了如下代码{letmuttempvecVec::new();tempvec。push(1);tempvec。push(2);tempvec。push(4);tempvec。push(8);tempvec}自动属性
  当你回想写代码枯燥的时候,应该会想到为字段编写getter、setter吧?较早的时候,C就意识到了这个问题,贴心地推出了自动属性这个语法糖。而Java开发者则是通过Eclipse、IDEA这样的开发工具来自动生成getter、setter代码。当然,现在也可以依赖Lombook包,使用lombok的注解GetterSetter来编译时生成相关代码。Java:需要手动编写getter、setterpublicclassPerson{privateStringname;publicsetName(Stringname){this。namename;}publicgetName(){returnthis。name;}}C:有了自动属性,是不是省事多了?publicclassPerson{publicstringName{get;privateset;}}可选链(optionalchaining)
  据说空指针异常是软件业最贵的异常,价值10亿美元。你有没有为处理调用链中的null值而烦恼过?又或者被伤害过?Kotlin会在编译期提示对可能为null变量的不安全使用,也提供了Elvis操作符?:来方便地处理null值。而有了可选链,就舒服多了。可选链语法应该较早出现在JavaScript语言中,新兴语言Swift也提供了这一省心的特性。Swift英明地决定变量是不允许直接存储NIL值,当然也提供了optionals的装箱功能允许将NIL或其它值包装起来,方便有时使用。这个是JavaScript里的示例constobj{a:{b:〔{name:obj}〕}}原本的写法console。log(objobj。aobj。a。b。lengthobj。a。b〔0〕。name)可选链写法,是不是很酷?console。log(obj?。a?。b?。〔0〕?。name);objconsole。log(obj?。b?。c?。d)undefined这个是Swift里的示例classPerson{varresidence:Residence?这里是一个optional的语法,该字段可存储NIL值}classResidence{varnumberOfRooms1}letjohnPerson()链接可选residence?属性,如果residence存在则取回numberOfRooms的值ifletroomCountjohn。residence?。numberOfRooms{print(John的房间号为(roomCount)。)}else{print(不能查看房间号)}卫语句(Guard)
  输入乃万恶之源,函数首要的事情就是检查不规范和不安全的输入,这也是卫语句的来历。Swift语言为此提供了专门的卫语句语法,有了它的贴身防护,整个代码都干爽多了,剧烈运动都不怕,不信往下瞧:异常枚举enumCircleAreaCalculationError:ErrorType{caseRadiusNotSpecifiedcaseRadiusUnvalid}传统的卫语句写法(当然可以写的更简洁,这个写法明显是故意的)funccalculateCirlceArea(radius:Double?)throwsDouble{ifletradiusradius{ifradius0{returnradiusradiusMPI}else{throwCircleAreaCalculationError。RadiusUnvalid}}else{throwCircleAreaCalculationError。RadiusNotSpecified}}使用guard关键字的写法,代码不再嵌套那么多了吧funccalculateCirleArea(radius:Double?)throwsDouble{guardletradiusradiuselse{throwCircleAreaCalculationError。RadiusNotSpecified}guardradius0else{throwCircleAreaCalculationError。RadiusUnvalid}returnradiusradiusMPI}Lambda表达式
  如果要评选最酷的语言特性,那么Lambda表达式必须获得提名。Lambda表达式很早就出现在Lisp语言中,python也有,在后来的C语言大放异彩,又一次狠狠地羞辱了不长进的Java,而Java也终于在1。8版本后加入了这一特性,甚至C11也光荣地上车了。JDK7匿名内部类写法ListStringlistArrays。asList(I,love,you,too);Collections。sort(list,newComparatorString(){接口名Overridepublicintcompare(Strings1,Strings2){方法名if(s1null)return1;if(s2null)return1;returns1。length()s2。length();}});JDK8Lambda表达式写法ListStringlistArrays。asList(I,love,you,too);Collections。sort(list,(s1,s2){注意这里!!!!,是不是很酷?if(s1null)return1;if(s2null)return1;returns1。length()s2。length();});JDK8Lambda表达式写法newThread(()System。out。println(Threadrun())还有这里!!!帅不帅?)。start();python中的lambdadefmakeincrementor(n):returnlambdax:xnaddFivemakeincrementor(5)addFive(10)返回15,动态生成函数,腻害不腻害?渐进式类型(GradualTyping)
  我们知道编程语言有静态和动态之分,静态语言如Java、C、C和C,动态语言如Perl,Python,JavaScript,Ruby和PHP等,多数为脚本语言。而融合了静态和动态特性的语音,就被称为渐进式语言,如TypeScript、CommonLISP、Dylan、Cecil、VisualBasic。NET、BiglooScheme、Strongtalk等。静态类型检查可以尽早地发现BUG,动态类型检查可以方便地处理依赖于运行时信息的值的类型。渐进式语言允许类型注释来控制程序的一部分使用静态类型检查,而另一部分为动态检查,更具灵活性。Python从3。5开始引入了对静态类型检查的支持。静态检查,已注明参数类型为floatdefpide(pidend:float,pisor:float)float:returnpidendpisor动态检查,未注明参数类型defpide(pidend,pisor):returnpidendpisor不变性(Immutability)
  在面向对象的编程语言中,状态是计算的基础。由于可变状态的存在,在编写高并发,多线程代码时,无法知道并行进行的诸多状态读写中是否有顺序上的错误,而且这种错误又是难以察觉的,而不变性则规避了这个问题。不变性是函数式编程的基础,不变性意味着函数没有副作用,无论多少次执行,相同的输入就意味着相同的输出,所有线程都可以无所顾忌的执行同一个函数的代码,代码更像数学函数,更易理解和测试。
  面向对象的编程通过封装可变动的部分来构造出可让人读懂的代码,函数式编程则是通过最小化可变动的部分来构造出可让人读懂的代码。
  String就是构建在Java语言内核中的不可变类的一个典型例子。Java的CopyOnWrite系列容器类也是利用了不变性增强了并发安全性。Java可以通过final修饰符实现类和变量的不可变。而Scala、Swift、Groovy等语言也有各自的语法实现不可变的变量和类。Java、Groovy的不变量privatefinalStringimmutable;Scala的不变量,注意val,而不是varvalimmutable1Swift使用let声明不变量,而不是varletimmutable1Groovy使用注解声明不可变类型ImmutableclassPreson{}Swift实现不可变类structPerson{letname:Stringletinterests:〔String〕}多重分派(MultipleDispatch)
  多重分派是一些编程语言的特性,其中的函数或者方法,可以在运行时间(动态的)使用一个或多个实际参数的组合特征,路由动态分派至实现函数或方法。多重分派主要区别于我们常见的重载方法,重载方法是在编译期就绑定了,而多重分派是在运行期分派的。Lisp、Julia、C、Groovy等语言内建多分派特性,JavaScript、Python和C等语言通过扩展支持多分派。多重分派可以避免我们写很多分支条件,而是更直观地用对象类型表达,使代码变得可读性更好并且较少发生错误。Julia多分派示例collidewith(x::Asteroid,y::Asteroid)。。。dealwithasteroidhittingasteroidcollidewith(x::Asteroid,y::Spaceship)。。。dealwithasteroidhittingspaceshipcollidewith(x::Spaceship,y::Asteroid)。。。dealwithspaceshiphittingasteroidcollidewith(x::Spaceship,y::Spaceship)。。。dealwithspaceshiphittingspaceship以下是c多分派示例(注意关键字dynamic)classProgram{staticvoidMain(){Console。WriteLine(Collider。Collide(newAsteroid(101),newSpaceship(300)));Console。WriteLine(Collider。Collide(newAsteroid(10),newSpaceship(10)));Console。WriteLine(Collider。Collide(newSpaceship(101),newSpaceship(10)));}}staticclassCollider{publicstaticstringCollide(SpaceObjectx,SpaceObjecty)((x。Size100)(y。Size100))?Bigboom!:CollideWith(xasdynamic,yasdynamic);privatestaticstringCollideWith(Asteroidx,Asteroidy)aa;privatestaticstringCollideWith(Asteroidx,Spaceshipy)as;privatestaticstringCollideWith(Spaceshipx,Asteroidy)sa;privatestaticstringCollideWith(Spaceshipx,Spaceshipy)ss;}abstractclassSpaceObject{publicSpaceObject(intsize)Sizesize;publicintSize{get;}}classAsteroid:SpaceObject{publicAsteroid(intsize):base(size){}}classSpaceship:SpaceObject{publicSpaceship(intsize):base(size){}}以下是python用多分派实现的剪刀、石头、布frommultipledispatchimportdispatchdispatch(Rock,Rock)defbeats3(x,y):returnNonedispatch(Rock,Paper)defbeats3(x,y):returnydispatch(Rock,Scissors)defbeats3(x,y):returnxdispatch(Paper,Rock)defbeats3(x,y):returnxdispatch(Paper,Paper)defbeats3(x,y):returnNonedispatch(Paper,Scissors)defbeats3(x,y):returnxdispatch(Scissors,Rock)defbeats3(x,y):returnydispatch(Scissors,Paper)defbeats3(x,y):returnxdispatch(Scissors,Scissors)defbeats3(x,y):returnNonedispatch(object,object)defbeats3(x,y):ifnotisinstance(x,(Rock,Paper,Scissors)):raiseTypeError(Unknownfirstthing)else:raiseTypeError(Unknownsecondthing)解构(Destructuring)
  前面几个特性是不是略显沉闷,那么来看一下这个激动一下。解构这一语法特性用于从数组索引或对象属性创建变量,简直帅到飞起。JavaScriptES6的解构示例var〔foo〕array;varfooarray〔someIndex〕;还是JavaScript的,有没有受惊???〔a,b,。。。rest〕〔10,20,30,40,50〕;console。log(rest);将输出:Array〔30,40,50〕以下3个是Python的解构start,〔1,4,3,8〕print(start)输出1print()输出〔4,3,8〕,end〔red,blue,green〕print(end)输出greenstart,,(lastwordfirstletter,)〔Hi,How,are,you?〕print(lastwordfirstletter)输出y内联测试(InlineTesting)
  爱写单元测试的同学有福了,这个绝壁是重磅炸弹,在生产代码里夹着测试代码,你有想过这么写测试吗?谁想的?简直脑洞打开啊!该特性在Pyret语言中,Pyret旨在作为编程教育的杰出选择,同时探索脚本和函数式编程的融合。Pyretfunsum(l):cases(List)l:empty0link(first,rest)firstsum(rest)endwhere:这里就是测试代码啦,简直要疯了sum(〔list:〕)is0sum(〔list:1,2,3〕)is6end复杂一点的eps0。001funddx(f):doc:Approximatethederivativeofflam(x):(f(xeps)f(x))epsendwhere:funsquare(x):xxendfunaround(delta,target):lam(actual):numabs(actualtarget)deltaendenddsquareddx(square)dsquare(5)satisfiesaround(0。1,10)dsquare(10)satisfiesaround(0。1,20)end内联编译期(InlineAssemblers)
  如果内联测试没有让你震惊,D语言内联编译期的这个特性绝对会让你惊掉下巴,基于该特性,开发人员可以直接在D语言中嵌入汇编代码,彻底放飞自我了,俺滴亲娘啊!受不了!受不了!顺便说一下,D语言比较小众,是C的一个改进型,它包括了按合约设计、垃圾回收、关联数组、数组切片和惰性求值等特性。voidpc;asm{popEBX;movpc〔EBP〕,EBX;}模式匹配(patternmatching)
  好吧,我们看点其它的来压压惊吧。尽管Kotlin语言也说自己实现了模式匹配,但是实际上只是一点点帅,真正帅的是Elixir语言的模式匹配,Elixir作为一种在ErlangOTP上运行的动态类型语言,将模式匹配提升到了一个全新的水平。Kotlin所谓的模式匹配,虽然很帅,但是还有switch的影子varstatusCode:IntvalerrorMessagewhen(statusCode){401Unauthorized403Forbidden500InternalServerErrorelseUnrecognizedStatusCode}valerrorMessagewhen{statusCode401UnauthorizedstatusCode403ForbiddenstatusCode400100ClientErrorstatusCode500InternalServerErrorstatusCode500100ServerErrorelseUnrecognizedStatusCode}Elixir的模式匹配,实现变量的解构,a、b、c将分别依次被赋值{a,b,c}{:hello,world,42}head将等于1,tail将等于〔2,3〕〔headtail〕〔1,2,3〕(声明性循环)forcomprehensions
  在编程语法上,Python真是个神一样的存在,for循环都能写出花来。Python第一种写法numbers〔〕fornin〔1,2,3,4,5〕:numbers。append(n)print(numbers)Python的forcomprehensions写法numbers〔nfornin〔1,2,3,4,5〕〕print(numbers)输出〔1,2,3,4,5〕还可以计算numbers〔n2fornin〔1,2,3,4,5〕〕print(numbers)输出〔1,4,9,16,25〕还能过滤numbers〔n2fornin〔1,2,3,4,5〕ifn20〕print(numbers)输出〔4,16〕还能组合numbers〔a:nfornin〔1,2,3〕forain〔a,b〕〕print(numbers)输出〔(a,1),(b,1),(a,2),(b,2),(a,3),(b,3)〕这不,把Scala也带坏了valexecutionTimeListList((test1,100),(test2,230))valnumberOfAssertsWithExecutionTime:List〔(String,Int,Int)〕for{resultresults(id,time)executionTimeListifresult。idid}yield((id,result。totalAsserts,time))numberOfAssertsWithExecutionTime为List〔(test1,10,100),(test2,6,230)〕流(Stream)
  Java8中提供了StreamAPI特性,Stream使用一种类似用SQL语句从数据库查询数据的直观方式,来提供一种对Java集合运算和表达的高阶抽象。事实上这个特性C早就有了(Java又躺枪一次)。不得不说,利用这个特性写出来的代码,看上去还真的是很流利的。Java的StreamAPI语法ListIntegertransactionsIdswidgets。stream()。filter(bb。getColor()RED)。sorted((x,y)x。getWeight()y。getWeight())。mapToInt(Widget::getWeight)。sum();c的LINQ示例int〔〕numbersnewint〔7〕{0,1,2,3,4,5,6};varnumQueryfromnuminnumberswhere(num2)0selectnum;结语
  至此,本篇就结束了,基本上领略了一下各编程语言的风情,有没有感觉一下子学会了很多编程语言?好的,以后关注到新的特性,还会再补充。

遗产是个古老的词汇的阅读题及答案遗产是个古老的词汇,它的原始概念是指先辈留下的财产。在传统的遗产观中,遗产只是一种私有的物质财富。19世纪中期,开始有人把祖先留下的具有重要历史文化价值的公共财物同样视作遗产。……始得西山宴游记阅读与答案始得西山宴游记今年九月二十八日,因坐法华西亭,望西山,始指异之。遂命仆过湘扛,缘染溪,斫榛莽,焚茅筏,穷山之高而止。攀捷而登,箕踞而邀,则凡数州之土壤,皆在衽席之下。其高……用家庭作业提高课堂质量在英语课堂教学急需优化的今天,我们仍能见到课堂上学生对每个单元a的慢吞吞的学习速度,或者是学完它之后仍有些学生难以消化老师对此忧心忡忡,而学习所占用的大量时间也让人心疼怎……幼儿园打招呼优秀教案设计幼儿园打招呼教案,幼儿年龄比较小,很多幼儿都还没有见面打招呼的习惯,这是一种不好的现象,教师们要教会幼儿见到熟人打招呼问好,让他们养成良好的礼貌习惯。1幼儿园打招呼教案:我会打……9我的信念我的信念一、教学目标1、理解课文内容2、了解居里夫人的人格美以及她取得的巨大成就与其性格的联系。3、学习本文质朴、真诚、富有哲理的语言。二、重点、……两小儿辩日的优秀教学设计【设计理念】在新课标基本理念的指导下,精心组织学习活动,关注过程,为学生提供一个交互式的学习平台,通过生生合作、师生合作、同桌合作、小组合作、全班合作,使每个学生的学习兴……一年级数学分解合成教学反思布鲁纳说:学习的最好刺激是对所学材料的兴趣。在教学中我安排了各种形式的游戏活动,通过游戏激发学生的兴趣,是他们在玩中学,在乐中悟。学生在自由、轻松的课堂气氛下,主动地参与到教学……幼儿园体育教学活动教案体育教学活动的开展是为了引导幼儿们保持一个健康的身体,下面幼儿园体育教学活动教案是小编为大家整理的,在这里跟大家分享一下。【活动设计】近期观察中班幼儿在晨间操跳瓶子……进展的同义词以及造句进展的同义词以及造句都有哪些内容呢?我们不妨一起来参考下范文吧!以下是小编为大家搜集整理提供到的进展的同义词以及造句,希望对您有所帮助。欢迎阅读参考学习!进展意思:……浮现的近义词是什么在这种热烈的气氛下,她偶尔在他的脑海里浮现出来。下面是小编收集整理的浮现的近义词,希望对您有所帮助!近义词出现、呈现、展现、展示、映现、显现、显露、涌现、闪现……纸船和风筝教学设计模板【教学过程】一、导入新课1今天我们来学习第二十课,谁来读课题?2我听见了,(教师指筝字)这个字他读得特别准确,他读的是几声?(学生齐答:轻声。)3谁知道……高中语文离骚(节选)教学反思所谓教学反思,是指教师对教育教学实践的再认识、再思考,并以此来总结经验教训,进一步提高教育教学水平下面小编为大家整理了一些关于高中语文离骚(节选)教学反思的范文,供大家参考,希……
三大硬核实力并举筑牢网络安全防火墙近年来,云计算、大数据等新兴领域快速发展,越来越多的行业选择将数据、交易场景迁移至云端。然而高危漏洞、网络诈骗、数据泄露事件频发,各行各业对网络安全要求日益增加;同时,随着网络……有史以来最古老的哺乳动物蛀牙化石5400万年前甜食导致的龋齿在5400万年前的早期灵长类动物中,蛀牙问题出人意料地极为普遍。新的化石证据表明,哺乳动物产生蛀牙问题已经存在很长很长一段时间了,我们可以把这归咎于我们对甜食的永恒热爱。……商业智能(BI)解决方案服装制造业一、服装制造企业数据可视化建设的应用将服装制造企业在ERP、MES、PLM等业务系统中积累的数据,通过报表、图表展示,通过查询、交互式分析对经营进行指导性判断。服装制造企……佛教阅读练习及参考答案佛教在两汉之际由印度传入的外来文化。传来之初,人们对它了解甚浅。汉末、三国时期,佛经已渐有翻译。迨至东晋时期,则开始了大规模佛经传译的工作。这时,东来传教的高僧日多,本土的出家……实施科教兴国战略教学反思《实施科教兴国的发展战略》是九年级思想品德(人教版)第四课第四框,这一框题从科学技术是第一生产力到百年大计,下面给大家分享实施科教兴国战略的教学反思,一起来看看吧!实施科教兴国……说苑阅读答案阅读下列文章,完成1213题。(6分)赵简子问于成抟曰:吾闻夫羊殖者,贤大夫也。是行奚然?对曰:臣抟不知也。简子曰:吾闻之,子与友亲;子而不知,何也?抟曰:其为人也数变,……点名托班教案一、活动目的让幼儿在不知不觉中认识自己的名字和同伴的名字二、活动准备幼儿的彩照每人一张,在每人的照片后面贴上幼儿自己的名字。提前把幼儿的照片贴在墙上,把有名字……用虽然可是而且造句1。虽然这次考试成绩很好,可是我不会骄傲,而且还会更加努力学习。2。虽然这种解法也是正确的,可是,很显然,第一种解法更加简洁,而且更加美观,符合人们的审美需求。3。……综合艺术实践课小伞花优秀说课稿一、说教材1、教材分析《小伞花》是义务教育课程标准实验教科书《艺术》第六册第六单元的歌曲,《小伞花》这首歌抓住了下雨时发出了滴答滴答()雨声的节奏特点,并贯穿始终,……三年级下册语文太阳教学设计《太阳》是一篇逻辑性很强的说明文,教学时,发掘其内蕴,采用适当的课堂教学结构:读思引发提议写练,对训练学生创造性思维将大有裨益。一、读思。这是自学了解梗概,感知课文的过程……阅读五彩地教学反思朗读能发展学生的思维,激发学生的情感,《五彩地》教学反思。阅读教学中,教师应重视指导有感情地读,读出音韵,读出意境,读出情味。在《五彩池》中不断朗读可以理清课文思路,更能体会作……指纹检查实验原理:指纹是由手指上的油脂等分泌物组成。碘受热易升华,而碘蒸气能溶解在指纹上的油脂等手指分泌物中,形成棕色的指纹印迹。实验用品:药品:碘仪器:试管、橡皮塞、药匙、酒精……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网