- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 C# 编程已经...有一段时间了。我最近编写了一个例程,我突然想到这是我第一次(我记得)我故意使用裸代码块(即没有前面的控制流语句)。代码看起来像这样:
//...
var output = source.GetRawOutput();
{
var fooItems = FooSource.GetItems();
output = TransformA.TransformOutput(output, p =>
{
GetFooContent(p, fooItems.GetNext());
});
}
{
var barItems = BarSource.GetItems();
output = TransformB.TransformOutput(output, p =>
{
GetBarContent(p, barItems.GetNext());
});
}
return output;
我以这种方式构建代码主要是为了进行健全性检查,以确保我不会意外引用错误的变量(即混淆 barItems 和 fooItems)。我还发现代码更具可读性。我当然可以将代码分解为三个单独的方法,但我觉得在这种情况下有点矫枉过正。
您是否在代码中使用裸代码块?为什么或为什么不?
最佳答案
如果您查看您的代码,就会发现这两个 block 非常相似。我敢打赌它们可以重构为一个 block 。
虽然这听起来不像是答案,但确实如此。我认为,一般来说,如果您希望像这样使用大括号,那么您正在处理的情况可以通过分解出另一种方法或一起重构来更好地处理。
总的来说。
具体答案——不,一旦我擅长 OO 并限制我在单个单元中所做的工作量,我从未认为它们可能是个好主意。
编辑:对于类似的代码,它必须相当容易重构。我会尝试重构。抱歉,如果我的语法有误,我真的不会使用 C#,Java 也没有闭包。
output = transform(FooSource, TransformA);
output = transform(BarSource, TransformB); // I know output is overwritten, but
// it is in the askers' example as well
transform(var itmSource, var transform) {
var output=source.GetRawOutput(); // Sorry, you never said where source came from.
var items = itmSource.GetItems();
output=transform.TransformOutput(output, p =>
{
GetContent(p, items.GetNext()); // GetContent may need to be passed in
// you didn't say where those calls came from.
// See comments below
});
}
return output;
}
像这样的重构并没有节省太多的输入,但它们显示了一些很好的模式——比如 FooSource 和 TransformA 之间的关系(可能还有 getContent 调用)——它们很有可能应该存储在单个对象和该对象应该传入,或类似的东西。 (很难从这个片段中分辨出来,通常重构需要比你提供的更广泛的代码 View )
请注意,它们还迫使您考虑 GetFooContent 和 GetBarContent。我敢和你打赌,它们是如此相似,以至于可以将它们分解为带有一个或两个传入变量的单个方法调用,或者分解为两个同级类中的一个方法。
由于这种关系总是会出现,并且总是会改进您类(class)中的其他代码,所以我相信这种重构绝对是强制性的,进行这种重构比任何事情都更能教会我真正的 OO。
关于c# - 您是否使用(裸)C# 代码块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/683959/
我对 Lift Cookbook for AJAX Forms 感到困惑,我遇到了以下对象声明: object EchoForm extends { 这很令人困惑,所以我尝试了一下,它编译得很好。我的
我正尝试按照指示在裸 CSS 模态窗口内实现视频 here到目前为止效果很好。我遇到的唯一问题是视频在模态窗口打开之前自动启动(我必须保留视频“自动启动”选项)。模态窗口关闭时视频也不会停止。 是否有
同样,裸 char16_t 是有符号的还是无符号的?是否定义了实现? 最佳答案 来自标准(C++11 前草案 n3290,或 C++11 后草案 n3337)§3.9.1 基本类型: Types ch
我使用 C# 编程已经...有一段时间了。我最近编写了一个例程,我突然想到这是我第一次(我记得)我故意使用裸代码块(即没有前面的控制流语句)。代码看起来像这样: //... var output =
我最近开始使用 nativescript,但我遇到了一个似乎无法解决的问题。 我想要完成的是只打开一个基本的 WebView 并设置一个外部 url 来加载,例如 stackoverflow.com。
我通过以下方式创建了一个共享仓库: git init --bare my_project.git 在某个时候,另一个用户用他的更改更新了这个 repo(使用 git push )。 我如何检查共享存储
我刚刚浏览完 Google 搜索结果,其中包含所有关于 git 无法克隆空存储库是多么愚蠢的电子邮件咆哮。一些善良的灵魂甚至提交了一个补丁。在升级 git 之前,克隆空的、裸 git 存储库的最简单、
我喜欢编写一些 wordpress 模板,并搜索了一些可用的裸模板,我可以从这些模板开始。 因为我是 wordpress 的新手,你能推荐最好的裸模板作为我可以使用的基础吗? 干杯 最佳答案 在我看来
我正试图找到一个最新的答案,以使用 Godaddy 和 Heroku SSL 设置裸域。我的目标是让所有页面都登陆安全页面 https://www.example.com https://www.ex
这个问题在这里已经有了答案: What's the -practical- difference between a Bare and non-Bare repository? (11 个答案) 关
我运行一个 git 服务器,它只包含裸远程。比如说,我有一个名为 DIG.git 的裸 Remote ,我通常使用它进行克隆: git clone 55.66.77.88:git/DIG.git 我想
是否有一个用于裸 git repo 目录的 GUI(任何地方都没有工作树)我可以: 检查日志 查看任何提交的整个工作树结构 关于我为什么需要这个: 我的 git 是这样初始化的: git --git-
我有一台服务器托管我的几个项目的“裸”GIT 存储库。 我想知道如何将 GIT 移动到另一台服务器? 最佳答案 只需将父目录复制到新机器,并让 check out 的副本使用 git remote s
我有一个域 example.com 和 www.example.com。我正在为 DNS 使用 Heroku 和 Zerigo。现在我有一个从根域到 www.example.com 的转发从我的 Ho
我的服务器已经在 TCP 端口 80 和 443 上运行 IIS。我想通过 Internet 为我的所有团队成员提供一个集中的“推/pull ”Git 存储库。 所以我应该使用 HTTP 或 HTTP
裸露的 SUM 和包裹在 CALCULATE 中的 sum 有什么区别? Measure1 = SUM( tab[col1]) ) Measure2 = CALCULATE ( SUM( tab[co
我是一名优秀的程序员,十分优秀!