• 我看到map()就像看到蟑螂一样恶心
  • 发布于 2个月前
  • 215 热度
    4 评论
首先声明一下,我承认我是个很烂的程序员。我甚至不愿意承认自己是程序员。(也许这就是原因?),因为公司转向 Flink ,所以今天决定学习一下。但是不知道为什么,看到 map()就觉得生理上的厌恶,和看见一只蟑螂一样。

其实我自己也不能理解这种厌恶--我能理解为什么自己不喜欢,因为 map()本身没有可读性,你看到这个,就得去里头看到底是调用了什么函数。但是我不知道为什么我会有生理上的厌恶。同理,我在 PySpark 里看到 map(),也会极其厌恶,尤其是配合 lambda 食用,则更加厌恶。比如说
result = map(lambda x: x["id"], data["item"])
看到一次我就恶心一次。不知道有没有类似的朋友,你们是如何克服的?我看了一下,Flink 里似乎无法避免 map()。所以只能自己习惯了。
用户评论
  • 谱写成伤
  • 是这个 map 的命名和设计都比较反直觉。看到 map 这个单词,我大脑里的反应顺序是:
    1. 创建 hashmap ?
    2. 创建映射?
    3. 哦都不对,是 ([a], f) -> [f(a)]
    然后我自然的思考顺序是「对什么做映射?」,然后扫过第一个参数,发现是个很懵逼的 lambda 或者一个变量(然后往上翻了半天才发现这个变量是一个 function ),再仔细一想才发现不对,map 的第一个参数是映射……

    参数顺序这一点非常反人体工学,因为中文这个语言先说上下文,比如会说「对某物做什么事」,而不常说「做什么事对某物」:我得先知道你在操作什么列表,然后你 lambda 函数里的各种引用、操作对我才有意义。把映射函数放在前面,对我来说是一个非常破坏阅读心智连贯性的设计。
  • 2025/2/3 12:26:00 [ 0 ] [ 0 ] 回复
  • 牵线木偶
  • 不过是个 Functor 而已。或者也许 Python 的 lambda 语法太丑了。要是换成 map (fn x => x + 1) [1,2,3,4] 这不就清晰多了吗。
    List comprehension 这玩意能出现的前提是它是个 monad ,按照那个著名的话,monad 得先是个 functor ,换句话说能写出 list comprehension 的东西,它也肯定会写得出 map……这不就变成先有鸡还是先有蛋的问题了。

  • 2025/2/3 12:20:00 [ 0 ] [ 0 ] 回复