`
axgle
  • 浏览: 93571 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

面向变量编程

阅读更多
为什么ruby语言无接口(interface)?说说我的看法。

"接口"是一种把一组"代码"作为其值的"变量",类似于"语言包"的作用(其值可以为en.lang,zh.lang等等)
"变量"的值可以为数字,字符串。。。一直到如今的"代码"本身作为其值。
变量变量,就是可能会变化的量:所以如果代码可能会发生变化,那么代码就可以用变量表示,所以接口即变量

把"代码"本身作为变量的值,是任何有接口(interface)这个关键字的oop语言的一个进步。另外,ruby语言里没有interface这个关键字,但是把"代码本身作为变量的值"的现象却无处不在。所以,接口只不过是把"代码本身作为变量的值"的办法中的一个;而ruby语言不但可以"把代码作为变量"来传递,而且可以"用代码来生成新的代码",这就是其威力无比的"元编程"的能力了。

所谓的面向接口编程,就是面向代码可能会被更换(变化),所以用代码的变量,也就是接口来处理的办法,因此,从这样的意义上看它,面向接口编程依然是在面向变量编程。

"变量"从表示数字,字符串...到表示对象,接口,以及更一般的“代码本身”,所有的一切,都是面向变量编程。
一言以蔽之,无论你面向什么编程,都是在面向变量编程。无论过去,现在,还是未来。。。



分享到:
评论
16 楼 Prentice 2007-01-20  
Elminster 写道
NND,如今都开始玩图灵完备和 lambda 演算了,有谁能给个定义给我,告诉我啥叫“图灵机和 lambda 演算是等价的”?

呵呵,等价么就是,你要一个程序,找一个人用图灵机实现和找一个人用lambda 演算实现,价钱是一样的。

我想他的意思是,computability上是等价的。
15 楼 whisper 2007-01-19  
axgle 写道
撇开具体的编程语言(无论命令式语言也好,函数编程语言也罢),那么“变量”这个概念是个数学概念。

在数学里,变量这个概念本来就比较奇妙;作为数学的一个分支,例如代数,或者现代的数理逻辑,变量的概念依然是存在的。

现在回到我们说的编程语言:我们都知道命令式语言(例如java)里有变量这样的概念。而你说“函数编程语言”里没有变量这个概念。让我们继续讨论:

“函数编程语言”,从名字上就包含了“函数”这样一个数学概念。从数学上看,没有变量的函数是常量函数。而常量函数只不过是一种特殊的函数罢了。

我对函数编程语言没有深入去了解过。所以我只好依靠上面的推理和你讨论,呵呵。我的另外一个推理如下:

如果函数编程语言里没有变量,那么如何表达数学里的变量(编程免不了计算问题,无论你怎么计算,都要解决一个“可重复可替换的问题”,所以变量是必然的----无论你怎么定义变量的含义)?
我的回答是:即使是FP依然存在变量,或者说,那已经是另外一种变量了(和命令式的编程语言相区别)(具体是怎么会事,我暂时不清楚,它有可能是叫另外一个名字,但是从观念上看,满足“广义的变量”的特征)

所以你说的“变量概念与lambda演算就是个冲突”,意思是命令式语言里的“变量概念与lambda演算就是个冲突”吧?
如果A等于B,并且B等于C,那么A等于C

假如“函数编程语言里没有变量”,那么如何表达上面的普遍的"变量公理"呢?
你不要告诉我说:函数A等于函数B,并且函数B等于函数C,所以函数A和函数C不等

没有变量的编程语言,就如同说“没有圆心的圆”一样,是不存在的(这里说的变量是广义的变量)。

parameter = variable ?
变量 = 变量 ?
14 楼 whitenegro 2007-01-19  
我对你的变量的解释不敢同意哦 

变量是对variable的翻译,  那么var  只有在脚本语言中有,
在c/java都会按类型声明的 
在那些语言里  变量表示一段地址
也许有时eval会很有用 或者缺少不了
13 楼 Elminster 2007-01-19  
NND,如今都开始玩图灵完备和 lambda 演算了,有谁能给个定义给我,告诉我啥叫“图灵机和 lambda 演算是等价的”?
12 楼 axgle 2007-01-19  
撇开具体的编程语言(无论命令式语言也好,函数编程语言也罢),那么“变量”这个概念是个数学概念。

在数学里,变量这个概念本来就比较奇妙;作为数学的一个分支,例如代数,或者现代的数理逻辑,变量的概念依然是存在的。

现在回到我们说的编程语言:我们都知道命令式语言(例如java)里有变量这样的概念。而你说“函数编程语言”里没有变量这个概念。让我们继续讨论:

“函数编程语言”,从名字上就包含了“函数”这样一个数学概念。从数学上看,没有变量的函数是常量函数。而常量函数只不过是一种特殊的函数罢了。

我对函数编程语言没有深入去了解过。所以我只好依靠上面的推理和你讨论,呵呵。我的另外一个推理如下:

如果函数编程语言里没有变量,那么如何表达数学里的变量(编程免不了计算问题,无论你怎么计算,都要解决一个“可重复可替换的问题”,所以变量是必然的----无论你怎么定义变量的含义)?
我的回答是:即使是FP依然存在变量,或者说,那已经是另外一种变量了(和命令式的编程语言相区别)(具体是怎么会事,我暂时不清楚,它有可能是叫另外一个名字,但是从观念上看,满足“广义的变量”的特征)

所以你说的“变量概念与lambda演算就是个冲突”,意思是命令式语言里的“变量概念与lambda演算就是个冲突”吧?
如果A等于B,并且B等于C,那么A等于C

假如“函数编程语言里没有变量”,那么如何表达上面的普遍的"变量公理"呢?
你不要告诉我说:函数A等于函数B,并且函数B等于函数C,所以函数A和函数C不等

没有变量的编程语言,就如同说“没有圆心的圆”一样,是不存在的(这里说的变量是广义的变量)。
11 楼 落花虽有意 2007-01-18  
实在不错~`
换了种思维
10 楼 Julien 2007-01-18  
huangyiiiiii 写道
c 里面 define 的害处就忘了?莫非时代在倒退,代码生成的技术又走上台面了。

静态语言的意识形态已无法禁锢自由的心……
推倒柏林墙的时候到了!
——以上为KUSO^^
9 楼 李超群 2007-01-18  
再讨论深点就是哲学了。一生二,二生三,三生万物,推来推去,只是01而已。
8 楼 huangyiiiiii 2007-01-17  
c 里面 define 的害处就忘了?莫非时代在倒退,代码生成的技术又走上台面了。
7 楼 axgle 2007-01-17  
FP另类指南:
http://chn.blogbeta.com/232.html
6 楼 axgle 2007-01-17  
whisper 写道
那可不是
变量只是图灵机模型中的一部分
而在FP中根本就没这概念

即使是FP依然存在变量,或者说,那已经是另外一种变量了

考虑一下命令式编程语言里的“常量”---不要奇怪,如果我说“常量依然是一种变量”,那也不是奇怪的事情。例如:
const A=1

虽然A=1后不能继续让A=2。但是你依然可以把第一次的1修改为2.

说个笑话,动词是什么词?其实“动词”是个名称,“动词”是名词。
5 楼 whisper 2007-01-17  
那可不是
变量只是图灵机模型中的一部分
而在FP中根本就没这概念
4 楼 Julien 2007-01-17  
还要file.open干什么,直接eval不就得了
实际上用元编程是一件危险,复杂,不可控的事情,我觉得这种手法最奇妙的地方就是赋予了程序结构生物性,代码不再是静态的需要你来管理的结构,而是有自主意识,自我构建能力的生物,你只需要给他模糊简单的抽象特性,他就会给你完成细节和实现,构建出大规模的系统,这是我最近玩元数据和面向特性编程的体会
3 楼 jiyong1001 2007-01-17  
sizhefang 写道
有道理,如果楼主能把ruby中涉及的相应的内容详细说一下就更好了

ruby语言是怎样不但可以"把代码作为变量"来传递,而且可以"用代码来生成新的代码",这就是其威力无比的"元编程"的能力了


关于“用代码来生成新的代码”,说说我的体会

5.times do |i|
  File.open("temp.rb","w") do |f|
   f.puts "module Temp"
   f.puts " def Temp.var"
   f.puts " #{i}"
   f.puts " end"
   f.puts "end"
 end
 load "temp.rb"
 puts Temp.var
end

输出:

0
1
2
3
4


我觉得这段代码可以很好得诠释ruby的动态能力。
代码中动态得创建了一个temp.rb文件,内容就只有一个module,其中有一个module级别的方法 var,将接收到的参数显示出来。
主程序导入temp.rb并将参数传入其中执行之。我认为这就是典型的“用代码来生成新的代码”

这样做可以有很多好处,比如更改服务器的配置文件而无需重启服务器等等
2 楼 sizhefang 2007-01-17  
有道理,如果楼主能把ruby中涉及的相应的内容详细说一下就更好了

ruby语言是怎样不但可以"把代码作为变量"来传递,而且可以"用代码来生成新的代码",这就是其威力无比的"元编程"的能力了
1 楼 edgeloner 2007-01-17  
有见地

相关推荐

    PLC的面向对象编程

    本文将会用到西门子的Step7编程语言和施奈德的Unity 编程语言来讲解PLC的面向对象编程。

    JavaScript面向对象编程指南

    资源名称:JavaScript面向对象编程指南内容简介: Javascript是一种具有高度表达能力的、基于原型特性的、非常灵活的面向对象编程语言。《Javascript面向对象编程指南》着重介绍Javascript在面向...

    《Java面向对象编程》练习题

    《Java面向对象编程》 练习题一、填空题 1.自从Sun推出Java以来,按应用范围可分为三个版本,分别是( JAVA SE )、( JAVA EE )、( JAVA ME )。 2.环境变量的设置,若JDK安装在“D:\JDK”,则应设置Path为(D:...

    Python面向对象编程指南.[美]Steven F.Lott(带详细书签).part2.rar

    Python面向对象编程指南.[美]Steven F.Lott(带详细书签),分成两个压缩包。本书由树莓派基金会资深软件开发工程师亲笔撰写,是学习在树莓派上编程的必备手册。即使你没有任何编程经验,也可以畅游树莓派的世界。本书...

    Python面向对象编程介绍.docx

    Python的面向对象编程通常由类,对象,实例变量,方法和继承组成。类是一个通用的模板,它描述了一类事物的属性和行为。例如,一个"猫"类可以有属性"颜色"和方法"喵喵叫"和"跳跃"。类允许开发人员定义通用的"猫...

    面向对象实验通过编程和上机实验理解 Java 语言是如何体现面向对象

    通过编程和上机实验理解 Java 语言是如何体现面向对象编程基本思想,了解类的封装方法,以及 如何创建类和对象,了解成员变量和成员方法的特性,掌握 OOP 方式进行程序设计的方法。 【实验原理】或 【实验任务】 ...

    Java 基础之面向对象编程教程

    Java 基础之面向对象编程教程,主要类和对象、如何定义类、成员函数、访问控制修饰符、构造方法、类变量、类方法、方法重载、方法覆盖、抽象、封装、继承、多态、抽象类、接口和New 运算符等概念的介绍和例题介绍...

    src.zip Java的面向对象编程·讲解代码

    面向对象编程(OOP)和面向过程编程(PP) 方法重载和方法重写 接口和抽象类 包和访问修饰符 构造函数和析构函数 成员变量和局部变量的区别? 适用人群: 这段语言描述的Java的面向对象讲解代码源码资源适用于那些...

    matlab面向对象编程教程-A Guide to MATLAB Object-Oriented Programming - Register, CRC 2007.rar

    matlab面向对象编程教程-A Guide to MATLAB Object-Oriented Programming - Register, CRC 2007.rar 最近想好好学学matlab面向对象编程的一些东西(以前也自学过,但现在想系统学一下,libsvm工具箱几乎已经没有...

    Java的面向对象编程课件

    Java的面向对象编程课件  面向对象编程概述  对象、对象的状态、对象的行为  类和对象  面向对象程序设计  面向对象编程的难点  一个简单的例子  类的构造方法  new关键字的作用  缺省构造方法  方法的...

    Java面向对象编程

    实验二 Java面向对象编程 向Account类中添加私有实例变量balance,用于维护客户银行帐户的存款额;添加有一个参数的公有构造方法:initBalance,用于初始化帐户存款额;

    面向对象编程xmind思维导图,详细知识点

    面向对象编程1.面向过程与面向对象面向过程面向对象面向过程和面向对象的区别类对象面向对象的两个要素2.类属性成员变量局部变量属性赋值的先后顺序成员变量和局部变量的异同点方法方法声明权限修饰符:public ...

    STM32面向对象_程序架构 整个工程DEMO 我自己常用的

    STM32面向对象_程序架构 整个工程DEMO,我...很多初学STM32编程的同学,常常对多任务调度、全局变量处理、编程规范处理的不专业或者很乱,本demo是我自己做STM32项目常用的编程架构,内含面向对象思想,奉献给初学者

    Swift的基础教程-介绍了变量和数据类型、运算符、控制语句、函数等 Swift支持面向对象编程,包括类和对象、继承、多态

    Swift的语法与其他编程语言类似,包括变量和数据类型、运算符、控制语句、函数等。Swift支持面向对象编程,包括类和对象、继承、多态等特性。Swift中有许多常用的类库,可以帮助我们完成各种任务。希望这份Swift基础...

    第5讲 面向对象编程基础

    面向对象编程最基本特征是类和实例。类是用于定义抽象的对象模型,实例是根据类创建的对象。类(Class): 用于定义抽象的对象模型,它是描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性...

    面向对象编程电子优惠券申领

    面向对象编程电子优惠券申领(程序命名: exam03-ElectronicCoupon.py) 功能及技术要求: 1. 创建电子优惠券类 ElectronicCoupon 电子优惠券属性:ecid 抵卷编号 、ecprice 抵卷面值、validity 有效期、 passcode ...

    PHP面向对象编程PDF

    该书从php的起源说起(也就是PHP2了),对未来的PHP6也有展望,从最基本的PHP语法、变量等入手,详细说明了数组、对象、类等数据类型,重点讲述了PHP面向对象的编程方法,对面向对象的方法进行了深入细致的讲解,...

    SCALA从入门到精通个人笔记含代码

    面向对象编程初级 类和对象 包 包对象 面向对象编程中级 封装 继承 多态 面向对象编程高级 伴生对象 特质 嵌套类 类型约束 Scala数据结构之集合 函数式编程高级 隐式转换和隐式值 偏函数 高阶函数 ...

    实验二 面向对象编程

    实验题2 设计一个用来描述汽车的类Car,使用类的非静态成员变量来表示汽车的车主姓名name、当前的速率speed: 1. 创建构造函数为成员变量赋初值。 2. 使用类的非静态成员方法来表示改车主姓名changeName操作, 并通过...

    JavaScript函数式编程

    JavaScript 是近年来非常受瞩目的一门编程语言,它既支持面向对象编程,也支持函数式编程。本书专门介绍JavaScript函数式编程的特性。 全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、...

Global site tag (gtag.js) - Google Analytics