-
开发语言的静态/动态,强类型/弱类型之分
2019-10-18 10:25:18之前同事每次跟我提起他学习了某个语言,并介绍这个语言很棒时,开头都会跟我说这个语言是什么类型,动态还是静态,我总是比较尴尬的不知道怎么去接。在知乎上翻了一遍发现一个特别好的解释,因为是图片,我这里就...之前同事每次跟我提起他学习了某个语言,并介绍这个语言很棒时,开头都会跟我说这个语言是什么类型,动态还是静态,我总是比较尴尬的不知道怎么去接。在知乎上翻了一遍发现一个特别好的解释,因为是图片,我这里就整理出文字,如果有谁知道原文的出处麻烦留言告知我一下。知乎链接(比较靠后的一个回答,需要耐心翻一下)
概念定义
静态类型语言
指在编译变量时变量的数据类型即可确定的语言,比如C/C++/JAVA/C#,多数静态类型语言要求在使用变量之前必须声明数据类型,某些具有类型推导能力的现代语言则可以不这么做
优势
- IDE可以智能提示。因为静态类型语言的类型是确定的,所以编辑器就可以知道当前的变量有哪些属性和方法
- 编译的时候能够发现类型不匹配的错误,而动态语言最多只能发现语法的错误
劣势
- 因为要定义数据类型,代码量也会随之变大,编程应该更专注于程序的本质,而不是把精力分散到数据类型定义上
- 缺乏灵活性,因为一个变量只能赋值某种类型,当程序需要扩展的时候,这就会成为枷锁,当然可以通过继承和接口实现,但这会陷入另一个深渊,需要更多的精力去纠结复杂的继承关系
动态类型语言
指在运行时确定数据类型的语言,变量使用之前不需要类型声明,通常变量的类型就是被赋值那个值的类型,比如VB/Python
优势
- 相反于静态类型,编程完全集中于程序的设计本质上,代码的简洁度也会提高,开发效率可能会数倍的提高
- 因为程序规模的降低,程序的可理解性也会提高。静态类型的拥护者可能会认为,少了类型信息,程序编的更不可读了。这个就属于仁者见仁了,有人会认为程序更集中于程序的本质上会更可读,也有人认为有了类型的辅助程序会更可读
劣势
- 程序执行速度慢,因为动态类型的语言,类型检查是在运行期做的,但随着计算及性能的提高,执行速度不是什么严重的问题
- 不执行就检测不出错误,当然要是增加类型检查插件那就另说了。
强类型语言
一旦变量的类型被确定,就不能转化的语言,比如java/Python。
弱类型语言
弱类型语言则反之,一个变量的类型是由其上下文确定的,比如VB/Perl/C
如何选择
套用一句流行的话就是:Static typing when possible, dynamic typing when needed。我的理解如下:
- 尽可能使用静态语言。类型判断可能帮助我们更早的发现问题,让代码更加规范化
- 在需要的时候使用动态语言。比如写一些脚本,肯定想要高效的实现,懒的去专门定义那些烦人的Interface。
语言类型图
-
一起学习水晶报表之推模式【强类型的DataSet实现显示报表数据】(课程6)
2014-02-20 11:33:10前面探讨了一种推模式,是弱类型的DataSet的,这里我们接着讨论了一下如何进行强类型的DataSet实现显示报表数据。 那么这两种区别在哪里呢?我们来简单分析一下, 我们刚才通过弱类型的DataSet进行访问和绑定数据源...前面探讨了一种推模式,是弱类型的DataSet的,这里我们接着讨论了一下如何进行强类型的DataSet实现显示报表数据。
那么这两种区别在哪里呢?我们来简单分析一下,
我们刚才通过弱类型的DataSet进行访问和绑定数据源,它是通过了简单的SQL查询命令语句进行的,然后返回的Dataset。当然我前面返回的是DataTable,其实还是一样,你也可以更改哦,前面好像已经说过啦。
这里所说的强类型的DataSet,无非就利用VS内置的数据集类型,然后形成数据字段的视图表,通过这样来绑定和显示,返回Dataset,其实是大同小异的。
类型化的DataSet与非类型化的DataSet的区别
类型化的DataSet
非类型化的DataSet
类型化的DataSet是先从基DataSet类派生,然后使用XML架构文件(.xsd)中的信息生成新类
非类型化的DataSet没有相应的内置架构,它与类型化的DataSet一样,也包含表、列和行等,但它们只作为集合公开
直接通过数据集名称引用表、列和行
需要Tables集合才能引用表、列和行
下面我们来分析和实现一下:
【1】首先建立一个DataSet。在项目中,单击右键>>选择【添加】>>【新建项】>>【数据】>>【数据集】
【2】这里,有两种方法可以建立,我这里从【服务器资源管理器】直接建立,方法是,右键>>【添加链接】>>后面的步骤大家都懂的。
完成后, 将呀显示的表拖动过来到窗口。
【3】至此,便完成了DataSet强类型的数据集,保存一下。
【4】然后我们创建报表,方法我就不说了,相信大家都明白了报表模板rpt的创建过程了:右键【添加】>>【新建项】>>【Reporting】。这里我依然采用空白报表,美观自己搞去哈。注意了,此时我们选择的【数据库专家】中,因为我们在项目中已经建立了强类型DataSet,那么我们在【项目数据】中选择即可。有三种方式:
一种是【ADO.NET数据集】,另一种是【.NET Objects】,第三种是:在【创建新连接】>>选择【数据库文件】>>选择对应的.xsd类型文件。如图
【5】编辑,画报表模板,自己搞定了
【6】添加后台代码:
(1)引入命名空间
using WebApplication1.ReportDataSetTableAdapters;
//注意:此处得相应修改的命名空间哦: 由后面的RegionTableAdapter()确定。
其实就是数据集类型确定,不同的报表对应的名字不一样哦
(2)添加代码:
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ReportDataSet.RegionDataTable dt = new ReportDataSet.RegionDataTable();
new RegionTableAdapter().Fill(dt);
CrystalReport3 rptDoc = new CrystalReport3();
rptDoc.SetDataSource((System.Data.DataTable)dt);
//SetDataSource有两种重载类型,包括ds和dt,因此,需要显式定义System.Data.DataTable。
CrystalReportViewer1.ReportSource = rptDoc;
}
} -
C++学习(二) 基本数据类型
2010-01-08 15:32:00数据类型是任何语言的基础,无论是弱类型语言(如javascript)还是强类型语言(如java),都有数据类型,掌握数据类型是必须的。提纲 整型 浮点型 C++的算术操作符 类型转换一、整型 C++的基本整型是boolean,char、short...数据类型是任何语言的基础,无论是弱类型语言(如javascript)还是强类型语言(如java),都有数据类型,掌握数据类型是必须的。
提纲
整型
浮点型
C++的算术操作符
类型转换一、整型
C++的基本整型是boolean,char、short、int和long,每种整型都分为无符号和有符号。经常使用的整型是int类型的。
char类型就是字符类型,用于表示那些特殊字符。符号常量——预处理方式
在climits中包含与下面类似的语句
#define INT_MAX 2147483647
#define和#include一样,也是一个预处理指令,在C语言中通过#define预处理指令来定义常量。如果有些头文件需要兼容C和C++,必须使用#define。C++用const限定符来定义常量
在C语言中用#define来定义常量,但是我并不清楚常量的类型。而在C++中用诸如const int SIZE = 26;的方式来定义常量。Java中用public final int SIZE = 26;这和const是差不多的。二、浮点型
C++的浮点型分为float,double和long double。double的精度更高,不过一般情况下不是特别精密的运算,我们常常和数学函数一起使用,比如四舍五入。
下面一个简单的例子是说明float和double精度的,setf()是ostream的方法,防止程序把较大的值改为E表示法,并使数值显示到小数点后6位,参数ios_base::fixed和ios::floatfield是iostream的常量。
运算结果:
三、算术操作符
”+”,”-”,”*”,”/”,”%”四、类型转换
分为隐式转换和显示转换(强制转换)。
隐式转换一般发生在不同类型的数在进行运算时或者在函数传递参数时。
显示转换:int a = 5; double b = (double)a;像这种类似的方式。 -
前端面试之类型那些事(九) --- 基本类型、引用类型、类型转换、类型检测
2020-05-14 19:08:54我们都知道JS是一个弱类型的语言。在过去仅仅是var代替了所有,ES6之后又引入了let,const。 虽然在写的时候,没有那么多是区别,但是实际计算的时候,该是什么还是什么。 基本类型,引用类型 总体来说,JS分为基本...最近在准备面试,感觉好些东西了解,但是了解的深度有限。自己就总结了几个模块,打算强化一下。如果你感觉我的文章对你有帮助,请点赞。如果感觉有哪些不足之处,可以留言。让我们一同进步,学习!!!
最后在说明一下,这个系列我会一直写下去。如果,你有什么好的方向,也可以提出来。我们都知道JS是一个弱类型的语言。在过去仅仅是var代替了所有,ES6之后又引入了let,const。
虽然在写的时候,没有那么多是区别,但是实际计算的时候,该是什么还是什么。基本类型,引用类型
总体来说,JS分为基本类型,引用类型。
基本类型:string,number,boolean,null,undefined,Symbol
引用类型:Object,Function,Array类型转换
强调说明一下,类型转换仅仅发生在基本类型中
字符
let x = "1" // "string" let y = "1" // "string" x + y // "11" "string" x + ‘1’ // "11" "string" x + 1 // "11" "string" x + true // "1true" "string" x + false // "1false" "string" x + undefined // "1undefined" "string" x + null // "1null" "string" x - y // NaN "number" x - 1 // 0 "number" x - true // 0 "number" x - false // 1 "number" x - undefined // NaN "number" x - null // 1 "number"
布尔
let x = true // true "boolean" x + true // 2 "number" x + null // 1 "number" x + undefined // NaN "number"
null,undefined
let x = null // null "null" x + null // 0 "number" x - null // 0 "number" x - undefined // NaN "number" x + undefined // NaN "number"
**总结:**对于字符类型来说,可以与任何类型直接相加(字符串拼接)。其他类型在做操作时,包括字符串的减法操作,会按照 true 为 1,false 为 0 ,null 为 0,undefined 转化为NaN 的方法进行类型转换。针对不能进行类型转换的字符串,则直接报错。Uncaught TypeError。
tips:以上测试以及总结不针对 Symbol 类型,后续会有一篇专门针对 Symbol 的文章
类型检测
常规检测方法
typeof
instanceof
Object.prototype.toStringtypeof
区分基本类型,引用类型。但是null特殊,是Object
instanceof
这一块利用了原型,原型链的知识。
可以查看我之前的文章 前端面试之原型链那些事(七)那里面写的比较详细Object.prototype.toString
所有的数据类型都可以用 Object.prototype.toString 来检测,而且非常的精准。
var a = 123; console.log(Object.prototype.toString.call(a)); // [object Number] var b = "string"; console.log(Object.prototype.toString.call(b)); // [object String] var c = []; console.log(Object.prototype.toString.call(c)); // [object Array] var d = {}; console.log(Object.prototype.toString.call(d)); // [object Object] var e = true; console.log(Object.prototype.toString.call(e)); // [object Boolean] var f = null; console.log(Object.prototype.toString.call(f)); // [object Null] var g; console.log(Object.prototype.toString.call(g)); // [object Undefined] var h = function () {}; console.log(Object.prototype.toString.call(h)); // [object Function] var A = new Number(); console.log(Object.prototype.toString.call(A)); // [object Number]
-
MySQL 数据类型
2018-04-17 17:02:00前言快速到底 如果我们只顾着往前学习,不会总结,那一段时间之后,你将一无所有。 我们学习一门语言,无非从两个方面入手...这点只针对强类型的语言,像 js 这种弱类型的语言,是不需要考虑这一点的 希望通... -
python学习相关
2021-01-19 13:43:06区分变量是静态类型还是动态类型,是强类型还是弱类型 Python是动态类型,强类型。详细:https://zhuanlan.zhihu.com/p/89261832 基本类型和封装类型 Python3 中有六个标准的数据类型: 1. Number(数字) 2. ... -
C#隐式类型局部变量经验总结
2010-07-08 15:11:00这里介绍C#隐式类型局部变量,既然是局部变量,那么它就只能用在方法内部了,注意C#是强类型的,引入了一个var并不是像 javascript那样,变成了一个弱类型的语言。 C#语言有很多值得学习的地方,这里我们主要... -
Javascripit类型转换比较那点事儿,双等号(==)
2018-12-28 02:50:00前不久因为一个项目设计的问题,烦心了好几天,为了不留坑拥抱强类型语言特点,还是选择了'==='作为数据判断是否相等,对于'=='今天来探究一下猫腻(弱类型的JavaScript的坑真的太多了,typescript真香) ... -
JavaScript学习
2020-12-01 21:20:38JS基础 JS语言概述 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">... JS是弱类型,Java是强类型 弱类型:定义了还是可以改变 强类型:定义了就不能改变 特点: 1. -
java中的静态语言_java是动态语言还是静态语言?
2021-02-28 18:21:18java是静态语言。...推荐学习:《编程视频课程》Java到底是动态语言还是静态语言,是强类型还是弱类型呢?虽然知道但是还是不够深入,接下来就一起探讨下吧。图释碰巧看到一张图,完美的区分了以... -
java语法学习_JAVA学习(一)——基本语法
2021-02-12 12:03:12tips:前端开发写惯了弱类型语言,再来学强类型语言,真的是被各种修饰符、类型声明给整的云里雾里,而且java语法和javascript语言差别还是很大的,所以做好笔记,把一些需要注意的地方记下来是非常重要的,接下来就... -
c# 第六次学习
2018-05-08 21:45:31一.什么是类型(type)1.数据类型(高级,内存节省)(不要随意占用内存) 数据...强类型语言与弱类型语言的比较。(受数据类型影响)c#强类型语言。二。类型在c#中的运用三。c#语言的类型系统四。变量,对象和内存... -
【Python语言学习】2020.10.9Python基础学习Ⅰ
2020-10-13 19:36:17Python基础 Python简述 ... 什么是强类型,比如c或者java这些语言在声明变量之前是需要定义变量是int还是str类型的。php是弱类型的语言,它不会区分变量的类型,你给它什么它就是什么。python在声明 -
JAVA学习(一)——基本语法
2019-02-13 15:53:00tips:前端开发写惯了弱类型语言,再来学强类型语言,真的是被各种修饰符、类型声明给整的云里雾里,而且java语法和javascript语言差别还是很大的,所以做好笔记,把一些需要注意的地方记下来是非常重要的,接下来就... -
前端学习 03 js
2019-07-18 21:34:5301.JavaScript ...Java是一种强类型的编程语言,JS是弱类型的语言 JS写在html的任意地方,JavaScript 代码必须位于 标签之间 1.数据类型 字符串(无论是字符还是字符串统一称为字符串) 在js中单引... -
oc学习之旅:内存管理
2013-12-20 20:40:14以前的代码都是使用非ARC(手动管理),而ARC还不太完善,因此学习非ARC模式还是有必要的。...而oc中的引用分两种,一种是强引用retain(对应ARC中的strong),另一种是弱引用assign(对应ARC中weak)。 -
Java核心技术讲解学习三
2018-05-15 00:04:03LuckQI在这里你可以得到不只是技术,关注即可习得新技能 前天我们在写Java技术讲解的时候说过引用现在在Java中分为四种类型,强引用,软引用,弱引用,幻象引用。但是这几者之间有什么关系呢?Java中对象的可达性在... -
集成学习时,如何选择使用Bagging还是Boosting
2019-09-28 22:40:55集成学习 不是一个单独机器学习算法,而是构建多个并结合多个弱学习器来完成学习任务 通过训练若干个个体学习器,用一定结合策略,就可形成一个强学习器 ...一般是串行学习,一轮学完,学错的在... -
winexec函数 执行powershell 脚本_PowerShell 语法入门之变量
2020-12-12 21:36:36PowerShell 语法在学习语法之前,我们首先必需务必要搞懂几个问题:PowerShell是什么类型的语言,是强类型还是弱类型,是静态的还是动态的?把语言的性质弄清楚,再开始学习语法;有助于我们更好地深入理解。无论... -
pwd赋值给变量 shell_PowerShell 语法入门之变量
2020-12-24 04:56:09PowerShell 语法在学习语法之前,我们首先必需务必要搞懂几个问题:PowerShell是什么类型的语言,是强类型还是弱类型,是静态的还是动态的?把语言的性质弄清楚,再开始学习语法;有助于我们更好地深入理解。无论... -
最近的一些小问题
2018-03-23 16:06:53欢迎访问猫咪的博客主页 这个博客的内容是我学习编程时积累的一些问题,针对每一个问题都有我自己的见解。 ...有关算法的问题 当我的问题达到1000个的时候,我要给...2.python是强类型还是弱类型语言,什么是强类型... -
从编程看出道家思想
2009-03-03 02:33:00最近小弟一直在想啊,强类型语言好那,还是弱类型语言好,从个人感情上而 言,小弟最初学的是JAVA(其实应该是C,没学好不敢说自己学过呵呵~),后来又学了C#,都是强类型语言,后来工作了,因为需要,“被逼”学了... -
印刷行业进销存项目,用什么样的框架能开发效率更高学习成本维护成本更低
2010-01-07 20:08:38另外我去网上搜索了,java做进销存的应用,比php要多很多,那么是不是说明对于数学运算一些的应用,java强类型语言更有优势一些呢?而php流行的应用,多是互联网应用,以内容为主的,而不是数据为主的? 所以我... -
JavaScript中的函数
2018-11-11 21:30:31JS中的函数给我的感觉还是蛮新奇的,以前只学过C和Java,都是不可以函数嵌套的强类型语言,(尽管JDK10以后,Java引入了局部类型推断(Local-Variable Type Inference),即我们平时说的var),弱类型语言的一些特性,我... -
unity3d中C#与JS的一些区别
2015-01-14 22:34:00unity3d目前支持C#和JS两种脚本语言。...1.方法的定义,C#为强类型语言,所有的类型都必须明确标注;javascript为弱类型语言。 (强弱类型应该不用解释吧(╯‵□′)╯︵┻━┻) String GetSomething(int arg){... -
C、C++、Java、Python之间的区别
2019-04-09 15:49:53其中C++和Java都是强类型语言,而Python是一种弱类型语言。 1)python: 快速开发应用程序 python比较容易学习,语法很简单,融入了很多现代编程语言的特性。python的库非常丰富,可以迅速地开发程序,无论是网站... -
Angular快速了解并使用
2020-07-20 17:53:43在目前的我看来,它其实就是把JavaScript又封装了一下,将JavaScript这个弱类型语言,又增加了一些规范,变成了稍微强一点的“强类型语言”。编译完之后,它依然是一个JavaScript。 所以,我们只需要.
-
JDBC
-
MHA 高可用 MySQL 架构与 Altas 读写分离
-
UVA1174 LA3988 ZOJ3036 IP-TV【Kruskal算法+Prim算法】
-
如何解决数据库提示只有只读权限,无法操作的问题 what
-
中国计量学院《微机原理及其应用》5套期末考试试卷(含答案).pdf
-
Attention Models 注意力模型方法
-
【并发容器】4 阻塞/非阻塞队列的介绍与选择
-
管道通信
-
分而治之的分治思想
-
中山大学《护理综合》03-16历年考研试卷(含答案).pdf
-
access应用的3个开发实例
-
Initialization failed for ‘https://start.spring.io’
-
MySQL 四类管理日志(详解及高阶配置)
-
零基础极简以太坊智能合约开发环境搭建并开发部署
-
西方经济学 - 高鸿业 - -第四版答案.pdf
-
浙江科技学院《工程测量》期末考试试卷(含答案).pdf
-
MaxScale 实现 MySQL 读写分离与负载均衡
-
行政法与行政诉讼法--期末复习资料.pdf
-
中国近现代史纲要课后习题答案及备考题库.pdf
-
朱老师鸿蒙系列课程第1期-3.鸿蒙系统Harmonyos源码配置和管理