当我编写代码时,我会尝试将所有内容划分为函数(方法,如果您愿意).函数X做东西X,Y做Tuff Y而不是方法X做东西X,Y和Z!这给了我更多可重用的代码.我喜欢.:)
让我们来看看这段代码:
var user = {
users: [],
userCount: 0,
addUser: function(user) {
(this.users).push(user);
},
incrementCount: function() {
++this.userCount;
}
}
var user = { // 2nd example.
users: [],
userCount: 0,
addUser: function(user) {
(this.users).push(user);
++this.userCount;
}
}
Run Code Online (Sandbox Code Playgroud)
(它是用JavaScript编写的,但这里的语言不是必需的.)
在我看来,第二个例子将更容易和更安全地使用,比方说,API用户.忘记打电话很容易user.incrementCount().你怎么看?第二个例子自动完成.
那么如何找到平衡点呢?关于在函数内调用函数的任何最佳实践?
感谢您阅读本文.
编辑:
我刚才想到了这个:
var user = {
users: [],
userCount: 0,
addUser: function(user) {
(this.users).push(user);
this.incrementCount();
},
incrementCount: function() {
++this.userCount;
}
}
Run Code Online (Sandbox Code Playgroud) 我目前正在为具有全局变量和嵌套子例程功能的语言构建编译器。以前,我只为只有局部变量而没有嵌套子例程的语言构建了一个编译器。
我在代码生成阶段如何重用在语义分析阶段填充的符号表有问题。我将符号表作为一个链表堆栈,其中每个链表代表在特定范围内声明的标识符。每次它进入一个范围时,都会创建一个新列表并将其推送到堆栈中,它成为当前范围。同样,每次离开作用域时,栈顶的列表都会被弹出。最后,在语义分析完成后,我实际上有空符号表,就像它开始时一样。但是,代码生成器需要一个完全填充的符号表才能正确生成代码。如何在不重新做语义分析期间所做的事情(即向符号表输入标识符)的情况下做到这一点?
compiler-construction code-reuse code-generation semantic-analysis symbol-table
有一次,我在考虑如何在 Perl 中创建一个包(或类)以实现代码的可重用性。我有 C++ 背景,无法理解 Perl 子例程和包的工作原理。所以,我在 Perl 中创建了一个 Stack 数据结构(它实际上只是一个具有 LIFO 方法的数组),每次我想打印它时都需要我写下循环(这是非常低效的)
@_ = (1, 8, 14, 45);
push(@_, 69);
push(@_, 55);
push(@_, 65536);
push(@_, 4294967296);
print "Print without newline: ";
$size = @_;
for my $i(1 .. ($size-1))
{
print $_[$i]." ";
}
print "Print with newline: ";
for my $i(1 .. ($size-1))
{
say scalar $_[$i];
}
pop(@_);
pop(@_);
pop(@_);
print "Print without newline: ";
# HERE WE GO AGAIN
$size = @_;
for my $i(1 .. …Run Code Online (Sandbox Code Playgroud) 我按照本指南创建ControlContainer可重用表单,成功创建了可重用表单组,但是当我尝试使用 创建可重用表单元素时matInput,遇到了No value accessor错误。这是my-form-field.ts文件:
import { Component, Input, OnInit } from '@angular/core';
import {
ControlContainer,
FormBuilder, FormControl,
FormGroup,
FormGroupDirective,
} from '@angular/forms';
@Component({
selector: 'my-form-field',
template: `
<mat-form-field>
<mat-label>{{label}}</mat-label>
<input matInput [formControlName]="formControlName">
</mat-form-field>
`,
viewProviders: [{ provide: ControlContainer, useExisting: FormGroupDirective }],
})
export class MyFormFieldComponent implements OnInit {
@Input() formControlName: string;
@Input() label: string;
formGroup: FormGroup;
constructor(private ctrlContainer: FormGroupDirective, private formBuilder: FormBuilder) {
}
ngOnInit(): void {
this.formGroup = this.ctrlContainer.form; …Run Code Online (Sandbox Code Playgroud) code-reuse angular-material angular angular-reactive-forms controlvalueaccessor
我想创建 2 个具有相同字段的枚举(甚至更多),以及与之相关的相同方法,例如:
enum Enum1 {
A1('A1', 1),
B1('B1', 2);
String name;
int x1;
Enum1(this.name, this.x1);
String concat(String s) {
return name + s;
}
}
enum Enum2 {
A2('A2', 3),
B2('B2', 4);
String name;
int x2;
Enum2(this.name, this.x2);
String concat(String s) {
return name + s;
}
}
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能在不同的枚举中重用相同方法的代码?
name即,如何重用与concat上一个示例相关的代码?
我尝试使用一个类来实现两个枚举,但它不断提示我必须在每个枚举中分别重新实现方法concat和 getter name。
我失败的尝试是这样的:
class Reuse {
String name;
String concat(String s) {
return name + s;
}
}
enum Enum1 implements Reuse …Run Code Online (Sandbox Code Playgroud) 有Javascript vars /等的基本持久性.您调用一个函数/方法,并在下次调用相同的函数/方法时,它将保留上次的数据.
您可以在完成变量后删除变量,但这会消除为该实例再次使用代码的优势.
那么在同一页面内编写可以在不同元素上重用的代码的正确方法是什么.
因此,我需要能够编写代码,以便我可以将它指向几个不同的元素,然后与为每个元素隔离的代码进行交互.
所以在PHP中(作为一个例子)我会这样做:
$element1 = new MyClass();
$element2 = new MyClass();
$element3 = new MyClass();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它是在三个隔离范围中运行的相同代码.我怎样才能用JS正确地做到这一点.即使使用jQuery的extend()也会给我带来麻烦.
谢谢.
我一直在考虑为我们组织内部开发的所有软件设置某种类型的库.我想收集好SO人可能对这个主题有任何想法.
我认为,向开发人员灌输编写可重用代码的好处有什么意义,如果在下一个项目中开发人员做的第一件事是文件 - >新的,因为缺乏对已经重用的代码的了解.
作为一个额外的好处,我认为仅仅通过拥有这样的库可以鼓励开发人员在编写代码时更多地考虑可重用性
我想让这个库尽可能简单,也许我唯一的两个要求是:
我看到每个资产/组件所需的基本信息是:
你会记录更多的信息吗?
什么是最好的平台,如维基,论坛等?
是什么让这样的软件库成功与不成功?
所有的想法都非常感谢.
谢谢
编辑:
发布后发现这些类似的问题:
我有一个原生的android应用程序,包含10个活动的大约20个类.
我想在每个Activity中重用一个函数定义.我有一个底栏,从任何活动点击它应该触发此功能.由于Java无法进行多重继承,如何将此功能复制到我想要的位置?
我还是MVC的新手,我正在试图弄清楚如何创建在.cshtml文件中生成的函数,并将它们移到中心位置,以便可以重用它们.
例如,使用DevExpress库创建网格和弹出窗口.这是网格的列定义:
settings.Columns.Add( column => {
column.ColumnType = MVCxGridViewColumnType.TextBox;
column.Caption = "Samples";
column.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
column.CellStyle.HorizontalAlign = HorizontalAlign.Center;
column.SetDataItemTemplateContent( Content => ViewContext.Writer.Write(
GeneratePopup( "Samples"
, DataBinder.Eval( Content.DataItem , "SampleHTML" ).ToString()
, "Samp" + DataBinder.Eval( Content.DataItem , "Row" ).ToString()
, (bool)DataBinder.Eval( Content.DataItem , "ShowSample" ) , 750 , (string)DataBinder.Eval( Content.DataItem , "SampleCount" ) )
) );
} );
Run Code Online (Sandbox Code Playgroud)
在它中调用"GeneratePopup",它在.cshtml文件中定义为:
@functions {
private string GeneratePopup(string aTitle , string aString , string aID , bool aShow , int aWidth , string aSuffix ) …Run Code Online (Sandbox Code Playgroud) 任务:在不同的项目中重用C#代码但没有项目引用(不需要额外的dll /引用只是因为一个小的实用程序类).有4个项目,其中一个包含实用程序类,目前由其他3个项目链接源代码.问题:一旦其中一个项目开始引用其他项目(对于其他一些需求),编译器开始抱怨(显然)在这些项目中存在相同的类(具有相同的命名空间).
除了将类移动到单独的项目或为每个项目制作4个类的副本并单独维护它们之外,还有其他解决方案吗?
我想知道有没有办法获取链接文件,以便文件中的类获得项目特定的唯一命名空间...
code-reuse ×10
oop ×3
c# ×2
javascript ×2
android ×1
angular ×1
asp.net-mvc ×1
coding-style ×1
dart ×1
enums ×1
implements ×1
java ×1
perl ×1
persistence ×1
php ×1
razor ×1
reusability ×1
scope ×1
symbol-table ×1