cangjie-dev
17
总安装量
10
周安装量
#20074
全站排名
安装命令
npx skills add https://github.com/chenchaotao666/cangjie-dev-skill --skill cangjie-dev
Agent 安装分布
opencode
7
cursor
7
codex
6
claude-code
4
amp
3
Skill 文档
ä»é¢è¯è¨å¼å婿
ä½ æ¯ä»é¢(Cangjie)ç¼ç¨è¯è¨ä¸å®¶ãä»é¢æ¯å为æ¨åºçé¢åå ¨åºæ¯åºç¨å¼åçéç¨ç¼ç¨è¯è¨ï¼ä¸»è¦ç¨äºé¸¿è(HarmonyOS)çæå¼åã
è¯è¨ç¹æ§
- å¤åç«¯æ¯æï¼CJNativeï¼ç¼è¯ä¸ºåçäºè¿å¶ï¼å CJVMï¼ç¼è¯ä¸ºåèç ï¼
- å¤èå¼ç¼ç¨ï¼æ¯æå½æ°å¼ãå½ä»¤å¼åé¢å对象
- ç±»åå®å ¨ï¼éæå¼ºç±»åï¼æ¯æç±»åæ¨æ
- å åå®å ¨ï¼èªå¨å å管çï¼è¿è¡æ¶è¾¹çæ£æ¥
- 髿并åï¼ç¨æ·æè½»éå线ç¨ï¼åçåç¨ï¼
- å ç¼ç¨ï¼åºäºè¯æ³å®çå ç¼ç¨è½å
å ³é®å
as, abstract, break, Bool, case, catch, class, const, continue,
Rune, do, else, enum, extend, for, func, false, finally, foreign,
Float16, Float32, Float64, if, in, is, init, import, interface,
Int8, Int16, Int32, Int64, IntNative, let, mut, main, macro, match,
Nothing, open, operator, override, prop, public, package, private,
protected, quote, redef, return, spawn, super, static, struct,
synchronized, try, this, true, type, throw, This, unsafe, Unit,
UInt8, UInt16, UInt32, UInt64, UIntNative, var, VArray, where, while
åºç¡ç±»å
| ç±»å | 说æ |
|---|---|
Int8/16/32/64 |
æç¬¦å·æ´æ° |
UInt8/16/32/64 |
æ ç¬¦å·æ´æ° |
Float16/32/64 |
æµ®ç¹æ° |
Bool |
å¸å°ç±»å (true/false) |
Rune |
Unicode å符 |
String |
å符串 |
Unit |
空类åï¼ç±»ä¼¼ voidï¼ |
Nothing |
åºç±»å |
åé声æ
// ä¸å¯ååé
let x: Int64 = 10
let y = 20 // ç±»åæ¨æ
// å¯ååé
var count: Int64 = 0
count = count + 1
// 常éï¼ç¼è¯æ¶ç¡®å®ï¼
const PI = 3.14159
彿°å®ä¹
// åºæ¬å½æ°
func add(a: Int64, b: Int64): Int64 {
return a + b
}
// ç®ååæ³ï¼å表达å¼ï¼
func multiply(a: Int64, b: Int64): Int64 {
a * b
}
// æ³å彿°
func identity<T>(value: T): T {
value
}
// 带é»è®¤åæ°
func greet(name: String, greeting: String = "Hello"): String {
"${greeting}, ${name}!"
}
ç»æä½ (struct)
struct Rectangle {
let width: Int64
let height: Int64
// æé 彿°
public init(width: Int64, height: Int64) {
this.width = width
this.height = height
}
// 主æé 彿°ï¼ç®ååæ³ï¼
// public Rectangle(let width: Int64, let height: Int64) {}
// æå彿°
public func area(): Int64 {
width * height
}
// éæå½æ°
public static func unit(): Rectangle {
Rectangle(1, 1)
}
}
ç±» (class)
// åºç±»éè¦ open 修饰符æè½è¢«ç»§æ¿
open class Animal {
protected var name: String
public init(name: String) {
this.name = name
}
public open func speak(): String {
"..."
}
}
// ç»§æ¿
class Dog <: Animal {
public init(name: String) {
super(name)
}
public override func speak(): String {
"Woof!"
}
}
æ¥å£ (interface)
interface Drawable {
func draw(): Unit
}
interface Resizable {
func resize(scale: Float64): Unit
}
// å®ç°å¤ä¸ªæ¥å£
class Circle <: Drawable & Resizable {
var radius: Float64
public init(radius: Float64) {
this.radius = radius
}
public func draw(): Unit {
println("Drawing circle with radius ${radius}")
}
public func resize(scale: Float64): Unit {
this.radius = this.radius * scale
}
}
æä¸¾ (enum)
// ç®åæä¸¾
enum Color {
| Red | Green | Blue
}
// 另忰çæä¸¾ï¼ä»£æ°æ°æ®ç±»åï¼
enum Option<T> {
| Some(T)
| None
}
// é彿䏾
enum Expr {
| Num(Int64)
| Add(Expr, Expr)
| Sub(Expr, Expr)
}
// 使ç¨
let color = Color.Red
let value = Option<Int64>.Some(42)
模å¼å¹é (match)
func describe(color: Color): String {
match (color) {
case Red => "红è²"
case Green => "绿è²"
case Blue => "èè²"
}
}
// 带解æç模å¼å¹é
func eval(expr: Expr): Int64 {
match (expr) {
case Num(n) => n
case Add(left, right) => eval(left) + eval(right)
case Sub(left, right) => eval(left) - eval(right)
}
}
// if-let 模å¼
if (let Some(value) <- optionalValue) {
println("Got value: ${value}")
}
å¼å¸¸å¤ç
// èªå®ä¹å¼å¸¸
class MyException <: Exception {
public init(message: String) {
super(message)
}
}
// try-catch-finally
func riskyOperation(): Int64 {
try {
if (someCondition) {
throw MyException("Something went wrong")
}
return 42
} catch (e: MyException) {
println("Caught: ${e.message}")
return -1
} finally {
println("Cleanup")
}
}
å¹¶åç¼ç¨
// å建线ç¨ï¼åç¨ï¼
let thread = spawn {
println("Running in new thread")
}
// çå¾
线ç¨å®æ
thread.join()
// 忥å
var counter = 0
let lock = ReentrantMutex()
func increment(): Unit {
synchronized(lock) {
counter = counter + 1
}
}
éåç±»å
// æ°ç»
let arr: Array<Int64> = [1, 2, 3, 4, 5]
let first = arr[0]
// ArrayListï¼å¯åé¿æ°ç»ï¼
var list = ArrayList<String>()
list.append("hello")
list.append("world")
// HashMap
var map = HashMap<String, Int64>()
map["one"] = 1
map["two"] = 2
// éå
for (item in arr) {
println(item)
}
for ((key, value) in map) {
println("${key}: ${value}")
}
屿§ (prop)
class Temperature {
private var _celsius: Float64 = 0.0
// getter å setter
public prop celsius: Float64 {
get() { _celsius }
set(value) { _celsius = value }
}
// åªè¯»å±æ§
public prop fahrenheit: Float64 {
get() { _celsius * 9.0 / 5.0 + 32.0 }
}
}
æ©å± (extend)
// 为已æç±»åæ·»å æ¹æ³
extend Int64 {
public func isEven(): Bool {
this % 2 == 0
}
}
// 使ç¨
let num: Int64 = 4
println(num.isEven()) // true
æ³å
// æ³åç±»
class Box<T> {
private var value: T
public init(value: T) {
this.value = value
}
public func get(): T {
value
}
}
// æ³å约æ
func compare<T>(a: T, b: T): Bool where T <: Comparable<T> {
a < b
}
项ç®ç»æ
my-project/
âââ cjpm.toml # 项ç®é
ç½®æä»¶
âââ src/
â âââ main.cj # ä¸»æºæä»¶
âââ test/
â âââ main_test.cj # æµè¯æä»¶
âââ build/ # æå»ºè¾åº
cjpm.toml 示ä¾
[package]
name = "my-project"
version = "1.0.0"
description = "My Cangjie Project"
[dependencies]
# ä¾èµé
ç½®
常ç¨å½ä»¤
# å建项ç®
cjpm init my-project
# æå»º
cjpm build
# è¿è¡
cjpm run
# æµè¯
cjpm test
# æ ¼å¼å代ç
cjfmt -w src/
# ä»£ç æ£æ¥
cjlint src/
代ç è§è
-
å½å约å®
- ç±»ååï¼PascalCaseï¼å¦
MyClassï¼ - 彿°/åéï¼camelCaseï¼å¦
myFunctionï¼ - 常éï¼UPPER_SNAKE_CASE æ PascalCase
- å
åï¼å°åï¼å¦
mypackageï¼
- ç±»ååï¼PascalCaseï¼å¦
-
缩è¿ï¼ä½¿ç¨ 4 ä¸ªç©ºæ ¼
-
æ¬å·é£æ ¼ï¼K&R 飿 ¼ï¼å·¦æ¬å·ä¸æ¢è¡ï¼
-
ææ¡£æ³¨éï¼ä½¿ç¨
/**å¼å¤´çåæ³¨é
ä¸å ¶ä»è¯è¨äºæä½
// è°ç¨ C 彿°
@Foreign
foreign func printf(format: CString, ...): Int32
// å¨ main ä¸ä½¿ç¨
main() {
unsafe {
printf("Hello from C!\n".toCString())
}
}
常è§é误åè§£å³æ¹æ¡
| é误 | åå | è§£å³æ¹æ¡ |
|---|---|---|
Variable not initialized |
åéæªåå§å | å¨ä½¿ç¨åèµå¼ |
Type mismatch |
ç±»åä¸å¹é | æ£æ¥ç±»åææ·»å ç±»åè½¬æ¢ |
Cannot modify immutable variable |
ä¿®æ¹ let åé | æ¹ç¨ var 声æ |
Recursive struct |
struct éå½å®ä¹ | ä½¿ç¨ class ä»£æ¿ |
ææ¡£æ¥è¯¢
å¦éæ¥è¯¢è¯¦ç»ç API ææ¡£ï¼è¯·è¯»åæ¬ skill ç®å½ä¸ç docs/ æä»¶å¤¹ï¼
docs/syntax/– 详ç»è¯æ³ææ¡£docs/stdlib/– æ ååº APIdocs/tools/– å·¥å ·é¾ä½¿ç¨docs/examples/– 宿´ç¤ºä¾
åºäº CangjieCorpus æå»ºï¼å 容éµå¾ª CC-BY-4.0 许å¯è¯