V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
nnegier
V2EX  ›  程序员

可以讲下你看到的编程语言的美吗?

  •  
  •   nnegier · 15 小时 25 分钟前 · 2285 次点击
    我是写 java 代码的,感觉后续的一些语法更补不是很让人满意,只是写习惯了,不过也萌生了对那种编程语言的美的思考,表现力强,整洁优美,但我自身接触的语言实在有限,所以想想问问大家,如果可以,也希望可以附上一段你喜欢的代码。

    自己提下 python 吧,但只接触过一点,未实际项目,它有一种语法层面的整洁美,那个缩进。
    38 条回复    2025-01-31 04:51:19 +08:00
    idrunk
        1
    idrunk  
       15 小时 13 分钟前
    个人感觉 Java 比较美,虽然较啰唆,但比较优雅。python 接触不多,觉得它太灵活了,各种语法,比较乱,不优雅。但如果现在二选一,我还是会选 python ,因为觉得实用大于语法优雅。
    scp3125
        2
    scp3125  
       14 小时 58 分钟前   ❤️ 1
    ```rust
    fn read_file(path: &str) -> Result<String, io::Error> {
    let mut file = File::open(path)?; // 自动传播错误
    let mut contents = String::new();
    file.read_to_string(&mut contents)?; // 自动传播错误
    Ok(contents)
    }
    ```
    rust 的错误处理吧,是我见过的最好的错误处理方式
    hefish
        3
    hefish  
       14 小时 54 分钟前
    不可以。讲不出来。自己脑补吧。
    iintothewind
        4
    iintothewind  
       14 小时 31 分钟前
    不可变数据结构, 无副作用函数, 消息驱动在多线程上下文, 异步, 和分布式场景拥有天然优势.

    控制流语句, if-else, foreach, unit, try, 不再只是命令, 而是输入输出数据的操作符, 跟函数的作用是一样的.

    可惜实现了这些思想的高级语言只能运行在指令式设计的处理器上.

    所以底层实现还是内存块, 指针, 加操作指令.
    yvescheung
        5
    yvescheung  
       14 小时 30 分钟前   ❤️ 2
    Tomohiko Sakamoto 算法,来确定当前日期是星期几:
    int dow(int y, int m, int d) {
    static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
    y -= m < 3;
    return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
    }


    快速平方根倒数算法:
    float Q_rsqrt( float number )
    {
    long i;
    float x2, y;
    const float threehalfs = 1.5F;

    x2 = number * 0.5F;
    y = number;
    i = * ( long * ) &y;
    i = 0x5f3759df - ( i >> 1 );
    y = * ( float * ) &i;
    y = y * ( threehalfs - ( x2 * y * y ) );

    return y;
    }
    little_cup
        6
    little_cup  
       14 小时 13 分钟前   ❤️ 5
    2025 年了,AI 临门一脚的时代,我不认为程序员需要再把自己的追求放到这种事情上面。

    准确说,所有受限于人类脑眼结构的 IO 带宽有限而做的优化都即将失去意义。
    注释无误的情况下越啰嗦越好,编译结果一致的前提下代码越平庸越好,框架越大众越好。以往追求的美感,诸如逻辑单元的可复用性、「巧妙」的写法也很快会失去意义,因为几秒钟新写一个成本将远低于维护,不需要维护的代码的「美感」没有价值。
    Dropless
        7
    Dropless  
       14 小时 0 分钟前   ❤️ 1
    ```csharp
    Person person = new Person(); // good old.
    var person = new Person(); // cool. 较新一点的 Java 现在也能这样写, 不过 csharp 很早就有了
    Person person = new(); // awesome. 我想不到比这更简洁的写法了
    ```

    搞点怪的:
    ```common lisp
    (loop repeat 10
    for x = (random 100)
    if (evenp x)
    collect x into evens
    else
    collect x into odds
    finally (return (values evens odds)))
    ;; =>
    (92 44 58 68)
    (95 5 97 43 99 37)
    ```
    其它语言里很基础的循坏结构, 在 common lisp 里硬是弄出了一套 dsl. 有时候我讨厌它, 有时候我又喜欢它.
    dcoder
        8
    dcoder  
       13 小时 57 分钟前   ❤️ 8
    Java 还美, 疯了...
    omoiFly
        9
    omoiFly  
       13 小时 43 分钟前   ❤️ 1
    Y-Combinator
    ```scheme
    (define Y
    (λ (le)
    ((λ (f)
    (f f))
    (λ (f)
    (le (λ (x) ((f f) x)))))))
    ```
    Rust2015
        10
    Rust2015  
       13 小时 34 分钟前   ❤️ 1
    最美不过 C#
    AEDaydreamer
        11
    AEDaydreamer  
       12 小时 41 分钟前   ❤️ 1
    函数式的语法我觉得都挺美
    aresyang
        12
    aresyang  
       12 小时 18 分钟前
    ocaml 实现的神经网络
    dalaoshu25
        13
    dalaoshu25  
       12 小时 7 分钟前   ❤️ 1
    美,当然是 Pascal
    vincentWdp
        15
    vincentWdp  
       11 小时 38 分钟前
    erlang/elixir 的 pattern match 是我见过的最优雅的
    charles0
        16
    charles0  
       11 小时 8 分钟前   ❤️ 3
    一个微软研究院的编程语言[Koka]( https://github.com/koka-lang/koka),函数式强类型,用 algebraic effect 管理任意的副作用(可用来实现协程和 async/await 等等),它非常漂亮和统一,在语法和语义上都非常优雅,体现在它有一个非常小的核心语言子集,其它语言构造都可以转化成核心语言; while 只是一个普通的标准库函数;所有圆括号永远先求值而所有花括号都会后续求值零次/一次/多次(作为匿名函数);使用类似 Python 的缩进来省略 C 风格的花括号;和 Rust 一样函数块的最后一个表达式作为返回值;函数式语言标配的类型推导和模式匹配;所有 a.f 都等价于 f(a) ......
    这个编程语言属于研究性质,可能对于缺少函数式编程背景的人来说有点难懂,而且资料较少,需要参考它的论文、文档、示例还有测试用例,一个例子如下:
    ```
    // A custom generator effect (which is polymorphic)
    effect yield<a>
    fun yield(x: a): ()

    // Traverse a list and yield the elements (which is also polymorphic) with 'yield' effect
    fun traverse(xs: list<a>): yield<a> ()
    match xs
    Cons(x,xx) -> { yield(x); traverse(xx) }
    Nil -> ()

    fun main(): console ()
    with fun yield(i: int) // Handles the 'yield' effect
    println("yielded " ++ i.show) // Printing requires 'console' effect
    [1,2,3].traverse
    ```
    charles0
        17
    charles0  
       11 小时 7 分钟前
    @charles0 注意这上面的缩进没了
    kenvix
        18
    kenvix  
       11 小时 4 分钟前
    你既然写 java 就搞点 kotlin 呗
    xgdgsc
        19
    xgdgsc  
       10 小时 18 分钟前 via Android
    levelworm
        20
    levelworm  
       8 小时 43 分钟前
    可以试试看比较 exotic 的语言,比较说 Forth 。
    leegradyllljjjj
        21
    leegradyllljjjj  
       8 小时 20 分钟前 via iPhone
    c sharp 的 lamda 表达式,java 一处编写 处处不能运行
    catazshadow
        22
    catazshadow  
       7 小时 58 分钟前
    OCaml 那种没有循环的语言
    DOLLOR
        23
    DOLLOR  
       7 小时 54 分钟前
    python 虽美,但是贴在 v2 上缩进全部崩溃🐶
    dcsuibian
        24
    dcsuibian  
       7 小时 42 分钟前
    [img][/img]
    xjpz
        25
    xjpz  
       7 小时 9 分钟前
    <img alt="Scala 之美" src="https://imgur.com/a/1ztRcVM">
    xjpz
        26
    xjpz  
       7 小时 7 分钟前
    xjpz
        27
    xjpz  
       7 小时 2 分钟前   ❤️ 1
    CodingIran
        28
    CodingIran  
       6 小时 31 分钟前
    @scp3125 Swift 有类似的处理:

    ```swift

    // 从文件路径读取字符串,返回结果或错误
    func readFile(path: String) -> Result<String, Error> {
    Result { try String(contentsOfFile: path, encoding: .utf8) }
    }

    // 处理结果或错误
    switch readFile(path: "/test.txt") {
    case .failure(let error):
    print("reading file failed: \(error)")
    case .success(let contents):
    print("reading file contents: \(contents)")
    }

    ```
    humingk
        29
    humingk  
       5 小时 39 分钟前 via iPhone
    几乎不用维护的代码最优雅,死代码才是好代码
    suyabgaran
        30
    suyabgaran  
       5 小时 27 分钟前
    美?那肯定是 Ruby 呀
    yhxx
        31
    yhxx  
       5 小时 7 分钟前
    说到美,那当然是我大 JavaScript
    class Example {
    #privateField = 42;

    getPrivateField() {
    return this.#privateField;
    }
    }


    let x = (1, 2, 3);
    console.log(x); // 3


    ['1', '2', '3'].map(parseInt); // [1, NaN, NaN]

    还有这个字字珠玑:
    console.log(0 == "0"); // true
    console.log(0 == []); // true
    console.log(0 == ""); // true
    console.log("0" == []); // false
    console.log([] == ![]); // true
    cj323
        32
    cj323  
       4 小时 32 分钟前
    还是觉得 C 最美:大道至简,大智若愚

    ```
    int main() {
    printf("Hello, World!\n");
    return 0;
    }
    ```
    nebkad
        33
    nebkad  
       3 小时 27 分钟前
    我认为一个编程语言如果是美的,那么它可以通过自己的代码,来描述关于用它写成的程序自身的几个问题:
    1. 我(这个程序)要解决什么样的问题
    2. 我(这个程序)要如何解决这个问题
    3. 我(这个程序)如何证明这个问题被解决了

    目前这三点都做得很好的,在我用过的编程语言( C/C++, Java, C#, F#, Python, Haskell, Javascript, Rust )里,
    nebkad
        34
    nebkad  
       3 小时 26 分钟前
    @nebkad #33 Rust 做得最好
    nebkad
        35
    nebkad  
       3 小时 22 分钟前
    @little_cup #6 反对这个说法:

    注释无误的情况下越啰嗦越好,编译结果一致的前提下代码越平庸越好,框架越大众越好。以往追求的美感,诸如逻辑单元的可复用性、「巧妙」的写法也很快会失去意义,因为几秒钟新写一个成本将远低于维护,不需要维护的代码的「美感」没有价值。


    编程世界存在一些不可动摇的基础,否则整个世界如同流沙上的城堡。
    只不过这些东西都被隐藏得很深,所以我们以为不再需要它们。
    user8341
        36
    user8341  
       1 小时 58 分钟前
    简单是一种美。语法简单:C 语言。写出来的程序简短:Python 语言。
    iintothewind
        37
    iintothewind  
       1 小时 35 分钟前
    @xjpz #27 Scala 的 control-flow 演示的不错, 但是有些地方我认为还是处理的不好,
    几处 if-else 的嵌套如果用 pattern-match 是不是就不用这么多行了,
    errorhandling 的分支都是 Ok(XXX)不是很认同.
    Zien
        38
    Zien  
       8 分钟前
    對我來說, 主要是各種 monospace 字體... IDE 各種 UI... 還有縮進...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   668 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:59 · PVG 04:59 · LAX 12:59 · JFK 15:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.