zoukankan      html  css  js  c++  java
  • 我有关编程语言的一点理解

    副标题:[golang] 当用到一知半解的Go丢掉了大半年之后如何又能快速捡起

    如题。

    在这之后 [dev][go] 入门Golang都需要了解什么 便再没有接触过Go语言,以致今日便忘得一干二净。

    现在要用,那么接下来的问题就是。我应该以一种怎么样的思路,将它拾起来。

    [classic_tong @  https:////www.cnblogs.com/hugetong/p/12301487.html

    一一

    在我这,对编程语言的认知,无外乎便是以下这样的划分。

    分类是这样:面向过程,面向对象,面向函数。集合是这样:c,c++,java,python,bash,go,lisp,haskell

    html,js。

    html和js是面向转有场景的,这里排除。面向函数是个人兴趣,工作中也不能用,同样排除。

    余下的便是,在我面对具体要解决问题是,可以挑选的几种方式:面向过程、面向对象;C,java,python,bash,go这么几个选择。

    C++也被排除,因为从我的角度,单就产出结果(性能优势)来说,GO完全能够将其覆盖。

    一二

    我们知道,一般的软件工程方法包括如下阶段:需求分析,概要设计,详细设计,实现,测试。

    这么几个阶段。(一)中提到的这个选择,很显然是在“实现”开始的时候才会出现的。

    而当这个选择出现的时候,其实我们已经决定了是面向过程还是面向对象。因为在概要设计阶段

    我们便已经知道了解决问题的方法,决定了解决问题的逻辑。逻辑才是整件事情的核心。

    一三

    逻辑。面向过程就是决策树。面向对象就是本体论。(而面向函数就是(数学方法?),面向函数即是封装,面向对象也是封装,

    所以面向对象的本质也可以化解为面向函数。接下来再讨论下去,引出的将是本体论与lamada验算之间的哲学关系,而这

    已经超出了本文的讨论范围,当然也超出了我的能力范围。)

    编程语言就是用来精准描述以上逻辑的工具。描述是为了记录,阅读,运行。运行也是阅读,是计算机在阅读。

    一段程序,写出来主要是为了给人看的,偶尔拿到机器上跑跑。

    于是,一个程序语言必须有能够达到以上描述要求的语法。(当然,计算机科学的大厦都是从0,1构建出来了,你当然可以基于基本语法来

    表达复杂的事情,本文的表达排除了对这个问题的讨论。)比如bash,C来表达面向对象就不是一个好的决定。

    一四

    当一门语言渴望表达面向过程的逻辑时,它需要具备以下几个特性:类型抽象,数据存储(变量),判断,跳转(循环);此外为了可读性,

    还应该有函数封装。(有了函数封装自然也有了递归,但是我们这里不讨论递归,或者说我没有能力讨论递归。)

    当一门语言渴望表达面向对象的逻辑时,它需要具备以下几个特性:面向过程的特性(上一段),封装,继承,多态。

    二一

    第一节讲了那么多毫无关系的事情,接下来终于可以谈到GO了,以及面对重新捡起GO这个问题时,我该如何思考。

    二二

    基于以上的内容,我只需要回忆起,以下要点在Go语言中如何表达即可,他们是:

    第一部分:类型,变量,判断,循环,函数定义;第二部分:封装性,继承,多肽。

    以及第三部分:环境有关,运行,编译,部署,以及编辑效率提高(VIM,EMACS的高亮跳转等)。

    第一部分

    只需要阅读:https://golang.org/ref/spec, 虽说是官方的严谨spec,但是说实话,可读性极其差。请自行百度一段随便的

    中文文档看看就好。

    第二部分

    https://code.tutsplus.com/zh-hans/tutorials/lets-go-object-oriented-programming-in-golang--cms-26540

    这个链接非常值得读。我要的问题的答案,可以非常简答的罗列如下:

    封装性:基于文件进行封装,文件也对应着包的概念(package)

    继承:使用结构体匿名成员。

    多肽:使用interface类型。加个new方法,返回interface类型

    (另外加个题外话,还有模版(泛型编程),突然想到C++中的模版类。模版就是对强类型语言的弱类型化处理。在强类型语言中,执行函数调用

    的时候,参数的数据类型对于不同函数调用都是固定设置好的约束条件。模版要做的恰恰便是把约束条件参数化,使其变成函数的入参之一。)

    第三部分

    这个问题,对于我来说,从来就不是问题。见

     [daily][emacs][go] 配置emacs go-mode的编辑环境以及环境变量问题

    另外,这里有特好的一本小书:https://www.openmymind.net/assets/go/go.pdf

     [classic_tong @  https:////www.cnblogs.com/hugetong/p/12301487.html

    ------

    ------ comment @ 20200214 -----

    反射

    表面上,这篇文字是在讲golang。实际上是在讲我在编程语言这个件事里边构建出来的宇宙观。

    我的经历存在局限(用了太多年的c),我的宇宙自然也存在局限。

    反射(reflection)就是我的局限。golang是支持反射的,就像很多高级语言一样,比如java。

    在我目前肤浅的理解里,反射可以与模版放置在同一个角度进行理解。模版是关于函数调用方式的扩展,将“类型”也作为了函数的操作对象进行op。

    同理,反射是对决策树进行的扩展。或者说是对判断,跳转两个操作进行的扩展。以前他们的操作对象都是变量的值。有了反射之后,他们的操作

    对象丰富到了变量的类型。

    这便是我对反射的浅显理解。下边是两篇很好的文章,有助于golong实践中对反射的实操。

    https://juejin.im/post/5a75a4fb5188257a82110544

    https://learnku.com/articles/25154

    -------- comment @ 20200215 -----------

    泛型

    泛型就是上文提到的模版,就是function的“type parameters”,就是“generics”。

    就是:关于函数调用方式的扩展,将“类型”也作为了函数的操作对象进行op。

    通读手册之后,我们知道Golang不支持泛型。并有如下佐证:https://zhuanlan.zhihu.com/p/74525591

    不过以上讲的是GO 1,值得庆幸的是在GO 2中,我们将得到它对泛型的支持。

    https://www.v2ex.com/t/586795

    https://go.googlesource.com/proposal/+/4a54a00950b56dd0096482d0edae46969d7432a6/design/go2draft-contracts.md

    https://blog.golang.org/why-generics

    -------- comment @ 20200222 -------

    这个继承的例子写的挺好的。

    https://www.jianshu.com/p/150523db21a9

  • 相关阅读:
    COMMIT WORK AND WAIT 是在WAIT什么
    BINARY SEARCH in read table statement
    SAP 金额在表中的存储及货币转换因子
    REUSE_ALV_POPUP_TO_SELECT的使用技巧
    SAPScript、Smartforms动态打印图像或者背景图片
    SAP_Web_Service开发配置
    SAP中关于用户IP信息的获取(转载)
    DevExpress控件开发常用要点(项目总结版)
    鼠标指向表格时 显示更多信息 toolTipController1
    DevExpress组件之——TreeList组件
  • 原文地址:https://www.cnblogs.com/hugetong/p/12301487.html
Copyright © 2011-2022 走看看