首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

永恒不变的魅力

在这个概念的基础上,程序员写下的代码,基本上就是根据外部或者内部的各种事件,对内部的状态不断进行改变。运行中的进程如此,磁盘的文件系统如此,数据库如此,javascript控制下的DOM页面也是如此。...replay是件费时的事情,是对初始状态不断修改,最终达到需要的状态,典型的处理mutation的思维。...想对UI的任意一个状态做测试?太简单不过 —— 事先构造好一个中间状态的UI的EDN,然后进行特定的步骤,测试构造好的EDN是否于实际UI的EDN相等不就得了!...下面这个pixel editor只用了66行代码 [7],就提供了一个完整的undo/redo的功能: 这就是immutability,永恒不变的魅力!...而最美妙的是,牺牲一些运行速度和内存,你的代码是immutable的,是化繁为简的。 而immutable,是如今这个程序世界梦寐以求的。

1.1K120

代码的变与不变

哲学上说变与不变,讲的是绝对运动与相对静止的道理,在代码设计中,也有许多变和不变之间的辩证故事。...较弱的不变模式:指的是一个类的实例状态是不可变化的,但是这个类的引用的实例却可以变化。...当我们享受到代码变化带来的愉悦,也开始追求不变的代码,那一份古朴和单纯。 不变,引伸出对象复用的好处来。...不变,是快速的、简单的、敏捷的,将变化的状态连结起来了。 程序=算法+数据,算法是不变的,数据是可变的。仿佛从软件的一开始,变与不变就给后续的万事万物埋下了伏笔,代码的世界围着这个特殊的视角旋转。...Action 是具备状态的,线程独立的;Service 和 DAO 是无状态的,是可以被池化的。不变得再极致一点,我希望从编译之后它就是不变的,而不是对象创建之后不变,这就是方法。

54010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    底层逻辑:变化背后的不变

    刘润老师经常说,花一秒钟看透本质的人,和花一生都看不明白的人,是两种截然不同的命运。 这本《底层逻辑》就是讲述事物变化背后那些不变的东西。...当别人还在纠结是对错的时候,你能有一个系统性的方法论来讲明白对错双方是怎么思考的。...比如,一个人心中有三种”对错观“:法学家的对错观;经济学家的对错观;商人的对错观; 举个例子:坏人A诱骗好人B进入C的没有锁门的工地,B失足摔死了。请问,这是谁的错?...法学家认为A的错,证据证明谁犯错就是谁的错。这种思维模式就是管好当下,解决当下的问题。 经济学家认为C的错。谁让他不锁门。...这种思维就是用最小成本去解决问题,谁能用最小成本防止错误发生而没阻止就是谁的错。 商家认为B的错。谁的损失大就是谁的错。这种思维就是谁对谁错都不重要,谁损失最大,谁更应该去防止错误发生。

    35910

    代码在内存中的形状

    代码在内存中的'形状' http://zoo.zhengcaiyun.cn/blog/article/code-shape 前言 众所周知,js 的基本数据类型有 number 、 string 、 boolean...而在这一过程中肯定也伴随着很多的优化策略。有兴趣的同学可以阅读下我们之前的一篇非常不错的文章《V8 执行 JavaScript 的过程》。...在 js 中,变量名是用来保存内存中某块内存区的地址的,而栈区就是用来保存变量名和内存地址的键值对的,所以我们就可以通过变量名获取或者操作某一内存地址上的内容。...而 undefined 正是栈空间中表示未定义含义的一块特殊的固定的内存区域。...借助于这种看得见摸得着的模型去理解和分析代码实际运行的情况会帮助理解,并且能够发现其中的设计精妙之处。 文中最后部分多次提及到 GC,其实 GC 的模型设计的也是非常巧妙,非常有意思的。

    48120

    在形状中放置单元格内容,让形状中的文字变化起来

    图1 选择形状圆,单击公式栏,输入=A1。按下回车键,此时单元格A1中的值就会显示在圆中。当更新单元格A1中的值时,形状圆中的值也会跟着更新。如下图2所示。...图2 这里,公式栏中的公式只能引用单个单元格,不能在公式栏中输入公式。然而,有一个变通办法。假设想在某形状中显示列表值之和。并且形状在工作表的第1行到第4行中显示。...可以这样操作: 1.将形状移开,并在单元格C2中建立一个公式来包含形状中的文本。...公式可能是: ="今天的总计: " & CHAR(10) & TEXT(SUM(A1:A6), "¥#,##0") 2.然后将形状移回原位,选择该形状并输入公式:=C2,设置适当的格式,结果如下图3所示...图3 注意,这种方法设置的形状中文本的更新仅当工作表重新计算时才更新。 假设在图表中添加了一个形状,如果希望形状中的文本来自单元格,则必须在单元格引用之前加上工作表名称。例如,=Sheet1!

    31410

    前端之变(二)- 不变的前端

    本周我将继续就前端之变阐述自己的一些思考。 在开始讲前端的技术究竟发生了哪些改变之前,先讲前端『不变』的地方。只有了解了哪些没有改变,我们才能更好的理解哪些改变了。...这是前端之变系列的第二篇,本系列其它文章: 前端之变(一):技术的变与不变 不变的核心 前端技术不管如何改变,但是支撑前端的最核心的三个技术始终是HTML,JavaScript与CSS 由HTML负责页面内容...所以,我们就发现一种非常有意思的现象: 在前端不变的前提下,出现了编码与产物脱节的趋势。编码阶段的技术演进越来越快,先进,但最终产物始终缓慢发展。...不变的前端_1 如上图所示: 这两个阶段之间的异同在于: 相同点 最终产物没有任何变化,都是HTML,JavaScript以及CSS这些东西 各自的职责分工没有改变:HTML负责内容,CSS负责样式,JavaScript...但如果我们认真分析它的本质,JavaScript仍然是一门非常糟糕的语言,基于原型的设计实在称不上先进或是好的,弱类型导致的问题难以查找等各种令人吐嘈的地方,而所谓的ES6或ES7等,一直卡在各种浏览器的支持中

    62210

    PyTorch入门笔记-改变张量的形状

    view和reshape PyTorch 中改变张量形状有 view、reshape 和 resize_ (没有原地操作的resize方法未来会被丢弃) 三种方式,「其中 resize_ 比较特殊,它能够在修改张量形状的同时改变张量的大小...,而 view 和 reshape 方法不能改变张量的大小,只能够重新调整张量形状。」...比如对于下面形状为 (3 x 3) 的 2D 张量: 2D 张量在内存中实际以一维数组的形式进行存储,行优先的方式指的是存储的顺序按照 2D 张量的行依次存储。...上面形状为 (3 x 3) 的 2D 张量通常称为存储的逻辑结构,而实际存储的一维数组形式称为存储的物理结构。...,当处理连续存储的张量 reshape 返回的是原始张量的视图,而当处理不连续存储的张量 reshape 返回的是原始张量的拷贝。

    4.3K40

    OpenGL 学习系列---基本形状的绘制

    在之前的一篇博客中,讲述了 OpenGL 基础绘制流程 及相关的代码,其中关于 OpenGL 程序编译部分都是可以在其他项目中接着复用的,接下来会讲到如何去绘制其他的基本图元。...在上图中,矩形的每一条边上的顶点都被两个三角形使用了,而且中心的顶点被所有四个三角形使用了。...-0.5f, 0.8f, -0.5f, -0.8f // 重复第二个点,使三角形扇闭合 }; 而着色器代码依旧不变...圆形的顶点数据也分为了三部分了,以原心作为我们的中心点,中间的 360 个点用来绘制三角形,最后一个点使得我们的图形闭合。 在绘制时依旧使用三角形扇的形式来绘制。...但显然,这还是不够的,还是有很多问题的。 想要绘制一个圆形,结果却成了椭圆;想要绘制一个正五边形,却成了歪的;这到底是道德的沦丧还是人性的泯灭,一切的揭晓就在下一篇博客中了。

    1.9K40

    dotnet OpenXML SDK 形状的翻转与旋转

    在 OpenXML 的 PPT 元素,形状的翻转与旋转是有逻辑关系,本文来和大家聊聊形状的翻转和形状的旋转的关系 本文来和小伙伴聊聊最复杂的 ConnectionShape 形状的方向,这个 ConnectionShape...其次就是形状的旋转,而形状的翻转影响是形状本身 先来聊聊 PPT 元素里面的 ConnectionShape 形状,也就是线条形状的,如箭头的方向,在 PPTX 格式的文档的形状的线条形状方向是需要由元素的坐标和...首先通过 a:off 决定元素的坐标,请看下图 ? 上面图片红色的是箭头,也就是 PPTX 文档里面的形状,而黑色的是辅助线。...而在 PPT 中,在进行垂直方向镜像之后,不能更改元素的坐标,也就是如果绘制出线条形状的外接矩形,可以看到外接矩形在元素进行翻转前后的坐标和大小不变 那么如果加上旋转呢?...其实旋转是独立的,只是作用在形状的外接矩形上。

    95230

    css设计中的不变与可变

    ——《一代宗师》 如果重构分里子与面子的话,那么html应该是负责里子的,而css就是负责面子了。在上篇html结构的拆与合说了html之后,我们继续来说下css,这次我们从可变与不变的角度分析。...所以这里一般设计的是图片固定大小不变,右边文字可变,占满其余空间。...而右侧的一些按钮或辅助信息相对来说使用绝对定位在右边比较合理。...变与不变之道 最后不管是移动端还是pc端,对于动不动就设置一个具体width或height的方式注定可扩展性欠缺。...如果你所有的都是一刀切,那就是固定的一个思维了,无所谓变通了。 如果从一个更高的角度来说,没有什么是恒定的不变,一切皆可变。

    72010

    哲思片段 | 设计中的变与不变

    无论它在内存中存储的状态如何变化,该实例的对象标识依旧是保持不变的。显然,变与不变是相对的。 切换到DDD的命题中,所谓“实体”就是那种具有唯一的可识别可跟踪ID的对象。...不可变的对象能够更好地维护,因为你不用操心它的值变化,也无需追踪变化的轨迹。不变性天生支持并发。这就衍生出面向对象设计中的Immutable模式。...这种不变意味着只要它存在,就不可修改,而且恒古不变。这种追究变化背后的不变性,一直是古希腊哲学乃至科学的基本原则。...物质是否永恒不变,在哲学中一直是引人深思的命题或假设;但在函数式编程中,它几乎被证明了。...但若抛开原子裂变、放射衰变的科学原理,我们似乎也可以将组成整条河流的每一滴水,看做是不变的基本组成要素。这个要素就是Monad中的Identity(幺元或单位元)。

    1.3K70

    WPF 形状的 StrokeThickness 属性对边框的影响

    在 WPF 中,形状可以使用 StrokeThickness 定义边框的粗细,而边框和形状元素的大小的关系受到这个属性的影响。...这个属于记录了下次使用也不一定记得的知识,更建议大家在使用的时候大概了解是这样计算的,建议在每次写的时候,自己测试一下 因为不同的形状的表现有所不同,因此本文列出几个不同的形状,使用 StrokeThickness...设计器上的蓝色的选择框表示的是形状的大小和坐标,可以看到 StrokeThickness 是在 100 100 的大小内 而蓝色的圆形其实只是设计器给的效果,表示的是在 StrokeThickness...中间的圆形,而不是指在形状的中间向两边填充。...设计器上的蓝色的圆形是形状的 RenderedGeometry 属性,这个属性是一个 Geometry 类型 使用 Geometry 类型进行绘制的时候,设置的 Pen 里面的 Thickness 的绘制方式使用的是从

    2.9K21

    学界 | 3D形状补全新突破:MIT提出结合对抗学习形状先验的ShapeHD

    本文提出了 ShapeHD,通过将深度生成模型与对抗学习的形状先验相结合,超越单视图形状补全和重建的极限。实验证明,ShapeHD 在多个真实数据集的形状补全和形状重建方面都远远超过了当前最高水平。...通过纯粹的监督学习,网络倾向于产生平均形状,这些形状由于歧义的存在而将惩罚最小化。...学到的形状先验只有在生成的形状脱离实际时才对模型进行惩罚,在偏离 ground truth 时不进行惩罚。 这解决了上面讨论的难题。...事实上,还存在另一种常常被忽视的歧义:在合理的形状中,仍有多种形状可以很好地对应 2D 图像;即,在给定单视图输入的情况下,ground truth 的形状是不确定的。...在微调 3D 形状补全网络时,我们使用两种损失函数:输出形状的监督损失,以及预训练鉴别器提供的自然损失。 单视图形状补全 ?

    1.1K40

    JavaScript 中的 不变性(Immutability)

    不变性(Immutability)是函数式编程的核心原理,也有很多面向对象的程序提供了这一特性。...在这篇文章中,我将展示什么是完全不变的,如何在JavaScript中使用这个概念,以及为什么它是有用的。 什么是不变性? 可变性的文本定义是可能会被改变的。...字符串不是JavaScript内置的唯一不变的值。 数字也是不变的。 你甚至可以想象一个评估表达式“2 + 3”_改变数字“2”的含义的环境? 这听起来很荒唐,但是我们一直在使用对象和数组。...因为不变的对象永远不会改变,所以它们可以使用一种称为“结构共享”的策略来实现,这种策略比内存开销要少得多。...与内置数组和对象相比,仍然会有一个开销,但它将是不变的,通常可以通过不变性启用的其他好处来缩小。在实践中,使用不可变数据在许多情况下会增加应用程序的整体性能,即使孤立的某些操作变得更加昂贵。

    1K20

    css设计中的不变与可变

    ——《一代宗师》 如果重构分里子与面子的话,那么html应该是负责里子的,而css就是负责面子了。在上篇html结构的拆与合说了html之后,我们继续来说下css,这次我们从可变与不变的角度分析。...所以这里一般设计的是图片固定大小不变,右边文字可变,占满其余空间。...而右侧的一些按钮或辅助信息相对来说使用绝对定位在右边比较合理。...变与不变之道 最后不管是移动端还是pc端,对于动不动就设置一个具体width或height的方式注定可扩展性欠缺。...如果你所有的都是一刀切,那就是固定的一个思维了,无所谓变通了。 如果从一个更高的角度来说,没有什么是恒定的不变,一切皆可变。

    1.2K60

    前端之变(一):技术的变与不变

    这是第一篇:技术的变与不变 变与不变 首先,做为一个技术人员,你要明白一个道理: 对技术而言:唯一不变的事情就是变化 所以,想要成为一个优秀的程序员,你不能期望只精通一门语言或几种框架类库,就能成为你永恒的资本...当然,在他们的思维中,这个肯定不是『技术』 但显然这是缪论。 因为这些人没有意识到技术在变的过程中,存在着『不变』的东西。...一旦你掌握及理解了不变的东西,所谓的变化对你而言,可能就如同换肤一样轻易与简单。 这也是为什么国外很多优秀的程序员一把年纪了还是在技术第一线。...为什么别人能做到的事,在我们这片土地上,我们做不到?这是非常我们反思与思考的一个现象。 我在2020年与前端的一些交集,让我意识到了技术的这种变与不变。对我而言,仿佛这是一个全新的世界。...前端可以应用基本的面向对象的原则及设计模式了 所以,看到没,如果把范围放大,你说它改变了么? 道与术 这就是我在2020年的感悟到的一个最大的事情 ,技术这个东西原来存在变与不变两方面的东西的。

    40220
    领券