版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Chapter 7,Expressions and Assignment Statements,Copyright 2012 Addison-Wesley. All rights reserved.,1-2,Chapter 7 Topics,Introduction Arithmetic Expressions Overloaded Operators Type Conversions Relational and Boolean Expressions Short-Circuit Evaluation Assignment Statements Mixed-Mode Assignment,C
2、opyright 2012 Addison-Wesley. All rights reserved.,1-3,Introduction,Expressions are the fundamental means of specifying computations in a programming language To understand expression evaluation, need to be familiar with the orders of operator and operand evaluation Essence of imperative languages i
3、s dominant role of assignment statements,Copyright 2012 Addison-Wesley. All rights reserved.,1-4,Arithmetic Expressions,Arithmetic evaluation was one of the motivations for the development of the first programming languages Arithmetic expressions consist of operators, operands, parentheses, and func
4、tion calls,Copyright 2012 Addison-Wesley. All rights reserved.,1-5,Arithmetic Expressions: Design Issues,Design issues for arithmetic expressions Operator precedence rules? Operator associativity rules? Order of operand evaluation? Operand evaluation side effects? Operator overloading? Type mixing i
5、n expressions?,Copyright 2012 Addison-Wesley. All rights reserved.,1-6,Arithmetic Expressions: Operators,A unary operator has one operand A binary operator has two operands A ternary operator has three operands,Copyright 2012 Addison-Wesley. All rights reserved.,1-7,Arithmetic Expressions: Operator
6、Precedence Rules,The operator precedence rules for expression evaluation define the order in which “adjacent” operators of different precedence levels are evaluated Typical precedence levels parentheses unary operators * (if the language supports it) *, / +, -,Copyright 2012 Addison-Wesley. All righ
7、ts reserved.,1-8,Arithmetic Expressions: Operator Associativity Rule,The operator associativity rules for expression evaluation define the order in which adjacent operators with the same precedence level are evaluated Typical associativity rules Left to right, except *, which is right to left Someti
8、mes unary operators associate right to left (e.g., in FORTRAN) APL is different; all operators have equal precedence and all operators associate right to left Precedence and associativity rules can be overriden with parentheses,Copyright 2012 Addison-Wesley. All rights reserved.,1-9,Expressions in R
9、uby and Scheme,Ruby All arithmetic, relational, and assignment operators, as well as array indexing, shifts, and bit-wise logic operators, are implemented as methods - One result of this is that these operators can all be overriden by application programs Scheme (and Common LISP) All arithmetic and
10、logic operations are by explicitly called subprograms a + b * c is coded as (+ a (* b c),Copyright 2012 Addison-Wesley. All rights reserved.,1-10,Arithmetic Expressions: Conditional Expressions,Conditional Expressions C-based languages (e.g., C, C+) An example: average = (count = 0)? 0 : sum / count
11、 Evaluates as if written as follows: if (count = 0) average = 0 else average = sum /count,Copyright 2012 Addison-Wesley. All rights reserved.,1-11,Arithmetic Expressions: Operand Evaluation Order,Operand evaluation order Variables: fetch the value from memory Constants: sometimes a fetch from memory
12、; sometimes the constant is in the machine language instruction Parenthesized expressions: evaluate all operands and operators first The most interesting case is when an operand is a function call,Copyright 2012 Addison-Wesley. All rights reserved.,1-12,Arithmetic Expressions: Potentials for Side Ef
13、fects,Functional side effects: when a function changes a two-way parameter or a non-local variable Problem with functional side effects: When a function referenced in an expression alters another operand of the expression; e.g., for a parameter change: a = 10; /* assume that fun changes its paramete
14、r */ b = a + fun(,Copyright 2012 Addison-Wesley. All rights reserved.,1-13,Functional Side Effects,Two possible solutions to the problem Write the language definition to disallow functional side effects No two-way parameters in functions No non-local references in functions Advantage: it works! Disa
15、dvantage: inflexibility of one-way parameters and lack of non-local references Write the language definition to demand that operand evaluation order be fixed Disadvantage: limits some compiler optimizations Java requires that operands appear to be evaluated in left-to-right order,A program has the p
16、roperty of referential transparency if any two expressions in the program that have the same value can be substituted for one another anywhere in the program, without affecting the action of the program result1 = (fun(a) + b) / (fun(a) c); temp = fun(a); result2 = (temp + b) / (temp c); If fun has n
17、o side effects, result1 = result2 Otherwise, not, and referential transparency is violated,Referential Transparency,Copyright 2012 Addison-Wesley. All rights reserved.,1-14,Advantage of referential transparency Semantics of a program is much easier to understand if it has referential transparency Be
18、cause they do not have variables, programs in pure functional languages are referentially transparent Functions cannot have state, which would be stored in local variables If a function uses an outside value, it must be a constant (there are no variables). So, the value of a function depends only on
19、 its parameters,Referential Transparency (continued),Copyright 2012 Addison-Wesley. All rights reserved.,1-15,Copyright 2012 Addison-Wesley. All rights reserved.,1-16,Overloaded Operators,Use of an operator for more than one purpose is called operator overloading Some are common (e.g., + for int and
20、 float) Some are potential trouble (e.g., * in C and C+) Loss of compiler error detection (omission of an operand should be a detectable error) Some loss of readability,Copyright 2012 Addison-Wesley. All rights reserved.,1-17,Overloaded Operators (continued),C+, C#, and F# allow user-defined overloa
21、ded operators When sensibly used, such operators can be an aid to readability (avoid method calls, expressions appear natural) Potential problems: Users can define nonsense operations Readability may suffer, even when the operators make sense,Copyright 2012 Addison-Wesley. All rights reserved.,1-18,
22、Type Conversions,A narrowing conversion is one that converts an object to a type that cannot include all of the values of the original type e.g., float to int A widening conversion is one in which an object is converted to a type that can include at least approximations to all of the values of the o
23、riginal type e.g., int to float,Copyright 2012 Addison-Wesley. All rights reserved.,1-19,Type Conversions: Mixed Mode,A mixed-mode expression is one that has operands of different types A coercion is an implicit type conversion Disadvantage of coercions: They decrease in the type error detection abi
24、lity of the compiler In most languages, all numeric types are coerced in expressions, using widening conversions In Ada, there are virtually no coercions in expressions In ML and F#, there are no coercions in expressions,Copyright 2012 Addison-Wesley. All rights reserved.,1-20,Explicit Type Conversi
25、ons,Called casting in C-based languages Examples C: (int)angle F#: float(sum) Note that F#s syntax is similar to that of function calls,Copyright 2012 Addison-Wesley. All rights reserved.,1-21,Errors in Expressions,Causes Inherent limitations of arithmetic e.g., division by zero Limitations of compu
26、ter arithmetic e.g. overflow Often ignored by the run-time system,Copyright 2012 Addison-Wesley. All rights reserved.,1-22,Relational and Boolean Expressions,Relational Expressions Use relational operators and operands of various types Evaluate to some Boolean representation Operator symbols used va
27、ry somewhat among languages (!=, /=, =, .NE., , #) JavaScript and PHP have two additional relational operator, = and != - Similar to their cousins, = and !=, except that they do not coerce their operands Ruby uses = for equality relation operator that uses coercions and eql? for those that do not,Co
28、pyright 2012 Addison-Wesley. All rights reserved.,1-23,Relational and Boolean Expressions,Copyright 2012 Addison-Wesley. All rights reserved.,1-24,Relational and Boolean Expressions,Boolean Expressions Operands are Boolean and the result is Boolean Example operators C89 has no Boolean type-it uses i
29、nt type with 0 for false and nonzero for true One odd characteristic of Cs expressions: a b c is a legal expression, but the result is not what you might expect: Left operator is evaluated, producing 0 or 1 The evaluation result is then compared with the third operand (i.e., c),Copyright 2012 Addiso
30、n-Wesley. All rights reserved.,1-25,Short Circuit Evaluation,An expression in which the result is determined without evaluating all of the operands and/or operators Example: (13 * a) * (b / 13 1) If a is zero, there is no need to evaluate (b /13 - 1) Problem with non-short-circuit evaluation index =
31、 0; while (index = length) When index=length, LISTindex will cause an indexing problem (assuming LIST is length - 1 long),Copyright 2012 Addison-Wesley. All rights reserved.,1-26,Short Circuit Evaluation (continued),C, C+, and Java: use short-circuit evaluation for the usual Boolean operators ( adop
32、ted by C and the C-based languaes Example a = a + b can be written as a += b,Copyright 2012 Addison-Wesley. All rights reserved.,1-30,Assignment Statements: Unary Assignment Operators,Unary assignment operators in C-based languages combine increment and decrement operations with assignment Examples
33、sum = +count (count incremented, then assigned to sum) sum = count+ (count assigned to sum, then incremented count+ (count incremented) -count+ (count incremented then negated),Copyright 2012 Addison-Wesley. All rights reserved.,1-31,Assignment as an Expression,In the C-based languages, Perl, and JavaScript, the assignment statement produces a result and can be used as an operand while (ch = getchar()!= EOF) ch = getchar() is carried out; the result (assigned to ch) is used as a conditional value for the while statement Disadvantage: another kind of expression side effect,Copyright 201
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026一年级下新课标批判性思维启蒙
- 2026九年级道德与法治上册 社会主义基本经济制度
- 2026年水类运动行业分析报告及未来发展趋势报告
- 2026年粮食烘干机行业分析报告及未来发展趋势报告
- 2026年螺旋钻具行业分析报告及未来发展趋势报告
- 2026年沿海旅客运输行业分析报告及未来发展趋势报告
- 2026年旅游交通设备行业分析报告及未来发展趋势报告
- 2026年壁虎养殖行业分析报告及未来发展趋势报告
- 2026年挂饰行业分析报告及未来发展趋势报告
- 2026年三氧化二砷行业分析报告及未来发展趋势报告
- 部编版历史2025-2026学年七年级下学期期末调研卷(六)(含答案)
- 2026.5.7 货车自动化机器人装车机
- 2025年河北省从“五方面人员”中选拔乡镇领导班子成员考试历年参考题库含答案详解
- 2026届八省八校T8联考高三4月联合测评语文试题(含答案解析)
- DB65∕T 4974-2025 轻中度盐碱地机采棉干播湿出技术规程
- 仁爱科普版(2024)七年级下册英语期末复习:各单元写作指导与练习题(含答案范文)
- 2026年传动系统故障的识别与维修
- 心衰合并肺部感染治疗
- 2026年广东中考物理电学高分突破试卷(附答案解析)
- GB 15599-2025危险化学品企业雷电安全规范
- 2026天津红日药业股份有限公司招聘生产中心生产技术岗(生产工艺岗)等岗位9人笔试参考题库及答案解析
评论
0/150
提交评论