Programming languages 什么';这项编程功能的名称是什么?

Programming languages 什么';这项编程功能的名称是什么?,programming-languages,dynamic,static,functional-programming,Programming Languages,Dynamic,Static,Functional Programming,在一些动态语言中,我看到了这种语法: myValue = if (this.IsValidObject) { UpdateGraph(); UpdateCount(); this.Name; } else { Debug.Log (Exceptions.UninitializedObject); 3; } 基本上,可以将分支中的最后一条语句作为变量的返回值返回,这不仅适用于方法返回,而且也可以实现 这个功能的名称是什么 这也可以在静态类型语言(如C#)中

在一些动态语言中,我看到了这种语法:

myValue = if (this.IsValidObject)
{
    UpdateGraph();
    UpdateCount();
    this.Name;
}
else
{
    Debug.Log (Exceptions.UninitializedObject);
    3;
}
基本上,可以将分支中的最后一条语句作为变量的返回值返回,这不仅适用于方法返回,而且也可以实现

这个功能的名称是什么

这也可以在静态类型语言(如C#)中实现吗?我知道C#有三元运算符,但我的意思是使用如上图所示的if语句、switch语句。

它被称为“条件分支是表达式”或“语句/表达式除法的死亡”

见:

许多语言支持if表达式,这与if语句类似,但结果返回一个值。因此,它们是真正的表达式(计算为一个值),而不是语句(只执行一个操作)

也就是说,
如果(expr){…}
是语言语法中的表达式(可能是表达式或语句,取决于上下文),就像
?:
是C、C或Java等语言中的表达式一样

这种形式在函数式编程语言(避免副作用)中很常见——但是,它本身不是“函数式编程”,存在于其他接受/允许“函数式语法”的语言中,同时仍然使用严重的副作用和其他范例(例如Ruby)

一些语言(如Perl)允许模拟这种行为。也就是说,
$x=eval{if(true){“hello world!”}else{“再见”};print$x
将显示“hello world!”,因为即使
if
语法产品本身不是表达式,eval表达式的计算结果仍然是内部计算的最后一个值。(
$x=if…
是Perl中的语法错误)

快乐编码。

它被称为“条件分支是表达式”或“死亡到语句/表达式分割”

见:

许多语言支持if表达式,这与if语句类似,但结果返回一个值。因此,它们是真正的表达式(计算为一个值),而不是语句(只执行一个操作)

也就是说,
如果(expr){…}
是语言语法中的表达式(可能是表达式或语句,取决于上下文),就像
?:
是C、C或Java等语言中的表达式一样

这种形式在函数式编程语言(避免副作用)中很常见——但是,它本身不是“函数式编程”,存在于其他接受/允许“函数式语法”的语言中,同时仍然使用严重的副作用和其他范例(例如Ruby)

一些语言(如Perl)允许模拟这种行为。也就是说,
$x=eval{if(true){“hello world!”}else{“再见”};print$x
将显示“hello world!”,因为即使
if
语法产品本身不是表达式,eval表达式的计算结果仍然是内部计算的最后一个值。(
$x=if…
是Perl中的语法错误)


快乐编码。

这是一种三元条件编码

在C语言中,您可以使用,例如:

printf("Debug? %s\n", debug?"yes":"no");
#include <stdio.h>

int main(void)
{
    int a=0, b=1;

    a=({
            printf("testing compound statement\n");
            if(b==a)
                printf("equals\n");
            b+1;
        });

    printf("a=%d\n", a);
    return 0;
}
编辑:

复合语句列表可以在C中作为表达式进行计算。最后一条语句应该是表达式,整个复合语句用大括号括起来

例如:

printf("Debug? %s\n", debug?"yes":"no");
#include <stdio.h>

int main(void)
{
    int a=0, b=1;

    a=({
            printf("testing compound statement\n");
            if(b==a)
                printf("equals\n");
            b+1;
        });

    printf("a=%d\n", a);
    return 0;
}

这是一个三元条件

在C语言中,您可以使用,例如:

printf("Debug? %s\n", debug?"yes":"no");
#include <stdio.h>

int main(void)
{
    int a=0, b=1;

    a=({
            printf("testing compound statement\n");
            if(b==a)
                printf("equals\n");
            b+1;
        });

    printf("a=%d\n", a);
    return 0;
}
编辑:

复合语句列表可以在C中作为表达式进行计算。最后一条语句应该是表达式,整个复合语句用大括号括起来

例如:

printf("Debug? %s\n", debug?"yes":"no");
#include <stdio.h>

int main(void)
{
    int a=0, b=1;

    a=({
            printf("testing compound statement\n");
            if(b==a)
                printf("equals\n");
            b+1;
        });

    printf("a=%d\n", a);
    return 0;
}

要回答您的另一个问题:

a=({
        int c;
        if(b==a)
            c=b+1;
        else
            c=a-1;
        c;
    });
这也可以在静态类型语言(如C#)中实现吗

这是语言支持的东西吗?不,这能实现吗?有点

C——像C++、java和所有ILK都有表达式和语句。语句,如if-then和switch-case,不返回值,因此不能用作表达式。另外,稍微放一放,您的示例将

myValue
赋值给字符串或整数,而C#不能这样做,因为它是强类型的。你要么使用
objectmyvalue
,然后接受铸造和装箱成本,要么使用
var myValue
(它仍然是静态类型,只是推断出来的),或者其他一些奇怪的技巧

不管怎样,如果
如果then
是一个语句,那么在C#中该如何做呢?您必须构建一种方法来实现if-then-else的目标。您可以使用静态方法作为bools的扩展,以模拟Smalltalk的实现方式:

public static T IfTrue(此布尔值、Action doThen、Action doElse) { 如果(值) 返回doThen(); 其他的 返回doElse(); }

要使用此功能,您可以执行以下操作

var myVal = (6 < 7).IfTrue(() => return "Less than", () => return "Greater than");
var myVal=(6<7).IfTrue(()=>返回“小于”,()=>返回“大于”);
  • 免责声明:我没有测试过任何一个,所以它可能因为打字错误而无法正常工作,但我认为这个原则是正确的
新的IfTrue()函数检查它所附加的布尔值,并执行传递给它的两个委托之一。它们必须具有相同的返回类型,并且都不接受参数(使用闭包,所以这无关紧要)


现在,你应该这样做吗?不,几乎肯定不会。这不是正确的C#方式,因此很混乱,而且比使用if-then效率低得多。您正在用一条IL指令来换取复杂的类和方法调用,而.NET将在后台构建这些类和方法调用来支持这一点。

要回答您的另一个问题:

a=({
        int c;
        if(b==a)
            c=b+1;
        else
            c=a-1;
        c;
    });
这也可以在静态类型语言(如C#)中实现吗

这是语言支持的东西吗?不,这能实现吗?有点

C——像C++、java和所有ILK都有表达式和语句。语句,如if-then和switch-case,不返回值,因此不能用作ex