① 如何快速的学习C++
大一学习的c++,工作之后也一直用的c++。
1. 涵盖c++入门到精通的图书列表
《The C programming language》必读
《C++ Primer》,号称是一本可以让你从C或java程序员转为一个真正的C++程序员的入门参考书,必读。
《The C++ programming language》,C++之父,人称B教主着作,在看过C++ primer后,应该可以跳章选读。
《Think in c++》,网上说此书的中文版翻译质量奇差,推荐看影印版,选读。
《Effective c++》,类似 Effective java,讲的是最佳实践,程序员必读。
《More effective c++》,上书的补充。
《The C++ standard library》,会写C,不会用标准库怎么行。这就跟java程序员不会用java.util包一样,必读。
《Effective STL》,STL库的最佳实践。Effective C++作者又一力作,必读。
《The annotated STL source》,STL源码分析,这本书应该算是深入/精通类了,选读。
《Generic programming and STL》,号称C++编程里,就是跟模板,泛型打交道,那么精通泛型是势在必行。
《C++ Template》,C++模板编程,代码复用的经验之道,必读。
《Exceptional C++》,跟Effective C++类似,属于最佳实践和难题解析,书中列出了许多应用场景和实例代码供读者揣摩,选读。
《More Exceptional C++》,上书的补充。
《Exceptional C++ Style》,上上书的补充
《Inside The C++ Object Model》,有了上面这些书做铺垫,那么终于可以读此神书了。它会带你游览C++对象模型的底层实现机制。读完此书,任何C++代码看起来如同行云流水,必读。
2. 优秀的C/C++开源项目(阅读代码)
OS:linux kernel LVS、Linux应用程序
DB:Mysql、PostgreSQL
Complier:VM、GCC
Framework:OpenSip、SipProxy、
Net:ACE(Java Mina、Netty)、TCP/IP、HTTP协议栈
Cache:Memcached、Redis、
Library:STL(java util package)、Boost、Qt(UI)、
balance:Apache、Nginx
GSL
地址:https://github.com/microsoft/GSL
Boost文档
地址:https://www.boost.org/doc/libs/
wxWidgets官网
地址:http://wxwidgets.org/
gtkmm
地址:https://www.gtkmm.org/en/
CopperSpice
地址:https://www.copperspice.com/
Qt
地址:https://www.qt.io/Eigen
地址:http://eigen.tuxfamily.org/index.php?title=Main_Page#Documentation
Plot utils
地址:https://www.gnu.org/software/plotutils/
Asio
地址:https://think-async.com/Asio/
POCO
地址:https://pocoproject.org/
abseil
地址:https://abseil.io/
C++开源库汇总列表
地址:https://en.cppreference.com/w/cpp/links/libs
除了这些开源项目,也可以找一些免费的公开课,那这里也推荐一个ACM金牌大佬讲授的免费C++课程,可以去体验一下:
学好C++才是入职大厂的敲门砖! 当年要是有这课,我的C++也不至于这样
已失效
3.C++语法讲解
语言基础
详细介绍变量、表达式、语句、指针、数组、流程控制、函数、文件组织等。
抽象机制 - 面向对象编程
深入讲解C++的抽象机制,封装(类)、继承、多态;操作符重载、函数对象、异常处理等。
模板 - 泛型编程
详细介绍C++的模板机制,类模板、函数模板、模板特化等方面的内容。
4.深入c++面向对象
4.1、从C到C++
引用和指针:为什么引用很重要
const关键字:为什么const很重要
名字空间 (namespace)
4.2、深入C++对象
关于C++对象
内置类型的对象,如int、double对象,自定义类型的对象
对象类型的定义
关键字class和struct
类成员:成员函数和数据成员
静态数据成员
成员的访问控制
对象的size
关于this指针
onst成员函数、const究竟修饰什么
mutable数据成员
4种特殊成员函数:constructor、destructor、 constructor、operator=
对象的构造、初始化列表
对象的析构
对象的复制
什么情况下有必要显式定义4种特殊函数
C++对象生命周
4.3、操作符重载
关于C++中操作符重载机制
重要操作符重载
算术运算:+, -, *, /, %, ++, --, ...
关系运算:>, <, ==, !=
下标存取:[ ]
函数调用:(),函数对象
类型转换、单参数构造函数与隐式转换、阻止隐式转换 -- explicit关键字
友元与成员
4.4、面向对象基础 -- 继承
基类与派生类
再谈对象的构造与析构
虚函数、纯虚函数
派生类的内存布局、虚函数表
多态、多态类型、如何体现多态
虚析构、为什么虚析构很重要
4.5、关于继承更多的话题
多继承
虚继承与虚基类
对基类的访问、public / protected / private继承
Down cast:static_cast<>和dynamic_cast<>
运行期类型识别 (RTTI)
4.6、C++与面向对象设计
C++语言机制提供了完整的OOP支持
超越继承
OOP若干法则和设计模式
5.C++泛型编程与STL
5.1、C++ 模板机制
5.2、STL 概要
5.3、STL容器
5.4、STL迭代
5.5、STL算法
5.6、预与定义STL数对象
5.7、STL适配器
6. C++进阶
《C++ Primer》
最新版本:第三版(第四版国外已上架, 国内一些网上书店也在预订中)
适合有丰富C经验,缺乏C++经验的。不过我个人一直认为此书带着过于强烈的C语言的痕迹,对于C++的学习未必是 好事。
《The C++ Programming Language》/《C++程序设计语言》
最新版本:第三版特别版
简称 TC++PL,有其他语言的丰富经验的。(也有人简称之为“TCPL”,但需与另一本《The C Programmer Language》区分开来)
《Essential C++》
《Accelerated C++》
这两本薄一些,都是不错的选择。《Accelerated C++》本人没有读过,从各方面的评价来看,完全值得推荐。
以上几本书都有相应的中文版,而且翻译的质量都不错。上面的书未必都需要读一遍,但无论如何,TC++PL是应该阅读的。
《Effective C++》
最新版本:第二版(第三版国外已上架,国内一些网上书店也在预订中)
简称EC。C++程序员必读!很多时候,我们说C++圣经不是指TC++PL,而是这一本。《The Pragmatic Programmer》一书中写到:“一旦你发现自己要参与C++项目的开发,赶快跑(不要走)到书店去购买Scott Mayer的《Effective C++》,可能还要《More Effective C++》”。
《C++ Coding Standards: 101 Rules, Guidelines, and Best Practices》/《C++ 编程规范》
个人认为此书应为C++程序员必备的案头书。几乎Effective系列和Exceptional系 列都在这里得到了总结。最新的模版、异常的业界经验都在这里的到了体现。可能的唯一缺陷就是对一个新手而言,关于“为什么这么做”的问题,解释的不够。
我 的看法是:如果你不理解其中的条款,记忆,并且照做;如果你理解其中的条款,我猜你一定会同意书中的观点。我认为这本书中的内容至少在2009年以前都不 会过时,人们将广为传诵它制定的101条戒律。
还不知道他的简称,也许“101”会成为一个候选者?
提到《Effective C++》,那么另外三本书一一浮出水面:
《More Effective C++》
《Exceptional C++》
《More Exceptional C++》。
新书《Exceptional C++ Style》也是值得一看的好书。
上 述几本书,一本也不应该放过。
个人建议上述书籍按顺序阅读。并且,在将来反复阅读这几本书。
《Thinking in C++》/《C++编程思想》
这本书及其中文版传言好坏都有,没有认真看过,不做评价,如果确有兴趣,不妨尝试 一下该书。
以下几本书基本上涉及的都是语言本身,大体上可以按照以下的顺序阅读。
《C++必知必会》
如果早一年,这本书将是重量级的,然而它被101和《Exceptional C++ Style》盖过一头。
《C++ Gotchas: Avoiding Common Problems in Coding and Design》/《C++程序设计陷阱》
这又是一本我未曾读过,而且广受好评的书。
《STL 源码剖析》
这本书我刚到手,就被人"借"走,以至于到现在也没有看过。看过这本书的朋友,可以给一个合适的评价。
7. C++进阶之数据结构基础
这是所有编程语言中最应该学习的部分,程序组成的基础之一。
顺序存储、链式存储、循环链表;
双向链表、栈(顺序和链式)、队列(顺序和链式);
栈的应用、树基本概念及遍历、二叉树;
排序算法、并归算法、选择、插入、快速、希尔。
以上这些内容你知道吗?
8. C++进阶之UI界面开发
掌握QT类库构架,图形界面开发模型;
掌握QT开发技巧,消息机制,图形处理;
掌握QT网络编程,UDP,TCP使用方式;
掌握QT文件处理方式,序列化;
掌握QT在windows,linux,ios,android不同平台下的移植技术。
9. C++进阶之Unix/Linux网络服务器
掌握Unix/Linux平台开发方式;
熟练使用系统调用;
熟练Unix/Linux内存管理,进程,线程调度;
熟悉网络服务器开发方式,熟练编写TCP,UCP网络服务程序;
掌握同步/异步IO模型在网络编程中的使用方式。
10.C++进阶之数据库开发
掌握SQL语言的实用技巧。Oracle,MySQL数据库的使用方式。
如果你能熟练掌握以上列出的技能,具备解决复杂问题和技术难点的能力,而且你能独立开发一些比较复杂的功能模块,那么很荣幸地告诉你,你已经达到中级水平,薪资过万对你来说简直是小菜一碟。
11.C++标准参考
C++ reference
地址:https://en.cppreference.com/w/
C++ Coding Standard
地址:http://www.possibility.com/Cpp/CppCodingStandard.html
Standard C++
地址:https://isocpp.org/
State of C++ Evolution
地址:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2597.html
The C++ Resources Network
地址:http://www.cplusplus.com/
Draft C++ Standard: Contents
地址:http://eel.is/c++draft/
② 如何成为一个程序员
想要从零开始成为程序员,先不要着急的去学习,而是先要去了解程序员。
1.随便在招聘网站搜索就会发现程序员会分有很多类型,那你就需要确定自己将来想要发展的方向,自己的职业规划是什么?
2.通过搜索可以看到,刚刚起步的程序员工资并不是很高而且学习阶段也会比较忙,那这个时候你是不是靠考虑一下如何兼顾生活和工作?工资如何支配合理等问题(没有经验限制的工作相对较低)
PHP程序员岗位要求
关于学习建议你这样试试看:
学习的方式基本可分为两个类型,一个是碎片化的学习,一个是系统进修。
你可以从网络上各机构大量的视频或者书籍得到相关的学习资料。从大量的资料中,发现真正的干货,从而不断学习,这属于碎片化的自习。由于自学周期比较长,还有不少小伙伴选择是一边工作赚取生活费,一边再利用闲暇时间学习,当然如果你的精力充沛,这也是一个好办法。
如果要报培训班, 一定要找正规的培训机构学习,不然容易被坑。培训机构里面的课程都是现在工作中需要用到的,时间短,基本上是可以让你快速上手工作的。但是要把所有的知识点都消化就没那么快了,所以需要自己私下更加的努力,巩固学习。
注意事项:
1. 自学要注意的是:自学入门时会很枯燥,不要两天打鱼三天晒网!!!切记
2. 在培训机构里学习要注意的是:勤加练习、主动自学、有问题提,不懂的尽管问老师(把交的钱发挥到极致),不然之后再有问题就没有这么好的机会能够直接得到老师的指点了。
最后,祝愿想要成为程序员的小伙伴都能心想事成哦(*^▽^*)~
③ typescript和javascript的区别(typescript与javascript区别)
TypeScript入门指南新系列深入浅出TypeScript来了,本系列至少20+篇。本文为第一篇,来介绍一下TypeScript以及常见的类型。
TypeScript是一门由微软推出的开源的、跨平台的编程语言。它是JavaScript的超集,扩展了JavaScript的语法,最终会被编译为JavaScript代码。
TypeScript的主要特性:
TypeScript主要是为了实现以下两个目标:
下面就来看看这两个目标是如何实现的。
为什么要给JavaScript加上类型呢?
我们知道,JavaScript是一种轻量级的解释性脚本语言。也是弱类型、动态类型语言,允许隐式转换,只有运行时才能确定变量的类型。正是因为在运行时才能确定变量的类型,JavaScript代码很多错误在运行时才能发现。TypeScript在JavaScript的基础上,包装了类型机制,使其变身成为静态类型语言。在TypeScript中,不仅可以轻易复用JavaScript的代码、最新特性,还能使用可选的静态类型进行检查报错,使得编写的代码更健壮、更易于维护。
下面是JavaScript项目中最常见的十大错误,如果使用TypeScript,那么在编写阶段就可以发现并解决很多JavaScript错误了:
类型系统能够提高代码的质量和可维护性,经过不断的实践,以下两点尤其需要注意:
可以认为,在所有操作符之前,TypeScript都能检测到接收的类型(在代码运行时,操作符接收的是实际数据;在静态检测时,操作符接收的则是类型)是否被当前操作符所支持。当TypeScript类型检测能力覆盖到所有代码后,任意破坏约定的改动都能被自动检测出来,并提出类型错误。因此,可以放心地修改、重构业务逻辑,而不用担忧因为考虑不周而犯下低级错误。
在一些语言中,类型总是有一些不必要的复杂的存在方式,而TypeScript尽可能地降低了使用门槛,它是通过如下方式来实现的。
TypeScript与JavaScript本质并无区别,我们可以将TypeScipt理解为是一个添加了类型注解的JavaScript,为JavaScript代码提供了编译时的类型安全。
实际上,TypeScript是一门“中间语言”,因为它最终会转化为JavaScript,再交给浏览器解释、执行。不过TypeScript并不会破坏JavaScript原有的体系,只是在JavaScript的基础上进行了扩展。
准确的说,TypeScript只是将JavaScript中的方法进行了标准化处理:
这段代码在TypeScript中就会报错,因为TS会知道a是一个数字类型,不能将其他类型的值赋值给a,这种类型的推断是很有必要的。
上面说了,TypeScript会尽可能安全的推断类型。我们也可以使用类型注释,以实现以下两件事:
在一些语言中,类型总是有一些不必要的复杂的存在方式,而TypeScript的类型是结构化的。比如下面的例子中,函数会接受它所期望的参数:
为了便于把JavaScript代码迁移至TypeScript,即使存在编译错误,在默认的情况下,TypeScript也会尽可能的被编译为JavaScript代码。因此,我们可以将JavaScript代码逐步迁移至TypeScript。
虽然TypeScript是JavaScript的超集,但它始终紧跟ECMAScript标准,所以是支持ES6/7/8/9等新语法标准的。并且,在语法层面上对一些语法进行了扩展。TypeScript团队也正在积极的添加新功能的支持,这些功能会随着时间的推移而越来越多,越来越全面。
虽然TypeScript比较严谨,但是它并没有让JavaScript失去其灵活性。TypeScript由于兼容JavaScript所以灵活度可以媲美JavaScript,比如可以在任何地方将类型定义为any(当然,并不推荐这样使用),毕竟TypeScript对类型的检查严格程度是可以通过tsconfig.json来配置的。
在搭建TypeScript环境之前,先来看看适合TypeScript的IDE,这里主要介绍VisualStudioCode,笔者就一直使用这款编辑器。
VSCode可以说是微软的亲儿子了,其具有以下优势:
因为VSCode中内置了特定版本的TypeScript语言服务,所以它天然支持TypeScript语法解析和类型检测,且这个内置的服务与手动安装的TypeScript完全隔离。因此,VSCode支持在内置和手动安装版本之间动态切换语言服务,从而实现对不同版本的TypeScript的支持。
如果当前应用目录中安装了与内置服务不同版本的TypeScript,我们就可以点击VSCode底部工具栏的版本号信息,从而实现“useVSCode'sVersion”和“useWorkspace'sVersion”两者之间的随意切换。
除此之外,VSCode也基于TypeScript语言服务提供了准确的代码自动补全功能,并显示详细的类型定义信息,大大的提升了我们的开发效率。
1)全局安装TypeScript:
2)初始化配置文件:
执行之后,项目根目录会出现一个tsconfig.json文件,里面包含ts的配置项(可能因为版本不同而配置略有不同)。
可以在package.json中加入script命令:
3)编译ts代码:
TSLint是一个通过tslint.json进行配置的插件,在编写TypeScript代码时,可以对代码风格进行检查和提示。如果对代码风格有要求,就需要用到TSLint了。其使用步骤如下:(1)在全局安装TSLint:
(2)使用TSLint初始化配置文件:
执行之后,项目根目录下多了一个tslint.json文件,这就是TSLint的配置文件了,它会根据这个文件对代码进行检查,生成的tslint.json文件有下面几个字段:
这些字段的含义如下;
在说TypeScript数据类型之前,先来看看在TypeScript中定义数据类型的基本语法。
在语法层面,缺省类型注解的TypeScript与JavaScript完全一致。因此,可以把TypeScript代码的编写看作是为JavaScript代码添加类型注解。
在TypeScript语法中,类型的标注主要通过类型后置语法来实现:“变量:类型”
在JavaScript中,原始类型指的是非对象且没有方法的数据类型,包括:number、boolean、string、null、undefined、symbol、bigInt。
它们对应的TypeScript类型如下:
JavaScript原始基础类型TypeScript类型mbolbigIntbigInt
需要注意number和Number的区别:TypeScript中指定类型的时候要用number,这是TypeScript的类型关键字。而Number是JavaScript的原生构造函数,用它来创建数值类型的值,这两个是不一样的。包括string、boolean等都是TypeScript的类型关键字,而不是JavaScript语法。
TypeScript和JavaScript一样,所有数字都是浮点数,所以只有一个number类型。
TypeScript还支持ES6中新增的二进制和八进制字面量,所以TypeScript中共支持2、8、10和16这四种进制的数值:
字符串类型可以使用单引号和双引号来包裹内容,但是如果使用Tslint规则,会对引号进行检测,使用单引号还是双引号可以在Tslint规则中进行配置。除此之外,还可以使用ES6中的模板字符串来拼接变量和字符串会更为方便。
类型为布尔值类型的变量的值只能是true或者false。除此之外,赋值给布尔值的值也可以是一个计算之后结果为布尔值的表达式:
在JavaScript中,undefined和null是两个基本数据类型。在TypeScript中,这两者都有各自的类型,即undefined和null,也就是说它们既是实际的值,也是类型。这两种类型的实际用处不是很大。
注意,第一行代码可能会报一个tslint的错误:Unnecessaryinitializationto'undefined',就是不能给一个变量赋值为undefined。但实际上给变量赋值为undefined是完全可以的,所以如果想让代码合理化,可以配置tslint,将"no-unnecessary-initializer"设置为false即可。
默认情况下,undefined和null是所有类型的子类型,可以赋值给任意类型的值,也就是说可以把undefined赋值给void类型,也可以赋值给number类型。当在tsconfig.json的"compilerOptions"里设置为"strictNullChecks":true时,就必须严格对待了。这时undefined和null将只能赋值给它们自身或者void类型。这样也可以规避一些错误。
BigInt是ES6中新引入的数据类型,它是一种内置对象,它提供了一种方法来表示大于2-1的整数,BigInt可以表示任意大的整数。
使用BigInt可以安全地存储和操作大整数,即使这个数已经超出了JavaScript构造函数Number能够表示的安全整数范围。
我们知道,在JavaScript中采用双精度浮点数,这导致精度有限,比如Number.MAX_SAFE_INTEGER给出了可以安全递增的最大可能整数,即2-1,来看一个例子:
可以看到,最终返回了true,这就是超过精读范围造成的问题,而BigInt正是解决这类问题而生的:
这里需要用BigInt(number)把Number转化为BigInt,同时如果类型是BigInt,那么数字后面需要加n。
在TypeScript中,number类型虽然和BigInt都表示数字,但是实际上两者类型是完全不同的:
symbol我们平时用的比较少,所以可能了解也不是很多,这里就详细来说说symbol。
symbol是ES6新增的一种基本数据类型,它用来表示独一无二的值,可以通过Symbol构造函数生成。
注意:Symbol前面不能加new关键字,直接调用即可创建一个独一无二的symbol类型的值。
可以在使用Symbol方法创建symbol类型值的时候传入一个参数,这个参数需要是一个字符串。如果传入的参数不是字符串,会先自动调用传入参数的toString方法转为字符串:
上面代码的第三行可能会报一个错误:Thisconditionwillalwaysreturn'false'sincethetypes'uniquesymbol'and'uniquesymbol'havenooverlap.这是因为编译器检测到这里的s1===s2始终是false,所以编译器提醒这代码写的多余,建议进行优化。
上面使用Symbol创建了两个symbol对象,方法中都传入了相同的字符串,但是两个symbol值仍然是false,这就说明了Symbol方法会返回一个独一无二的值。Symbol方法传入的这个字符串,就是方便我们区分symbol值的。可以调用symbol值的toString方法将它转为字符串:
在TypeScript中使用symbol就是指定一个值的类型为symbol类型:
在ES6中,对象的属性是支持表达式的,可以使用于一个变量来作为属性名,这对于代码的简化有很多用处,表达式必须放在大括号内:
symbol也可以作为属性名,因为symbol的值是独一无二的,所以当它作为属性名时,不会与其他任何属性名重复。当需要访问这个属性时,只能使用这个symbol值来访问(必须使用方括号形式来访问):
在使用obj.name访问时,实际上是字符串name,这和访问普通字符串类型的属性名是一样的,要想访问属性名为symbol类型的属性时,必须使用方括号。方括号中的name才是我们定义的symbol类型的变量name。
使用Symbol类型值作为属性名,这个属性是不会被for…in遍历到的,也不会被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()等方法获取到:
虽然这些方法都不能访问到Symbol类型的属性名,但是Symbol类型的属性并不是私有属性,可以使用Object.getOwnPropertySymbols方法获取对象的所有symbol类型的属性名:
除了这个方法,还可以使用ES6提供的Reflect对象的静态方法Reflect.ownKeys,它可以返回所有类型的属性名,Symbol类型的也会返回:
Symbol包含两个静态方法,for和keyFor。1)Symbol.for()
用Symbol创建的symbol类型的值都是独一无二的。使用Symbol.for方法传入字符串,会先检查有没有使用该字符串调用Symbol.for方法创建的symbol值。如果有,返回该值;如果没有,则使用该字符串新创建一个。使用该方法创建symbol值后会在全局范围进行注册。
上面代码中,创建了一个iframe节点并把它放在body中,通过这个iframe对象的contentWindow拿到这个iframe的window对象,在iframe.contentWindow上添加一个值就相当于在当前页面定义一个全局变量一样。可以看到,在iframe中定义的键为TypeScript的symbol值在和在当前页面定义的键为'TypeScript'的symbol值相等,说明它们是同一个值。
2)Symbol.keyFor()该方法传入一个symbol值,返回该值在全局注册的键名:
看完简单的数据类型,下面就来看看比较复杂的数据类型,包括JavaScript中的数组和对象,以及TypeScript中新增的元组、枚举、Any、void、never、unknown。
在TypeScript中有两种定义数组的方式:
以上两种定义数组类型的方式虽然本质上没有任何区别,但是更推荐使用第一种形式来定义。一方面可以避免与JSX语法冲突,另一方面可以减少代码量。
注意,这两种写法中的number指定的是数组元素的类型,也可以在这里将数组的元素指定为其他任意类型。如果要指定一个数组里的元素既可以是数值也可以是字符串,那么可以使用这种方式:number|string[]。
在JavaScript中,object是引用类型,它存储的是值的引用。在TypeScript中,当想让一个变量或者函数的参数的类型是一个对象的形式时,可以使用这个类型:
可以看到,当给一个对象类型的变量赋值一个对象时,就会报错。对象类型更适合以下场景:
在JavaScript中并没有元组的概念,作为一门动态类型语言,它的优势是支持多类型元素数组。但是出于较好的扩展性、可读性和稳定性考虑,我们通常会把不同类型的值通过键值对的形式塞到一个对象中,再返回这个对象,而不是使用没有任何限制的数组。TypeScript的元组类型正好弥补了这个不足,使得定义包含固定个数元素、每个元素类型未必相同的数组成为可能。
元组可以看做是数组的扩展,它表示已知元素数量和类型的数组,它特别适合用来实现多值返回。确切的说,就是已知数组中每一个位置上的元素的类型,可以通过元组的索引为元素赋值::
可以看到,定义的arr元组中,元素个数和元素类型都是确定的,当为arr赋值时,各个位置上的元素类型都要对应,元素个数也要一致。
当访问元组元素时,TypeScript也会对元素做类型检查,如果元素是一个字符串,那么它只能使用字符串方法,如果使用别的类型的方法,就会报错。
在TypeScript新的版本中,TypeScript会对元组做越界判断。超出规定个数的元素称作越界元素,元素赋值必须类型和个数都对应,不能超出定义的元素个数。
这里定义了接口Tuple,它继承数组类型,并且数组元素的类型是number和string构成的联合类型,这样接口Tuple就拥有了数组类型所有的特性。并且指定索引为0的值为string类型,索引为1的值为number类型,同时指定length属性的类型字面量为2,这样在指定一个类型为这个接口Tuple时,这个值必须是数组,而且如果元素个数超过2个时,它的length就不是2是大于2的数了,就不满足这个接口定义了,所以就会报错;当然,如果元素个数不够2个也会报错,因为索引为0或1的值缺失。
TypeScript在ES原有类型基础上加入枚举类型,使得在TypeScript中也可以给一组数值赋予名字,这样对开发者比较友好。枚举类型使用enum来定义:
上面定义的枚举类型的Roles,它有三个值,TypeScript会为它们每个值分配编号,默认从0开始,在使用时,就可以使用名字而不需要记数字和名称的对应关系了:
除此之外,还可以修改这个数值,让SUPER_ADMIN=1,这样后面的值就分别是2和3。当然还可以给每个值赋予不同的、不按顺序排列的值:
我们可以将一个值定义为any类型,也可以在定义数组类型时使用any来指定数组中的元素类型为任意类型:
any类型会在对象的调用链中进行传导,即any类型对象的任意属性的类型都是any,如下代码所示:
需要注意:不要滥用any类型,如果代码中充满了any,那TypeScript和JavaScript就毫无区别了,所以除非有充足的理由,否则应该尽量避免使用any,并且开启禁用隐式any的设置。
void和any相反,any是表示任意类型,而void是表示没有类型,就是什么类型都不是。这在定义函数,并且函数没有返回值时会用到:
需要注意:void类型的变量只能赋值为undefined和null,其他类型不能赋值给void类型的变量。
never类型指永远不存在值的类型,它是那些总会抛出异常或根本不会有返回值的函数表达式的返回值类型,当变量被永不为真的类型保护所约束时,该变量也是never类型。
下面的函数,总是会抛出异常,所以它的返回值类型是never,用来表明它的返回值是不存在的:
never类型是任何类型的子类型,所以它可以赋值给任何类型;而没有类型是never的子类型,所以除了它自身以外,其他类型(包括any类型)都不能为never类型赋值。
上面代码定义了一个立即执行函数,函数体是一个死循环,这个函数调用后的返回值类型为never,所以赋值之后neverVariable的类型是never类型,当给neverVariable赋值123时,就会报错,因为除它自身外任何类型都不能赋值给never类型。
基于never的特性,我们可以把never作为接口类型下的属性类型,用来禁止操作接口下特定的属性:
可以看到,无论给props.name赋什么类型的值,它都会提示类型错误,这就相当于将name属性设置为了只读。
unknown是TypeScript在3.0版本新增的类型,主要用来描述类型并不确定的变量。它看起来和any很像,但是还是有区别的,unknown相对于any更安全。
对于any,来看一个例子:
上面这些语句都不会报错,因为value是any类型,所以后面三个操作都有合法的情况,当value是一个对象时,访问name属性是没问题的;当value是数值类型的时候,调用它的toFixed方法没问题;当value是字符串或数组时获取它的length属性是没问题的。
当指定值为unknown类型的时候,如果没有缩小类型范围的话,是不能对它进行任何操作的。总之,unknown类型的值不能随便操作。那什么是类型范围缩小呢?下面来看一个例子:
这里由于把value的类型缩小为Date实例的范围内,所以进行了value.toISOString(),也就是使用ISO标准将Date对象转换为字符串。
使用以下方式也可以缩小类型范围:
关于unknown类型,在使用时需要注意以下几点:
在实际使用中,如果有类型无法确定的情况,要尽量避免使用any,因为any会丢失类型信息,一旦一个类型被指定为any,那么在它上面进行任何操作都是合法的,所以会有意想不到的情况发生。因此如果遇到无法确定类型的情况,要先考虑使用unknown。
ts和js有什么区别ts需要静态编译,它提供了强类型与更多面向对象的内容。
ts最终仍要编译为弱类型的js文件,基于对象的原生的js,再运行。故ts相较java/C#这样天生面向对象语言是有区别和局限的
ts是由微软牵头主导的,主要来自C#
TypeScript是一个应用程序级的JavaScript开发语言。(这也表示TypeScript比较牛逼,可以开发大型应用,或者说更适合开发大型应用)
TypeScript是JavaScript的超集,可以编译成纯JavaScript。这个和我们CSS离的Less或者Sass是很像的,
我们用更好的代码编写方式来进行编写,最后还是友好生成原生的JavaScript语言。
TypeScript跨浏览器、跨操作系统、跨主机、且开源。由于最后他编译成了JavaScript所以只要能运行JS的地方,都可以运行我们写的程序,设置在node.js里。
TypeScript始于JavaScript,终于JavaScript。遵循JavaScript的语法和语义
TypeScript可以重用JavaScript代码,调用流行的JavaScript库。
TypeScript提供了类、模块和接口,更易于构建组件和维护。
TypeScript和JavaScript的区别1.从历史包袱角度说JavaScript的包袱是前向兼容,即使老版本的ES中有落后的方面,为了兼容,也要支持,而TypeScript宣称完全兼容JavaScript,这导致了TypeScript继承了JavaScript一切的缺点,所以从这点上看可以说是不相伯仲。
2.TypeScript的作者也是C#的作者,这导致了TypeScript从C#继承了很多优雅的设计比如枚举,泛型等语言特性,这让TypeScript增色不少。
3.TypeScript带有编译期类型检查,在写大程序的时候有优势,更容易重构和让别人理解代码的意图,但是这带来了一个问题就
④ 我是个菜鸟,求学习方法!
经验一:
1、不妨给自己定一些时间限制。连续长时间的学习很容易使自己产生厌烦情绪,这时可以把功课分成若干个部分,把每一部分限定时间,例如一小时内完成这份练习、八点以前做完那份测试等等,这样不仅有助于提高效率,还不会产生疲劳感。如果可能的话,逐步缩短所用的时间,不久你就会发现,以前一小时都完不成的作业,现在四十分钟就完成了。
2、不要在学习的同时干其他事或想其他事。一心不能二用的道理谁都明白,可还是有许多同学在边学习边听音乐。或许你会说听音乐是放松神经的好办法,那么你尽可以专心的学习一小时后全身放松地听一刻钟音乐,这样比带着耳机做功课的效果好多了。
3、不要整个晚上都复习同一门功课。我以前也曾经常用一个晚上来看数学或物理,实践证明,这样做非但容易疲劳,而且效果也很差。后来我在每晚安排复习两三门功课,情况要好多了。
除了十分重要的内容以外,课堂上不必记很详细的笔记。如果课堂上忙于记笔记,听课的效率一定不高,况且你也不能保证课后一定会去看笔记。课堂上所做的主要工作应当是把老师的讲课消化吸收,适当做一些简要的笔记即可。
经验二:
学习效率这东西,我也曾和很多人谈起过。我们经常看到这样的情况:某同学学习极其用功,在学校学,回家也学,不时还熬熬夜,题做得数不胜数,但成绩却总上不去其实面对这样的情况,我也是十分着急的,本来,有付出就应该有回报,而且,付出的多就应该回报很多,这是天经地义的事。但实际的情况却并非如此,这里边就存在一个效率的问题。效率指什么呢?好比学一样东西,有人练十次就会了,而有人则需练一百次,这其中就存在一个效率的问题。
如何提高学习效率呢?我认为最重要的一条就是劳逸结合。学习效率的提高最需要的是清醒敏捷的头脑,所以适当的休息,娱乐不仅仅是有好处的,更是必要的,是提高各项学习效率的基础。那么上课时的听课效率如何提高呢?以我的经历来看,课前要有一定的预习,这是必要的,不过我的预习比较粗略,无非是走马观花地看一下课本,这样课本上讲的内容、重点大致在心里有个谱了,听起课来就比较有针对性。预习时,我们不必搞得太细,如果过细一是浪费时间,二是上课时未免会有些松懈,有时反而忽略了最有用的东西。上课时认真听课当然是必须的,但就象我以前一个老师讲的,任何人也无法集中精力一节课,就是说,连续四十多分钟集中精神不走神,是不太可能的,所以上课期间也有一个时间分配的问题,老师讲有些很熟悉的东西时,可以适当地放松一下。另外,记笔记有时也会妨碍课堂听课效率,有时一节课就忙着抄笔记了,这样做,有时会忽略一些很重要的东西,但这并不等于说可以不抄笔记,不抄笔记是不行的,人人都会遗忘,有了笔记,复习时才有基础,有时老师讲得很多,在黑板上记得也很多,但并不需要全记,书上有的东西当然不要记,要记一些书上没有的定理定律,典型例题与典型解法,这些才是真正有价值去记的东西。否则见啥记啥,势必影响课上听课的效率,得不偿失。
作题的效率如何提高呢?最重要的是选"好题",千万不能见题就作,不分青红皂白,那样的话往往会事倍功半。题都是围绕着知识点进行的,而且很多题是相当类似的,首先选择想要得到强化的知识点,然后围绕这个知识点来选择题目,题并不需要多,类似的题只要一个就足够,选好题后就可以认真地去做了。作题效率的提高,很大程度上还取决于作题之后的过程,对于做错的题,应当认真思考错误的原因,是知识点掌握不清还是因为马虎大意,分析过之后再做一遍以加深印象,这样作题效率就会高得多。
经验三:
学习效率是决定学习成绩的重要因素。那么,我们如何提高自己学习效率呢?
第一点,要自信。很多的科学研究都证明,人的潜力是很大的,但大多数人并没有有效地开发这种潜力,这其中,人的自信力是很重要的一个方面。无论何时何地,你做任何事情,有了这种自信力,你就有了一种必胜的信念,而且能使你很快就摆脱失败的阴影。相反,一个人如果失掉了自信,那他就会一事无成,而且很容易陷入永远的自卑之中。
提高学习效率的另一个重要的手段是学会用心。学习的过程,应当是用脑思考的过程,无论是用眼睛看,用口读,或者用手抄写,都是作为辅助用脑的手段,真正的关键还在于用脑子去想。举一个很浅显的例子,比如说记单词,如果你只是随意的浏览或漫无目的地抄写,也许要很多遍才能记住,而且不容易记牢,而如果你能充分发挥自己的想象力,运用联想的方法去记忆,往往可以记得很快,而且不容易遗忘。现在很多书上介绍的英语单词快速记忆的方法,也都是强调用脑筋联想的作用。可见,如果能做7到集中精力,发挥脑的潜力,一定可以大大提高学习的效果。
另一个影响到学习效率的重要因素是人的情绪。我想,每个人都曾经有过这样的体会,如果某一天,自己的精神饱满而且情绪高涨,那样在学习一样东西时就会感到很轻松,学的也很快,其实这正是我们的学习效率高的时候。因此,保持自我情绪的良好是十分重要的。我们在日常生活中,应当有较为开朗的心境,不要过多地去想那些不顺心的事,而且我们要以一种热情向上的乐观生活态度去对待周围的人和事,因为这样无论对别人还是对自己都是很有好处的。这样,我们就能在自己的周围营造一个十分轻松的氛围,学习起来也就感到格外的有精神。
经验四:
很多学生看上去很用功,可成绩总是不理想。原因之一是,学习效率太低。同样的时间内,只能掌握别人学到知识的一半,这样怎么能学好?学习要讲究效率,提高效率,途径大致有以下几点:
一、每天保证8小时睡眠。
晚上不要熬夜,定时就寝。中午坚持午睡。充足的睡眠、饱满的精神是提高效率的基本要求。
二、学习时要全神贯注。
玩的时候痛快玩,学的时候认真学。一天到晚伏案苦读,不是良策。学习到一定程度就得休息、补充能量。学习之余,一定要注意休息。但学习时,一定要全身心地投入,手脑并用。我学习的时侯常有陶渊明的"虽处闹市,而无车马喧嚣"的境界,只有我的手和脑与课本交流。
三、坚持体育锻炼。
身体是"学习"的本钱。没有一个好的身体,再大的能耐也无法发挥。因而,再繁忙的学习,也不可忽视放松锻炼。有的同学为了学习而忽视锻炼,身体越来越弱,学习越来越感到力不从心。这样怎么能提高学习效率呢?
四、学习要主动。
只有积极主动地学习,才能感受到其中的乐趣,才能对学习越发有兴趣。有了兴趣,效率就会在不知不觉中得到提高。有的同学基础不好,学习过程中老是有不懂的问题,又羞于向人请教,结果是郁郁寡欢,心不在焉,从何谈起提高学习效率。这时,唯一的方法是,向人请教,不懂的地方一定要弄懂,一点一滴地积累,才能进步。如此,才能逐步地提高效率。
五、保持愉快的心情,和同学融洽相处。
每天有个好心情,做事干净利落,学习积极投入,效率自然高。另一方面,把个人和集体结合起来,和同学保持互助关系,团结进取,也能提高学习效率。
六、注意整理。
学习过程中,把各科课本、作业和资料有规律地放在一起。待用时,一看便知在哪。而有的学生查阅某本书时,东找西翻,不见踪影。时间就在忙碌而焦急的寻找中逝去。我认为,没有条理的学生不会学得很好。
评:学习效率的提高,很大程度上决定于学习之外的其他因素,这是因为人的体质、心境、状态等诸多因素与学习效率密切相关。
总结
学习必须讲究方法,而改进学习方法的本质目的,就是为了提高学习效率。
可以这样认为,学习效率很高的人,必定是学习成绩好的学生。因此,对大部分学生而言,提高学习效率就是提高学习成绩的直接途径。
提高学习效率并非一朝一夕之事,需要长期的探索和积累。前人的经验是可以借鉴的,但必须充分结合自己的特点。影响学习效率的因素,有学习之内的,但更多的因素在学习之外。首先要养成良好的学习习惯,合理利用时间,另外还要注意"专心、用心、恒心"等基本素质的培养,对于自身的优势、缺陷等更要有深刻的认识。总之,"世上无难事,只怕有心人。"
漫谈学习方法
下面主要谈五个方面的学习方法。
(一)抓好预习环节
预习,即课前的自学。指在教师讲课之前,自己先独立地阅读新课内容。初步理解内容,是上课做好接受新知识的准备过程。有些学生由于没有预习习惯,对老师一堂课要讲的内容一无所知,坐等教师讲课。老师讲什么就听什么,老师叫干什么就干什么,显得呆板被动,缺乏学习的积极性和主动性。有些学生虽能预习,但看起书来似走马观花,不动脑、不分析。这种预习一点也达不到效果。
1.预习的好处
(1)能发现自己知识上的薄弱环节,在上课前补上这部分的知识,不使它成为听课时的“拌脚石”。这样,就会顺利理解新知识。
(2)有利于听课时跟着老师讲课的思路走。对听课内容选择性强。明确哪些知识应该放上主要精力,加强理解和消化;哪里应该重点记笔记,做到心中有数。
(3)预习有利于弄清重点、难点所在,便于带着问题听课与质疑。注意力集中到难点上。这样,疑惑易解,听起来轻松、有味,思起来顺利主动,学习效果高。
(4)预习可以提高记笔记水平。由于课前预习过,讲的内容和板书,心中非常清楚。上课时可以不记或少记书上有的,着重记书上没有的或自己不太清楚的部分,以及老师反复提醒的关键问题。从而可以把更多的时间用在思考理解问题上。
2.预习要注意的几个问题
(1)预习时要读、思、问、记同步进行。对课本内容能看懂多少就算多少,不必求全理解,疑难也不必钻深,只需顺手用笔作出不同符号的标记。把没有读懂的问题记下来,作为听课的重点。但对牵涉到已学过的知识以及估计老师讲不到的小问题,自己一定要搞懂,以消灭“拦路虎。”
(2)若以前没有预习的习惯,现在想改变方法,先预习后上课,但不能一下子全面铺开,每门功课都搞提前预习。这样做会感到时间不够用。显得非常紧张,不能达到预习效果。因此,刚开始预习时,要先选一两门自己学起来感到吃力的学科进行预习试点,等到尝到甜头,取得经验后,并在时间允许的条件下,再逐渐增加学科,直到全面铺开。
(3)预习应在当天作业做完之后再进行。时间多,就多预习几门,钻得深一点;反之,就少预习几门,钻得浅一点。切不可以每天学习任务还未完成就忙着预习,打乱了正常的学习秩序。
(4)学习差的学生,课前不预习,上课听不懂,课后还需花大量的时间去补缺和做作业,整天忙得晕头转向,挤不出一点时间去预习。其实,这种学生差的根本原因就在不预习上。学习由预习、上课、整理复习、作业四个环节组成。缺了预习这个环节就会影响下面环节的顺利运转。这些学生必须作好在短期内要多吃点苦的思想准备。在完成每天的学习任务后,要安排一点时间预习。这样做虽然费了时间,但上课能听得懂,减少了因上课听不懂而浪费的时间,同时,还可以减少花在课后整理、消化、作业上的时间。时间一长,运转正常了,学习的被动局面也就会改变,就再也不需加班加点了。
3.预习的要求
(1)要注重讲究实效,不搞形式。要根据学习计划安排时间,不能顾此失彼。预习一般要安排在新课的前一天晚上进行。这样,印象会较深。新课难度大,就多预习一些时间,难度小就少预习一些时间。应重点选择那些自己学起来吃力,又轮到讲授新课的科目进行预习,其他科目只需一般性的预习。某些学科,也可以利用星期天,集中预习下一周要讲授的课程,以减轻每天预习的负担。
(2)预习的任务是通过初步阅读,先理解感知新课的内容(如概念、定义、公式、论证方法等),为顺利听懂新课扫除障碍。具体任务是:①复习、巩固和补习有关已学的旧知识,找出新课中自己不理解的问题,并把理解不透的记下来。②初步弄清新课中的基本内容是什么?这些知识内容在原有的基础上向前发展了什么?并找出书中的重点、难点和自己费解的地方。③预习时要看、思、做结合进行。看:一般是把新课通读一遍,然后用笔勾划出书上的重要内容。需要查的就去查一查;需要想的就应该认真想一想;需要记的就应该记下来。思:指有的时候要想,做到低头看书,抬头思考,手在写题,脑在思考。做:在看的过程中,需要动手做的准备工作以及对课本后的练习题要进行尝试性的做一做。问答题答一答。不会做,不会答可以再预习,也可以记下来。等教师在授课时集中注意听讲或向老师提出。预习以后,还要合上书本,小结一下。这样做能使自己对新教材有更深刻的印象。
(二)注重听课环节
学生的大部分时间是在课堂中度过的。因此,听课是学生接受教师指导,掌握知识,发展智力的中心环节。是获取知识的重要途径。是保证高效率学习的关键。听课时,有的学生全神贯注,专心听讲;有的分心走神,萎靡不振,打瞌睡。有的像录音机,全听全录;有的边听边记,基本上能把教师讲的内容都记下来;有的以听为主,边听边思考,有了问题记下来;有的干脆不记,只顾听讲;有的边听边划边思考。思考时,有的思考当堂内容,有的思考与本课相关的知识体系,有的思考教师的思路,有的拿自己的思路与教师的思路比较。
那么,怎样才能达到听好课的目的呢?总的要求是要抓住各学科的不同特点,带着问题听,听清内容,记住要点,抓住关键,着重听老师的讲课方法与思路,释疑的过程与结论。具体要求:
1.要充分认识老师在上课时的重要作用。因为教师在课堂教学中起着主导的作用。他在课堂中的分析讲解远比课后辅导要详细得多,这也是学生自已看书无法比较的。课堂教学是老师指导学生掌握知识的一条最简捷的路。因此,每个学生都应该虚心向老师学习。在老师的启发诱导下上好每一节课。
2.要集中注意力,全神贯注地听老师讲解,跟着老师的讲课思路走,千万不能思想开小差。如果在老师启发下,自己有了比较好的想法,可以在笔记本上记下来,等下课后再去深入思考或请教老师和同学。总之,课堂上的“分心”,是学习的大敌。
3.听课中可以尝试在老师没有作出判断、结论之前,自己试作判断、试下结论。看看自己想的与老师讲的是否一致。找出对与不对的原因。
4.要力求当堂理解。理解是掌握事物本质、内部联系及规律的思考过程。那么,怎样才能做到当堂理解呢?在课堂上,你想的应与老师讲的统一,你思考的问题应与老师讲的问题统一。在教师的启发下,你要始终开动脑筋,积极思考。如果在思考中出现不理解或理解不透的地方,应举手提出问题。如果课堂上老师没有时间解答你的问题,应继续听老师的讲解。课后再去请教老师。
5.要跟着老师的思路跑。听课是为了增长知识和发展智力。因此,不能把知识听懂了就算课听好了等同起来。高水平的听课应该不仅注意老师传授的具体知识,更应该注意老师讲课的思路。追着老师的思路跑,目的在于把老师讲课过程中运用的各种思维方式,思维过程搞清楚。学习老师是如何进行周密科学思考的,从而提高自己的思维能力和智力水平。有的学生不注意老师的讲课思路,而偏重于记忆老师的推导,总结出来的公式或结论,认为这是听课的主要目的。其实,这样掌握的知识,是知其然而不知其所以然的死知识。这种死知识忘得快,又不能用于解决实际问题,更谈不上发展智力。
6.要抓住一节课的知识内容和学科特点的关键。知识内容的关键一般指基本概念、基本原理、基本关系式以及公式、定义。当老师讲解这些关键知识时,你一定要特别注意,抓住不放。同样,不抓住学科特点的关键学习,也会影响你的学习效果。实际上,各门学科的内容体系、发展思路、训练要求以及教的方法各有特点。学习中非抓住这些特点不可。如物理、化学、生物课要特别注意观察和实验,在获得感性知识的基础上,通过思考来掌握科学概念和规律。数学要通过大量演算,证明等练习获得数学知识,培养出数学思维能力。语文和外语在听课时,主要抓住字、词、句、篇等方面的知识点,并且通过听、说、读、写来提高阅读和写作能力。以便更好地理解和掌握语言和文字。
(三)紧抓复习环节
复习是对前面已学过的知识进行系统再加工,并根据学习情况对学习进行适当调整,为下一阶段的学习做好准备。因此,每上完一节课,每学完一篇课文,一个单元,一册书都要及时复习。若复习适时恰当,知识遗忘就少。早在1885年,德国的心理学家艾滨浩斯,通过实验发现刚记住的材料,一小时后只能保持44%;一天后能记住33%;两天后留下的只有28%;六天后为25%。所有的人,学习的知识都会发生先快后慢的遗忘过程。一些记性好的学生是因为能经常从不同的角度、不同的层次上进行复习,做到“每天有复习,每周有小结,每章有总结”,从而形成了惊人的记忆力。因此,很多学生对所学知识记不住,并不是脑子笨,而是不善于复习,或复习功夫不深。
1.复习的要求
(1)课后应及时把老师讲的和板书的知识像放电影一样,在脑子里过一遍。看看能想起多少,忘了多少。然后翻开笔记,查找漏缺。
(2)看教材时,应边看边思,深思重点、难点。分析疑点、深化理解。
(3)看阅必要的参考书,充实课堂所学的内容。
(4)整理与充实笔记,对知识进行归类,使知识深化、简化、条理化,并按规律去加强记忆。
(5)加强练习。练习一般应在复习后进行,也可边复习边练习。在复习过程中,加强练习,能提高复习效果。
(1)及时复习。当天学的知识,要当天复习清,决不能拖拉。做到不欠“帐”。否则,内容生疏了,知识结构散了就要花费加倍时间重新学习。要明白“修复总比重建倒塌了的房子省事得多”。
(2)要紧紧围绕概念、公式、法则、定理、定律复习。思考它们是怎么形成与推导出来的?能应用到哪些方面?它们需要什么条件?有无其他说法或证明方法?它与哪些知识有联系?通过追根溯源、牢固掌握知识。
(3)要反复复习。学完一课复习一次,学完一章(或一个单元),复习一次。学习一阶段系统总结一遍。期末再重点复习一次。通过这种步步为营的复习,形成的知识联系就不会消退。
(4)复习要有自己的思路。通过一课、一节、一章的复习,把自己的想法,思路写成小结、列出图表、或者用提纲摘要的方法,把前后知识贯穿起来,形成一个完整的知识网。
(5)复习中遇到问题,不要急于看书或问人,要先想后看(问)。这对于集中注意力、强化记忆、提高学习效率很有好处。每次复习时,要先把上次的内容回忆一下。这样做不仅保持了学习的连贯性,而且对记忆有很好的效果。
(6)复习中要适当看点题、做点题。选的题要围绕复习的中心来选。在解题前,要先回忆一下过去做过的有关习题的解题思路,在这基础上再做题。做题的目的是检查自己的复习效果,加深对知识的理解,培养解决问题的能力。做综合题能加深知识的完整化和系统化的理解,培养综合运用知识的能力。
(四)独立完成作业环节
独立完成作业是深化知识,巩固知识,检查学习效果的重要手段,也是复习与应用相结合的主要形式。然而,有些学生没有真正利用好这个环节。他们一下课就抢着做作业,作业一完,万事大吉。更有些学生课上根本没听懂,下课后也不问,作业抄袭后向老师交差完事。其实,做好作业有以下意义:
1.可以检查自己的学习效果。通过做作业可以发现问题,以便及时补救。
2.通过做作业时的思考,可以加深对知识的理解,把易混淆的概念搞清楚,把公式的变换搞熟练。总之,有利于把书本上的知识转化成自己的知识。
3.可以培养思维能力。因为作业中提出的各种问题,必然会促使自己积极思考,增强分析问题和解决问题的能力。
4.做完作业后,不能把它一扔了事,而应当定期进行分类整理,为总复习积累资料。复习时,翻阅一下记录的作业,既方便省事,又印象深刻。
做作业的基本要求和方法:
1.审题。审题是做作业十分重要的一步。拿到一个题目,首先应判断它属于哪一类,难易的程度如何?分清题目的条件和要求。已知条件是什么?从题目提供的信息中还能挖掘出什么条件?它的要求是什么?同时要让自己的思路顺着题目的路子思考。通过思考、准确、透彻地理解题目的意思,分清已知条件有哪些,题目要求的结论是什么。在审题过程中,还要注意哪些地方没有直接用语言表示出来,而隐含在题目中的其他形式条件,即注意隐含条件的挖掘。
2.寻找解题途径。方法一般有三种:一种是“由因导果”,可以表述为:“已知→可知→可知……”,最后到达结论。第二种是“执果索因”,即结论←需知←需知←……”。这样一层一层的追下去,直到追到已知条件全部有了为止。这样。已知条件和要求结论之间的道路就打通了。第三种是对于一些比较复杂的题目,就需要我们用前两种的综合办法,以尽量缩短条件与结论的距离。即一方面从已知条件推出一些可知的中间结果,另一方面根据题目的要求分析出一些需知的中间结果。需知与已知一旦统一,则可得到解题的途径。
在寻找解题途径中,要广泛联想与这些条件和结论有关的概念、公式、法则和方法等。联想过去是否解过和与此相同或相近的题目。那时是怎样解的?如果能联想起有关的旧知识,即与此题相应的规律原理、原则、公式就会浮现在脑海中,使解题的思路更加开阔。联想越广,跨度越大,得到的解题效果也越佳。
有时因为题目较复杂,为了思考方便,也可以把审题的过程画成简图。这实际上是一个运用学过的知识,把题目加工、改造的过程。经过加工,思路明了,解题捷径就会出现在眼前。
3.正确解题,经过①②两个步骤,已经寻得解题的途径,判定了解题的方案。但在实施时还要注意解题的保质保量。要做到这点,解题的步骤必须按部就班,一步步演算。书写规范化,格式明了,表达准确。要做到这点,必须要有扎实的基础。除此以外,在解题中,重要的知识点应写出来,繁题要简写,简题要详写。
4.注意检查。就是回过头来再检查一遍,看看是否题目要求的解都求出来了,有没有漏解。是否求出的解均符合题目的要求,有没有错解。检查是培养学生独立思考能力的重要一环。检查的方法很多。①步步检查法。即从审题开始,一步步检查。这种方法可以检查出计算、表达上的错误。②重做法。即重做一遍,看结果是否一样。③代入法。将计算结果代入公式或式子看看是否合理。同时,还要注意锻炼一题多解、一题多想。比较归类的解题习惯,不断提高自己分析问题和解决问题的能力。
(五)认真记好课堂笔记
记笔记是为了学,为了懂,为了用。记笔记的原则是以听为主,以记为辅。简练明白,提纲挈领,详略得当。难点不放过,疑点有标记。不乱,不混,条理明。对联想、发现的问题,要及时记。笔记要留有空白处,便于复习时补缺。