V2EX seakingii
seakingii

seakingii

个人开发者
V2EX 第 143924 号会员,加入于 2015-10-22 22:34:16 +08:00
今日活跃度排名 10185
5 G 76 S 39 B
seakingii 最近回复了
74 天前
回复了 gufeng311 创建的主题 程序员 语法最优雅的编程语言是什么?
@ouou0701 WEB 的前端(Blazor),后端, 桌面端,工控软件,ERP 之类.基本上 JAVA 能搞的 C#也能搞,手机端不怎么行
我喜欢 PG 的原因

1 一把梭,啥功能都有.比如做一个知识库,有普通的数据库功能,又有向量功能.不需要在当前没有统治级的向量数据库里找一个,学习一个新的软件,找新的客户端库,还可以让 PG 达到 JSON,GIS,REDIS,MQ 这些功能
2 可以用扩展的语言写存储过程
3 数据库功能完整,高效
4 免费,没有什么乱糟糟的法律问题
74 天前
回复了 gufeng311 创建的主题 程序员 语法最优雅的编程语言是什么?
28 分部类.可以将一个类文件,拆分成几个文件,可以达到
1) 将大类按功能拆分成多个文件,更好维护
2) 可以一部分是自动代码生成的,另一个部分是手动修改的,这样即可以利用机器自动产生代码,然后又可以定制这个产生的代码
74 天前
回复了 gufeng311 创建的主题 程序员 语法最优雅的编程语言是什么?
我投 c#

我喜欢 C#的理由

1 强类型
2 语法优雅
3 系统内置的库非常全,而且比较规范
4 第三方库可能没有 JS,JAVA,PYTHON 那么多,但也一般够用
5 可以跨平台
6 默认性能就不错
7 可以利用语法特性写出非常强性能的代码
8 编译速度不错
9 有反射功能
10 有动态的语法


C# 的语法,在我看来,相当的符合人类的直觉,比如

1 前置类型
int a = 1; string name = "Jack";

string Hello(string name){
return "Hello," + name;
}

2 也可以使用类型推断

var a = 1;
var name = "Jack";
List<User> userList = new ();
var userList = new List<User>();

3 字符串插值

var first = "Ma";
var last = "Jack";
var name = $"{first} {last}";

4 字符串可以直接相加.有些语言不是用加号

var name = "Ma" + " " + "Jack";

5 扩展语法.可以直接扩展已有的类(就算是别人写的,第三方的库),最新的版本扩展更强,不过我还没用上.

class MyClass {
public string Name {get;set;}
public MyClass(string name){
this.Name = name;
}
}


static class MyClassExtensition {
public static string GetName(this MyClass myClass){
return this.Name;
}
}

6 属性 Property.有机会在访问/更改字段的时候做一些操作,比起 setName,getName 调用起来优雅


class MyClass {

private string name;

public string Name {
get {
Console.Write(name);
return Name;
}
set{
Console.Write(name);
name = value;
}
}


// 自动属性
public int Age { get; set; } = 99;

// 只读属性初始化
public ICollection<int> Values { get; } = new List<int>();

public int Age { get; init; } // 只能在初始化时设置


}


var m = new MyClass();
m.Name = "Ma Jack";
Console.Write(m.Name);


7 Attribute .可以做一些元编程

[ApiController]
[Route("/api/user")]
public class UserController {

[Route("get_name")]
[HttpGet]
public string GetName(){
return "Ma Jack";
}

}

8 linq, expression ,Lambda

var userList = new List<MyClass>();

var filteredList = userList.Where(v=>v.Name.Contains("J"))
.OrderBy(v=>v.Name)
.Select(v=> "Hello," + v.Name)
.Take(10)
.ToList();

var results = from p in people
where p.Age > 18
orderby p.Name
select p.Name;



9 disposable 模式,释放资源比较优雅

class Db : IDioposable {

private Connection connection;

public Db(){
cOnnection= new Connection();

}

public List QueryList(string sql){
//....
}

public Task<List> QueryListAsync(string sql){
//....
}

public void Dispose(){
connection.Close();
}

}


//调用 DB 类访问数据并自动关闭数据库连接,即使中间有出现异常
using var db = new Db();
var userList = db.QueryList("select * from sys_user");
//--这里自动调用 db.Dispose();


10 async/await

//调用 DB 类访问数据并自动关闭数据库连接,即使中间有出现异常
using var db = new Db();
var userList = await db.QueryListAsync("select * from sys_user");
//--这里自动调用 db.Dispose();

11 修饰
public
private
protected
readonly
static
...

12 静态类和静态构造

static class Tools {

static string NewMd5(){
return ...;
}

}


class class User {

static List<User> cachedUserList = new ();

//静态构造
static User(){
cachedUserList = GetUserListFromDatabase();
}


}

// 模块级初始化
[ModuleInitializer]
internal static void Initialize()
{
// 模块加载时自动执行
}


13 模式匹配 (C# 7.0+)

// 类型模式
if (obj is string s)
{
Console.WriteLine(s.Length);
}

// 常量
if (count is 0)
{
Console.WriteLine("Empty");
}

// Switch 表达式
var result = shape switch
{
Circle c => $"Circle with radius {c.Radius}",
Rectangle r => $"Rectangle {r.Width}x{r.Height}",
_ => "Unknown shape"
};


//递归
if (person is { Address: { City: "New York" } })
{
Console.WriteLine("New Yorker");
}

14 元组和解构


(int x,int y) GetCoordinates(){
return (100,200);
}


// 元组解构
var (x, y) = GetCoordinates();

var (_, _, area) = GetShapeInfo(); // 忽略前两个返回值



15 字符串定义

var str = "1";
var str = @"1";
var str = $"now : {DateTime.Now}";
var json = """
{
"name": "John",
"age": 30
}
""";

16 空条件运算符 (?. 和 ?[])


Customer? customer = GetCustomer();

var length = customer?.Orders?[0]?.Description?.Length;


// 空合并运算符
var name = customer?.Name ?? "Unknown";

// 空合并赋值 (C# 8.0+)
list ??= new List<int>();




17 结构类型.高效

struct Point {
public int X {get;set;}
public int Y {get;set;}
}

18 记录类型 (C# 9.0+)

public record Person(string FirstName, string LastName);

//clone
var newPerson = person with { LastName = "Smith" };


if (person is not null and { Age: gt;= 18 })
{
// ...
}


// 不可变且自带值语义比较
var person1 = new Person("John", "Doe");
var person2 = person1 with { LastName = "Smith" };

19 索引与范围 (C# 8.0+)

var lastItem = array[^1]; // 最后一个元素
var slice = array[1..4]; // 从索引 1 到 3 的元素


20 命名参数与可选参数

public void Configure(int width, int height = 600, string title = "App")
{
// ...
}

// 调用
Configure(width: 800, title: "My Application");


21 重载

public class MyClass {

private string name {get;set;}

public MyClass(){
this.name = "---";
}

public MyClass(string name){
this.name = name;
}


public string Hello(){
return "Hello," + name;
}

public string Hello(string s){
return s + name;
}


}


22 集合初始化

var numbers = new List<int> { 1, 2, 3, 4, 5 };
var dict = new Dictionary<int, string>
{
[1] = "One",
[2] = "Two"
};


23 操作符可重载

24 局部函数

public int Factorial(int n)
{
return Compute(n);

int Compute(int k) => k <= 1 ? 1 : k * Compute(k - 1);
}

25 表达式成员

public override string ToString() => $"{FirstName} {LastName}";
public double Area => Width * Height;

26 nameof 表达式


Console.WriteLine(nameof(Person.Name)); // 输出 "Name"

27 调用方信息特性

void Log([CallerMemberName] string member = "",
[CallerFilePath] string file = "",
[CallerLineNumber] int line = 0)
{
Console.WriteLine($"{file}:{line} in {member}");
}
2024-09-05 23:53:56 +08:00
回复了 ggp1ot2 创建的主题 GitHub Copilot cursor pro 的 500 次用完了怎么办?
@falcon05 请教,快速和慢速有什么区别,会特别慢吗?
```
原数据: {"width":50,"height":180,"weight":50,"age":30,"name":"lalala","partner":{"width":28,"height":170,"weight":49,"age":30,"name":"bobo","adc":"acasdv"},"children":[{"width":30,"height":100,"weight":40,"age":12,"name":"liliya","friends":[{"name":"tom","type":"cat"},{"name":"bam","type":"dog"}]},{"width":45,"height":160,"weight":45,"age":15,"name":"tifny","friends":[{"name":"erix","gender":"male"}]}]}

编码数据: {"1":30,"2":[{"1":12,"2":[{"2":"tom","3":"cat"},{"2":"bam","3":"dog"}],"3":100,"4":"liliya","5":40,"6":30},{"1":15,"2":[{"1":"male","2":"erix"}],"3":160,"4":"tifny","5":45,"6":45}],"3":180,"4":"lalala","5":{"1":30,"2":170,"3":"bobo","4":49,"5":28,"adc":"acasdv"},"6":50,"7":50}

解码数据: {"age":30,"children":[{"age":12,"friends":[{"name":"tom","type":"cat"},{"name":"bam","type":"dog"}],"height":100,"name":"liliya","weight":40,"width":30},{"age":15,"friends":[{"gender":"male","name":"erix"}],"height":160,"name":"tifny","weight":45,"width":45}],"height":180,"name":"lalala","partner":{"age":30,"height":170,"name":"bobo","weight":49,"width":28,"adc":"acasdv"},"weight":50,"width":50}

```
2024-08-05 09:02:06 +08:00
回复了 KJH 创建的主题 程序员 感觉.NET 比 Java 难多了
另外, 越新的版本, 运行速度越快. .NET 团队会不断的优先底层逻辑.
2024-08-05 09:01:11 +08:00
回复了 KJH 创建的主题 程序员 感觉.NET 比 Java 难多了
.NET 这边越新的版本,功能越好.


我一直想有的一个功能 ,就是 能用 GO 一样 AOT 编译网站项目, 目前还不是很行. 但随着几个大版本更新,可能会越来越好.
2024-08-05 08:57:14 +08:00
回复了 KJH 创建的主题 程序员 感觉.NET 比 Java 难多了
@KJH "那学.net8 之后能上手 3.1 么, 我理解公司项目应该不会迭代这么快把" 可以的

实际上可以直接用 最新的,没有什么问题, .NET 的质量还是有保证的,一个大版本正式上线前有 N 个测试版本在跑很久了.我从来都是用最新的.
这个事件让我长见识了,幸好我一般不用 公用 CSS CDN

国内好多公司下限真低
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5738 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 26ms UTC 03:33 PVG 11:33 LAX 20:33 JFK 23:33
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86