seakingii

seakingii

个人开发者
V2EX 第 143924 号会员,加入于 2015-10-22 22:34:16 +08:00
今日活跃度排名 17057
5 G 67 S 60 B
今天在 Steam 里发现一张游戏截图,挺好玩的
游戏  •  seakingii  •  2024-08-01 10:08:12 AM  •  最后回复来自 lvsp95
1
关于 WEBMAN 的视图的效率
PHP  •  seakingii  •  2024-07-01 10:53:45 AM  •  最后回复来自 codingsir
3
goland 里有没有快速注释方法的快捷键/快捷方式 ?
Go 编程语言  •  seakingii  •  2023-11-22 12:52:44 PM  •  最后回复来自 securityCoding
1
好消息!Ubuntu22.04 内置了 dotnet6 安装包
C#  •  seakingii  •  2022-08-19 10:03:43 AM  •  最后回复来自 seakingii
5
Ubuntu 22.04 自带 mptcp 了,有什么好的应用方法吗?
Linux  •  seakingii  •  2023-01-13 11:24:06 AM  •  最后回复来自 huangya
15
seakingii 最近回复了
32 天前
回复了 gufeng311 创建的主题 程序员 语法最优雅的编程语言是什么?
@ouou0701 WEB 的前端(Blazor),后端, 桌面端,工控软件,ERP 之类.基本上 JAVA 能搞的 C#也能搞,手机端不怎么行
32 天前
回复了 Hyxiao 创建的主题 程序员 感觉这两年 PostgreSQL 明显越来越火了
我喜欢 PG 的原因

1 一把梭,啥功能都有.比如做一个知识库,有普通的数据库功能,又有向量功能.不需要在当前没有统治级的向量数据库里找一个,学习一个新的软件,找新的客户端库,还可以让 PG 达到 JSON,GIS,REDIS,MQ 这些功能
2 可以用扩展的语言写存储过程
3 数据库功能完整,高效
4 免费,没有什么乱糟糟的法律问题
32 天前
回复了 gufeng311 创建的主题 程序员 语法最优雅的编程语言是什么?
28 分部类.可以将一个类文件,拆分成几个文件,可以达到
1) 将大类按功能拆分成多个文件,更好维护
2) 可以一部分是自动代码生成的,另一个部分是手动修改的,这样即可以利用机器自动产生代码,然后又可以定制这个产生的代码
32 天前
回复了 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: >= 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}");
}
361 天前
回复了 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   ·   实用小工具   ·   923 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 21ms · UTC 20:20 · PVG 04:20 · LAX 13:20 · JFK 16:20
Developed with CodeLauncher
♥ Do have faith in what you're doing.