Ruby语言程序设计-第2章-基本语法_第1页
Ruby语言程序设计-第2章-基本语法_第2页
Ruby语言程序设计-第2章-基本语法_第3页
Ruby语言程序设计-第2章-基本语法_第4页
Ruby语言程序设计-第2章-基本语法_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Ruby语言程序设计

第二章:基本语法沃天宇<woty@>2014-9-24课程基本教学大纲第一部分:Ruby语言基础第一章:Ruby语言概述(2学时)程序设计语言分类回顾、面向对象程序设计语言、脚本式程序设计语言Ruby语言出现历史,基本特征概述,程序设计实例,应用情况举例,基本开发环境配置第二章:Ruby语言基本语法与面向对象特征(2学时)基本控制结构、基本语句、字符串和数字等基本数据类型、表达式类、模块和命名空间;多态与重载;变量及方法的作用域第三章:高级特征(2学时)集合类数据结构,数组和哈希表,基本类库应用函数式语言特征,程序块;反射机制和元编程(metaprogramming)第二部分:基于RubyonRails的Web2.0应用开发第四章:Web概述与RubyonRails开发基础(2学时)RoR基本原理,RoR工程结构,数据库O-RMapping基本概念和技术;基于绞手架的编程第五章:RubyonRails敏捷开发实践1——基本CRUD(2学时)重点掌握活动记录集;数据模型、控制器、视图;数据增删改查操作;表单处理;数据验证;

第六章:RubyonRails敏捷开发实践2——对象关系(2学时)以一个典型blog网站RoR项目为例,介绍基于MVC的RubyonRails开发全过程;常用功能实现技巧(如用户管理等);代码管理系统应用第七章:RubyonRails敏捷开发实践3——AJAX(2学时)XML处理;AJAX;Web服务;电子邮件第八章:Web安全与新兴技术研究与应用热点(2学时)云计算编程、Web与Ruby

on

Rails安全实践Ruby语言基本语法基本语句注释赋值基本控制结构条件判断选择循环基本数据结构表达式常量/变量字符串集合类数据结构数组和哈希表正则表达式Ruby

Essentials/index.php/Ruby_Essentials注释单行注释多行注释#Output"IloveRuby"say="IloveRuby" #Output"IloveRuby"putssay=beginThisisacommentlineitexplainsthatthenextlineofcodedisplaysawelcomemessage=end赋值#Output"IloveRuby"say="IloveRuby"putssay

#

Everystatementhasareturnvaluex=y=1#

Everything

is

an

Objecta=b #ERROR:bisnotdefineda=nila.nil? #=>truenil.nil? #=>true赋值并行赋值irb(main):100:0>a,b,c=10,20,30=>[10,20,30]irb(main):101:0>条件判断x=5if

x>5thenputs“x>5”elseputs“x<=5”endx=5if

x>5thenputs“x>5”elsifx>0puts“0<x<=5”elseputs“x<=0”end条件判断什么是false?x=falseif

xthenputs“a”elseputs“b”endx=""if

xthenputs“a”elseputs“b”endx=0if

xthenputs“a”elseputs“b”endx=nilif

xthenputs“a”elseputs“b”endbaab条件判断my_status="happy"puts"helloworld"ifmy_status=="happy"条件判断后置my_status="happy"puts“helloworld”unlessmy_status!="happy"选择绝对值选择result=casevalue

whenmatch1thenresult1

whenmatch2thenresult2

whenmatch3thenresult3

whenmatch4thenresult4

whenmatch5thenresult5

whenmatch6thenresult6

elseresult7

end选择car="Patriot"manufacturer=casecar when"Focus"then"Ford" when"Navigator"then"Lincoln" when"Camry"then"Toyota" when"Civic"then"Honda" when"Patriot"then"Jeep" when"Jetta"then"VW" when"Ceyene"then"Porsche" when"Outback"then"Subaru" when"520i"then"BMW" when"Tundra"then"Nissan" else"Unknown"endputs"The"+car+"ismadeby"+manufacturer选择区间选择score=70result=casescore when0..40then"Fail" when41..60then"Pass" when61..70then"PasswithMerit" when71..100then"PasswithDistinction" else"InvalidScore“endputsresult循环基本for循环foriin1..10

doputs"helloworld"endforiin1..10

doputs“helloworld”

enddo不可以省略foriin1..10puts"helloworld"enddo可以省略循环区间1..10 #1,2,3,4,5,6,7,8,9,101…10foriin1…10

doputsiend123456789foriin1…10.1

doputsiend循环while

/

untili=0whilei<5do putsi i+=1endi=0putsi+=1untili==5i=10untili<5do putsi i-=1endi=10putsi-=1whilei>5运行结果?if/unless,while/untilifnot<==>unlesswhilenot<==>until使用原则:减少not的使用循环其它循环方式10.times{puts"helloworld"}(1..10).each{puts"helloworld"}1.upto(10){puts"helloworld"}10.downto(1){puts"helloworld"}循环循环变量10.times{

|x|putsx}1.upto(10){|x|putsx}(1..10).each{|x|putsx}10.downto(1){|x|putsx}breakbreak

from

for/while

/

unitli=0whilei<5 putsi i+=1

breakifi==2endforiin1..12doputsi;breakifi>3endbreakbreak

times/upto/downto/each?10.times{

|x|putsxbreakifx>2}1.upto(10){|x|putsxbreakifx>2}(1..10).each{|x|putsxbreakifx>2}10.downto(1){|x|putsxbreakifx>2}区间1..100'a'..'z'用最少的语句,打印右图aababcabcdabcdeabcdefabcdefgabcdefghabcdefghiabcdefghijabcdefghijkabcdefghijklabcdefghijklmabcdefghijklmnabcdefghijklmnoabcdefghijklmnopabcdefghijklmnopqabcdefghijklmnopqrabcdefghijklmnopqrsabcdefghijklmnopqrstabcdefghijklmnopqrstuabcdefghijklmnopqrstuvabcdefghijklmnopqrstuvwabcdefghijklmnopqrstuvwxabcdefghijklmnopqrstuvwxyabcdefghijklmnopqrstuvwxyz('a'..'z').each{|x|('a'..x).each{|x|printx};puts}puts('a'..'z').map{|x|('a'..x).to_a.join}.join("\n")表达式基本操作符OperatorDescription+Addition-Addsvaluesoneithersideoftheoperator-Subtraction-Subtractsrighthandoperandfromlefthandoperand*Multiplication-Multipliesvaluesoneithersideoftheoperator/Division-Divideslefthandoperandbyrighthandoperand%Modulus-Divideslefthandoperandbyrighthandoperandandreturnsremainder**Exponent-Performsexponential(power)calculationonoperators表达式复合赋值CombinedOperatorEquivalentx+=yx=x+yx-=yx=x-yx/=yx=x/yx*=yx=x*yx%=yx=x%yx**=yx=x**y表达式irb(main):013:0>val=17

=>17irb(main):014:0>val==17.0=>trueirb(main):015:0>val.eql?(17.0)=>falseirb(main):016:0>val.eql?(17)=>trueirb(main):017:0>val.equal?(17)=>true表达式比较操作符ComparisonOperatorDescription==Testsforequality.Returnstrueorfalse.eql?Sameas==.

(with

same

type)!=Testsforinequality.Returnstrueforinequalityorfalseforequality<Lessthan.Returnstrueiffirstoperandislessthansecondoperand.Otherwisereturnsfalse>Greaterthan.Returnstrueiffirstoperandisgreaterthansecondoperand.Otherwisereturnsfalse.>=Greaterthanorequalto.Returnstrueiffirstoperandisgreaterthanorequaltosecondoperand.Otherwisereturnsfalse.<=Lessthanorequalto.Returnstrueiffirstoperandislessthanorequaltosecondoperand.Otherwisereturnsfalse.<=>Combinedcomparisonoperator.Returns0iffirstoperandequalssecond,1iffirstoperandisgreaterthanthesecondand-1iffirstoperandislessthanthesecond.表达式按位操作符BitwiseOperatorEquivalent~BitwiseNOT(Complement)|BitwiseOR&BitwiseAND^BitwiseExclusiveOR<<BitwiseShiftLeft>>BitwiseShiftRight表达式逻辑操作符LogicOperatorDescriptionandCalledLogicalANDoperator.Ifboththeoperandsaretruethenthenconditionbecomestrue.orCalledLogicalOROperator.Ifanyofthetwooperandsarenonzerothenthenconditionbecomestrue.&&CalledLogicalANDoperator.Ifboththeoperandsarenonzerothenthenconditionbecomestrue.||CalledLogicalOROperator.Ifanyofthetwooperandsarenonzerothenthenconditionbecomestrue.!CalledLogicalNOTOperator.Usetoreversesthelogicalstateofitsoperand.IfaconditionistruethenLogicalNOToperatorwillmakefalse.notCalledLogicalNOTOperator.Usetoreversesthelogicalstateofitsoperand.IfaconditionistruethenLogicalNOToperatorwillmakefalse.操作符的优先级逻辑操作符MethodOperatorYes[][]=Yes**Yes!~+-Yes*/%Yes+-Yes>><<Yes&Yes^|Yes<=<>>=Yes<=>=====!==~!~MethodOperator&&||.....?

:=%={/=-=+=|=&=>>=<<=*=&&=||=**=defined?notorandifunlesswhileuntilbeginend关于逻辑运算的几个常见问题什么是falseif

0;putstrue;endiffalse;putstrue;endifnil;putstrue;endifObject.new;putstrue;end关于逻辑运算符not,

and,or!,&&,||x=trueandfalsex=true&&falsey=falseortruey=false||truez=!falsez=notfalsetrueorfalseandfalsetrue||false&&false常量/变量NameBeginsWithVariableScope$Aglobalvariable@Aninstancevariable[a-z]or_Alocalvariable[A-Z]Aconstant@@Aclassvariable讨论全局变量:$开头,程序任何位置可访问对象实例属性(成员变量):用@开头,e.g.@asdf类属性:@@开头,e.g.@@asdf本地变量:小写字母开头,作用域为定义所在程序块常量:大写字母开头,e.g.Abcd,ABCD字符串myString=String.new创建myString=String.new("Thisismystring.Getyourownstring")myString=String("Thisisalsomystring")myString="Thisisalsomystring"字符串单引号和双引号str="Thisisabook.\nThatisapen."str='Thisisabook.\nThatisapen.'转义myString=%&ThisismyString&表达式替换var=1/100.0asdf="asdf#{var}"数组(Array)定义数组添加元素读取数据元素a=[]a=[1,2,3]a=%w{123} #=>["1","2","3"]a<<4.0a[10]=1a[0]a[-1]a[1..2]a[1000] #超过数组实际元素数量?nila[-1000] #

nila[1.1] #

2a=[1,2,3]a.size #=>3数组讨论:a=[1,2,3]a<<aa[-1] #=>?a[-1][-1] #=>?遍历数组each方法:依次遍历每个元素collect方法:依次遍历每个元素,将代码块的结果收集成一个新的数组collect!和collecta=[1,2,3]a.each{|x|putsx}a=[1,2,3]a.collect{|x|x**2} #=>[1,4,9]a=[1,2,3]a.collect!{|x|x**2} #=>a=[1,4,9]遍历数组each_with_index反向边历:reverse_each部分、间隔遍历:a=%w{abc}a.each_with_indexdo

|item,index| puts"#{item}isatposition#{index}"enda=[1,2,3]a[1..2] #=>[2,3]2.upto(a.size-1){|x|putsx}(1..4).step(2){|x|putsx}3.step(10,3){|x|putsx}读取数组内容交换变量拆分数组去除重复元素:uniq

/

uniq!/delete/compact逆转数组:reverse/reverse!a=1b=2a,b=b,aa=[1,2,3]b,c=a #=>b=1,c=2b,*c=a #=>b=1,c=[2,3]a=[1,2,3,1,1,nil,nil]a.uniq #=>[1,2,3,nil]pact #=>[1,2,3,1,1]a.delete(1) #=>[2,3,nil,nil]a=[1,2,3]a.reverse #=>[3,2,1]数组排序sort

/

sort_by元素累计:injecta=[32,1,5,2,6,8]a.sort #=>[1,2,5,6,8,32]a.sort{|x,y|y<=>x} #=>[32,8,6,5,2,1]a=%w{AppleorangebananaBanboo}a.sort_by{|x|x.upcase} #=>大小写无关a.sort_by{|x|rand} #=>打乱顺序a=[1,2,3]a.inject(0){|sum,i|sum+i}a=[1,2,3]sum=0a.each{|x|sum+=x}a.inject(1){|sum,i|sum*i}集合运算[1,2,3]|[1,4,5] #=>[1,2,3,4,5][1,2,3]&[1,4,5] #=>[1][1,2,3]-[1,4,5] #=>[2,3][1,2,3,1]|[] #=>?[1,2,3]+[4,5,6] #=>?[1,2,3]&&[4,5,6] #=>?[1,2,3]||[4,5,6] #=>?散列(Hash)创建散列empty=Hash.newempty={}empty=Hash.new(0)numbers=Hash['One',1,'two',2]numbers={'one'=>1,'two'=>2}键(key)和值(value)numbers['two']

#=>2numbers['ten']=10numbers.keys #=>[’one’,‘two’,’ten’]numbers.values #=>[1,2,10]numbers.delete('One')符号:id:nameitem=Hash.newitem[:name]=“wty”item[:tel]=“82339274”字符串与符号的区别?:asdf'asdf'.intern"asdf".equal?"asdf""asdf".eql?"asdf":asdf.equal?:asdf:asdf.equal?"asdf":asdf.equal?"asdf".intern散列迭代each/each_paireach_key/each_valueh={1=>2,2=>3,4=>5}h.each{|k,v|printk,"=>",v,"\n"}h={1=>2,2=>3,4=>5}h.each_key{|k|putsk}h.each_value{

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论