编程的相关知识,内容包括简介、数据类型、控制流程、函数、对象、类、三种编程方式。

一、简介

编程,顾名思义就是编写程序。程序,就是做一件事情或者解决一个问题所采取的一系列固定步骤。

编程语言有许多不同的类型,它们有不同的业务场景。编写程序,目的是让计算机解决某个问题或完成某项功能。我目前学习了 JavaScript 和 Python 两门编程语言,在此特别想总结一下编程相关的一些概念。

二、数据类型

数据(data)是信息的表现形式和载体,是对现实世界实体和概念的抽象。

Python 数据类型

  1. # 基本类型
  2. 整数 int 123
  3. 浮点数 float 123.456
  4. 复数 complex 1123+456j
  5. 逻辑值 boolean True / False
  6. 字符串 string "Hello word"
  7. ————————————————————————————————————————————
  8. none
  9. ————————————————————————————————————————————
  10. # 容器类型
  11. 列表 list [1,2,3]
  12. 元组 tuple (1,2,3)
  13. 字典 dir {x:"小明", y:"小白",z:"小花"}
  14. 集合 set {x,y,z}

JavaScript 数据类型

  1. 数字 number 123
  2. 逻辑值 boolean True / False
  3. 字符串 string "Hello word"
  4. symbol
  5. ————————————————————————————
  6. null
  7. undefined
  8. —————————————————————————————
  9. 对象 object

JavaScript 和 Python 都是动态语言,不用提前声明变量的类型。

三、控制流程

几乎所有的程序设计语言都提供了三种控制流程

  1. 顺序结构:按照语句队列前后顺序来确定下一条将要执行的语句
  2. 条件分支结构:根据当前情况来选择下一条语句的位置
  3. 循环结构:周而复始地执行一系列语句

1. 顺序结构

Python

  1. a = 1
  2. c = a + 2
  3. print(c)

JavaScript

  1. let a = 1
  2. let c = a + 2
  3. console.log(c)

2. 条件分支结构

Python

  1. a,b = 1,3
  2. if (a < b):
  3. print("a 小")
  4. else:
  5. print("a 大")

JavaScript

  1. let a = 1
  2. let b = 3
  3. if (a < b){
  4. console.log("a 小")
  5. }
  6. else{
  7. console.log("a 大")
  8. }

3. 循环结构

Python

  1. # 迭代循环
  2. for i in range(1,11):
  3. print(i)
  4. ———————————————————————————————
  5. # 条件循环
  6. i = 1
  7. while (i<=10):
  8. print(i)
  9. i += 2

JavaScript

  1. // 迭代循环
  2. for (let i=1,i<=10,i++){
  3. console.log(i)
  4. }
  5. ——————————————————————————————
  6. // 条件循环
  7. let i = 1
  8. while (i<=10){
  9. console.log(i)
  10. i +=2
  11. }

四、函数(function)

函数是一种封装。程序中实现明确功能的代码段可以封装成一个函数,以便复用。

1. 定义并调用函数

Python

  1. def add(a,b):
  2. return a + b
  3. add(1,2)

JavaScript

  1. function add(a,b){
  2. return a + b
  3. }
  4. add(3,4)

2. 函数的参数

  1. 形式参数(parameter):函数创建和定义过程中,函数名后面括号里的参数
  2. 实际参数(argument):函数在调用过程中传入的参数

Python 定义和调用函数时,参数可以是在参数表中写明参数名的固定参数,也可以是数量不定的可变参数

  1. # 固定了顺序和数量的固定参数
  2. def add(key1,key2=10):
  3. return key1+key2
  4. add(2) # 12
  5. add(2,3) # 5
  6. ————————————————————————————————————————
  7. # 不带参数名的多个参数
  8. def f1(*args):
  9. print(args)
  10. for arg in args:
  11. print(arg)
  12. f1(1,2,3) # (1,2,3) 1 2 3
  13. ————————————————————————————————————————
  14. # key=value 形式的多个参数
  15. def f1(**kwdargs):
  16. print(kwdargs)
  17. for kwdarg in kwdargs:
  18. print(kwdarg)
  19. f1(a=1,b=2,c=3) # {'a': 1, 'b': 2, 'c': 3} a b c

JavaScript 定义和调用函数时,参数的写法更随意,形参甚至可以不写

  1. function f1(){
  2. console.log(arguments) // arguments 是一个伪数组
  3. for (i=0;i<arguments.length;i++){
  4. console.log(arguments[i])
  5. }
  6. }
  7. f1(3,4,5) // [3,4,5] 3 4 5

形式参数只是代表一个位置、一个变量名,实际参数是一个具体内容,赋值到变量的值

五. 对象(object)

对象既表示客观世界问题空间中的某个具体事物,又表示软件系统空间中的基本元素。

  • 对象 = 属性 + 方法

Python 中的所有事物都是以对象形式存在

  • 从简单的数值类型,到复杂的代码模块,都是对象
  • 它的对象以id作为标识,既包含数据(属性),也包含代码(方法),是某一类具体事物的特殊实例
  1. id(1) # 查看 id
  2. type(1) # 查看类
  3. dir(1) # 查看属性和方法
  4. id(print) # 2202045845072
  5. type(print) # <class 'builtin_function_or_method'>
  6. dir(print)

JavaScript 中对象是它的数据类型

  • 数组和函数是特殊的对象
  • 它的对象同样包含属性和方法,是某一类具体事物的特殊实例
  • JS 有构造函数的概念
  1. let array = [1,2,3]
  2. console.dir(array) // 查看自身的属性、方法及原型链

六、类(class)

类是对象的模版,封装了对应现实实体的性质和行为

  • 实例对象(Instance Objects)是类的具体化
  • 把类比作模具,对象则是用模具制造出来的零件

1. 定义并调用类

Python

  1. class Force:
  2. def __init__(self,x,y):
  3. self.fx,self.fy = x,y
  4. def show(self):
  5. print("Force(%s,%s)"%(self.fx,self.fy))
  6. def add(self,x,y):
  7. x += self.fx
  8. y += self.fy
  9. return Force(x,y)
  10. force = Force(1,2)
  11. force.show() # Force(1,2)
  12. force2 = force.add(3,4)
  13. force2.show() # Force(4,6)

JavaScript

  1. // ES6 引入 class 语法
  2. class Square{
  3. constructor(width){
  4. this.width = width
  5. }
  6. getArea(){
  7. return this.width*this.width
  8. }
  9. getLength(){
  10. return this.width*4
  11. }
  12. }
  13. let square = new Square(5)
  14. console.log(square.getArea()) // 25
  15. console.log(square.getLength()) // 20
  1. // JS 风格的语法,在 JS 中定义类就是定义一个构造函数
  2. function Square(width){
  3. this.width = width
  4. }
  5. Square.prototype.getArea = function(){
  6. return this.width*this.widvth
  7. }
  8. Square.prototype.getLength = function(){
  9. return this.width*4
  10. }
  11. let square = new Square(6)
  12. console.log(square.getArea()) // 36
  13. console.log(square.getLength()) // 24

七、三种编程方式

在此举一个简单的例子,要做的需求如下:

  • 输入一个正方形的边长
  • 输出它的面积和周长

1. 面对过程编程

  1. # Python
  2. width = 5
  3. area = width*width
  4. length = width*4
  5. print("正方形的面积是%d,周长是%d"%(area,length)) # 正方形的面积是25,周长是20
  6. ——————————————————————————————————————————————————————————————————————————————
  7. // JavaScript
  8. let width = 6
  9. area = width*width
  10. length = width*4
  11. console.log(`正方形的面积是${area},周长是${length}`) // 正方形的面积是36,周长是24

2. 面对对象编程

  1. # Python
  2. class Square():
  3. def __init__(self,width):
  4. self.width = width
  5. def getAreaLength(self):
  6. area = self.width*self.width
  7. length = self.width*4
  8. print("正方形的面积是%d,周长是%d"%(area,length))
  9. square = Square(5)
  10. square.getAreaLength() # 正方形的面积是25,周长是20
  11. ———————————————————————————————————————————————————————
  12. // JavaScript
  13. class Square{
  14. constructor(width){
  15. this.width = width
  16. }
  17. getAreaLength(){
  18. let area = this.width*this.width
  19. let length = this.width*4
  20. console.log(`正方形的面积是${area},周长是${length}`)
  21. }
  22. }
  23. let square = new Square(6)
  24. square.getAreaLength() // 正方形的面积是36,周长是24

3. 面对函数编程

  1. # Python
  2. def getAreaLength(width):
  3. area = width*width
  4. length = width*4
  5. print("正方形的面积是%d,周长是%d"%(area,length))
  6. getAreaLength(5) # 正方形的面积是25,周长是20
  7. ————————————————————————————————————————————————————————————
  8. // JavaScript
  9. function getAreaLength(width){
  10. let area = width*width
  11. let length = width*4
  12. console.log(`正方形的面积是${area},周长是${length}`)
  13. }
  14. getAreaLength(6) // 正方形的面积是36,周长是24

「@浪里淘沙的小法师」