【问题标题】:how can I align colons in ternary operator?如何在三元运算符中对齐冒号?
【发布时间】:2021-12-09 16:44:41
【问题描述】:

我希望我的代码像这样对齐

double flagx_ul = wx * 2 > wy *3 ? -wy * 3 / 2 / wx : -1.0;
double flagy_ul = wx * 2 > wy *3 ? 1.0              : wx * 2 / 3 / wy;
double flagx_lr = wx * 2 > wy *3 ? wy * 3 / 2 / wx  : 1.0;
double flagy_lr = wx * 2 > wy *3 ? -1.0             : -wx * 2 / 3 / wy;

我在 clangformat 文档中找到的都是

BreakBeforeTernaryOperators (Boolean) clang-format 3.7
If true, ternary operators will be placed after line breaks.

true:
veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription
    ? firstValue
    : SecondValueVeryVeryVeryVeryLong;

false:
veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription ?
    firstValue :
    SecondValueVeryVeryVeryVeryLong;

我怎样才能让它们排成一行,但要对齐

【问题讨论】:

    标签: c++ clang-format


    【解决方案1】:

    编写函数可以提高可读性,即使是简短的语句也是如此。 在这种情况下,它还可以帮助您减少代码重复。 这是一个例子:

    bool fn(const double a, const double b)
    {
        return (a / b) * (3.0 / 2.0);
    }
    
    int main()
    {
        double wx = 1.0;
        double wy = 2.0;
    
        // only do your predicate calculation once.
        auto pred = ((wx * 2.0) > (wy * 3.0));
    
        // and by using ! you can align the most similar parts of the ternary operation.
        double flagx_ul =  pred ? fn(-wy,wx) : -1.0;  
        double flagy_ul = !pred ? fn( wx,wy) :  1.0;
        double flagx_lr =  pred ? fn( wy,wx) :  1.0;
        double flagy_lr = !pred ? fn(-wx,wy) : -1.0;
    }
    

    【讨论】:

    • 我明白你的意思,但在这种情况下,我只想知道如何对齐冒号,以便快速找出 flagx 和 flagy。如果代码值得其他人阅读,我会照你说的做。
    猜你喜欢
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2022-01-04
    • 2021-11-03
    • 1970-01-01
    相关资源
    最近更新 更多